合并xls宏
EXCEL宏代码大全
EXCEL宏代码大全本文件部分文章来源于网络000. A列半角内容变红Sub A列半角内容变红() ? Dim rg As Range, i As Long ? Application.ScreenUpdating = False ? For Each rg In Cells.SpecialCells(xlCellTypeConstants, 3) For i = 1 To Len(rg) If Asc(Mid(rg, i, 1))001. A列等于A列减B列Sub A列等于A列减B列() For i = 1 To 23 Cells(i, 1) = Cells(i, 1) - Cells(i, 2) Next End Sub002. B列录入数据时在A列返回记录时间(工作表代码)Public Sub Worksheet_Change(ByVal Target As Range) If Target.Column = 2 Then Target.Offset(, -1) = Now End If End Sub003. Excel宏常用代码本大类暂没有内容,以下是关于本类的所有记录集。
004. Sub 以当前日期为名称另存文件()ActiveWorkbook.SaveAs Filename:=Date & ".xls" End Sub005. Sub 启用保存()mandBars("File").Controls(4).Enabled = True mandBars("File").Controls(5).Enabled = True End Sub006. Sub 执行前需要验证密码的宏()If InputBox("请输入您的使用权限:", "系统提示") = 123 Then 重排窗口 ''要执行的宏代码或宏名称 Else MsgBox "对不起,您没有使用该宏的权限,按确定键后退出!" End If End Sub007. Sub 选择第5行开始所有数据行B()Rows("5:" & Cells.Find("*", , , , 1, 2).Row).Select End Sub008. VBA返回公式结果Sub VBA返回公式结果() x = Application.WorksheetFunction.Sum(Range("a2:a100"))Range("B1") = x End Sub009. 不连续区域录入对勾Sub 批量录入对勾() Selection.FormulaR1C1 = "√" End Sub010. 不连续区域录入当前单元地址Sub 区域录入当前单元地址() For Each mycell In Selection mycell.FormulaR1C1 = mycell.Address Next End Sub011. 不连续区域录入当前数字日期Sub 区域录入当前数字日期() Selection.FormulaR1C1 = Format(Now(), "yyyymmdd") End Sub012. 不连续区域录入当前文件名Sub 批量录入当前文件名() Selection.FormulaR1C1 = End Sub013. 不连续区域录入当前日期Sub 区域录入当前日期() Selection.FormulaR1C1 = Format(Now(), "yyyy-m-d") End Sub014. 不连续区域录入当前日期和时间Sub 区域录入当前日期和时间() Selection.FormulaR1C1 = Format(Now(), "yyyy-m-d h:mm:ss") End Sub015. 不连续区域插入当前文件名和表名及地址Sub 批量插入当前文件名和表名及地址() For Each mycell In Selection mycell.FormulaR1C1 = "[" + + "]" + + "!" + mycell.Address Next End Sub016. 不连续区域插入文本Sub 批量插入文本() Dim s As Range For Each s In Selection s = "文本内容" & s Next End Sub017. 不连续区域添加文本Sub 批量添加文本() Dim s As Range For Each s In Selection s = s & "文本内容" Next End Sub018. 为当前选定的多单元插入指定名称Sub 为当前选定的多单元插入指定名称() = "临时" s.Add Name:="临时", RefersT o:=Selection ''或者换用这行代码也可以 End Sub019. 为指定工作表加指定密码保护表Sub 为指定工作表加指定密码保护表() Sheet10.Protect Password:="123" End Sub020. 为指定工作表设置滚动范围(工作簿代码)Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range) Sheet1.ScrollArea = "A1:M30" EndSub021. 从指定位置向下同时录入多单元指定内容Sub 从指定位置向下同时录入多单元指定内容() Dim arr arr = Array("1", "2", "13", "25", "46", "12", "0", "20") [B2].Resize(8, 1) = Application.WorksheetFunction.Transpose(arr) End Sub022. 以A1单元内容批量插入批注Sub 以A1单元内容批量插入批注() Dim r As Range If Selection.Cells.Count > 0 Then For Each r In Selection r.AddComment ment.Visible = False ment.Text Text:=[a1].T ext Next End If End Sub023. 以A1单元文本作表名插入工作表Sub 以A1单元文本作表名插入工作表() Dim nm As String nm = [a1] Sheets.Add = nm End Sub024. 以当前日期为新文件名另存文件Sub 以当前日期为新文件名另存文件() ThisWorkbook.SaveAs ThisWorkbook.Path & "\" & Format(Now(), "yyyymmdd") & ".xls" End Sub025. 以当前日期和时间为新文件名另存文件Sub 以当前日期和时间为新文件名另存文件() ThisWorkbook.SaveAs ThisWorkbook.Path & "\" & Format(Now(), "yyyy" & "年" & "mm" & "月" & "dd" & "日" & "h" & "时" & "mm" & "分" & "ss" & "秒") & ".xls" End Sub026. 以指定区域为表目录补充新表Sub 以指定区域为表目录补充新表() Dim dic As Object, sh AsWorksheet Dim arr, item arr = Range("B1:BB1") Set dic = CreateObject("scripting.dictionary") For Each sh In ThisWorkbook.Worksheets dic.Add ,027. 以指定单元内容为新文件名另存文件Sub 以指定单元内容为新文件名另存文件() ThisWorkbook.SaveAs Filename:=ThisWorkbook.Path & "\" & Sheet1.[A1] End Sub028. 以本工作表名称另存文件到当前目录Sub 以本工作表名称另存文件到当前目录() ActiveWorkbook.SaveAs Filename:=ThisWorkbook.Path & "\" & & ".xls" End Sub029. 以活动工作表名称另存文件到Excel当前默认目录Sub 以活动工作表名称另存文件到Excel当前默认目录() ActiveWorkbook.SaveAs Filename:= & ".xls", FileFormat:= _ xlNormal, Password:="", WriteResPassword:="", ReadOnlyRecommended:=False _ , CreateBackup:=030. 使单元内容保持不变的工作表代码Private Sub Worksheet_Change(ByVal Target As Range) [B2] = "不可更改的数据" End Sub031. 保存并退出ExcelSub 保存并退出Excel() Application.SendKeys ("{ENTER}{ENTER}%fx") ActiveWorkbook.Save End Sub032. 保护工作表时取消选定锁定单元Sub 取消选定锁定单元() ActiveSheet.EnableSelection =xlUnlockedCells ''用于2000版 End Sub033. 光标定位到名称指定位置Sub 定位() Application.Goto Range(Evaluate("名称")) End Sub034. 光标定位到指定工作表A列最后数据行下一单元Sub 光标定位到指定工作表A列最后数据行下一单元() a = Sheets("数据库").[a65536].End(xlUp).Row Sheets("数据库").Select Range("A" & a + 1).Select End Sub035. 光标所在行上移一行Sub 光标所在行上移一行() Dim i% i = Split(ActiveCell.Address, "$")(2) If i > 1 Then Rows(i).Cut Rows(i - 1).Insert Shift:=xlDown End If End Sub036. 光标移动Sub 光标移动() ActiveCell.Offset(1, 2).Select ''向下移动1行,向右移动2列 End Sub037. 全选固定范围内小于0的单元Sub 全选固定范围内小于0的单元() Dim rng As Range Dim yvhf For Each rng In Range("d6: i18") If rng < 0 Then yvhf = yvhf & rng.Address & "," End If Next Range(Left(yvhf, Len(yvhf) - 1)).Select End Sub038. 全选选定范围内小于0的单元Sub 全选选定范围内小于0的单元() Dim rng As Range Dim yvhf For Each rng In Selection If rng < 0 Then yvhf = yvhf & rng.Address & "," End If Next Range(Left(yvhf, Len(yvhf) - 1)).Select End Sub039. 全部显示指定表的自动筛选Sub 全部显示指定表的自动筛选() If Sheet1.FilterMode = True Then Sheet1.ShowAllData End If End Sub040. 全部清除当前选择区域Sub 全部清除当前选择区域() Selection.Clear '' Range("A1:B10").Clear ''全部清除指定区域 End Sub041. 关闭文件时执行指定宏(工作簿代码)Private Sub Workbook_BeforeClose(Cancel As Boolean) 重排窗口 ''要执行的宏名称 End Sub042. 关闭文件时自动隐藏指定工作表(ThisWorkbook)Private Sub Workbook_BeforeClose(Cancel As Boolean) ActiveWorkbook.Unprotect Sheets("Sheet2").Visible = False Sheets("Sheet3").Visible = False ActiveWorkbook.Protect Structure:=True, Windows:=Fal043. 分离临时表A列数据的文本和超链接并会同其他数据整理到数据库表Sub 分离A列数据的文本和超链接并会同其他数据整理到指定表() ier = Worksheets("数据库").Range("b60000").End(xlUp).Row For ee = 5 To Range("a60000").End(xlUp).Row For Each hh In Worksheets("临时").Hyperlinks If hh.T extToDisplay =044. 分离临时表A列数据的文本和超链接并整理到数据库表Sub 分离A列中的超链接到指定表的B和C列() i = Worksheets("数据库").Range("b60000").End(xlUp).Row For Each h In Worksheets("临时").Hyperlinks Worksheets("数据库").Cells(i + 1, 2)= h.TextT oDisplay Worksheets("数据库").Cells(045. 删除A列为指定内容的行Sub 删除A列为指定内容的行() Dim a, b As Integer a = Sheet1.[a65536].End(xlUp).Row For b = a To 2 Step -1 If Cells(b, 1).Value = "删除" Then Rows(b).Delete End If Next End Sub046. 删除A列空行Sub 删除A列空行() Columns(1).SpecialCells(xlCellTypeBlanks).EntireRow.Delete End Sub047. 删除A列非数字单元行Sub 删除A列非数字单元行() i = [a65536].End(xlUp).Row Range("A1:A" & i).SpecialCells(xlCellTypeConstants, 2).EntireRow.Delete End Sub048. 删除B列数据的超链接Sub 删除超链接() For Each Rng In Range("B3:B" & [B65536].End(xlUp).Row)Sheet1.Range(Rng.Address).Hyperlinks.Delete Next End Sub049. 删除全部名称Sub 删除全部名称() On Error Resume Next Dim l As Integer l = s.Count For i = l T o 1 Step -1 s(i).Delete Next End Sub050. 删除全部未选定工作表Sub 删除全部未选定工作表() Dim sht As Worksheet, n As Integer, iFlag As Boolean Dim ShtName() As String n =ActiveWindow.SelectedSheets.Count ReDim ShtName(1 To n) n = 1 For Each sht In ActiveWindow.Selec051. 删除包含固定文本单元的行或列Sub 删除包含固定文本单元的行或列() Do Cells.Find(what:="哈哈").Activate Selection.EntireRow.Delete ''删除行 '' Selection.EntireColumn.Delete ''删除列 Loop Until Cells.Find(what:="哈哈") Is Nothing End Sub052. 删除指定文件Sub 删除指定文件() Kill "E:\信件\1.xls" End Sub053. 删除指定行Sub 删除指定行() Workbooks("临时表").Sheets("表2").Range("5:5").Delete End Sub054. 判断指定文件是否已经打开Sub 判断指定文件是否已经打开() Dim x As Integer For x = 1 To Workbooks.Count If Workbooks(x).Name = "函数.xls" Then ''文件名称 MsgBox "文件已打开" Exit Sub End If Next MsgBox "文件未打开" End Sub055. 加数据有效限制Sub 加数据有效限制() With Selection.Validation .Delete .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _ xlBetween, Formula1:="******************".IgnoreBlank = False .InCellDropd056. 单元区域引用(工作表代码)Private Sub Worksheet_Activate()Sheet1.Range("A1:B3").Value = Sheet2.Range("A1:B3").Value End Sub057. 单元反选Sub 单元反选() Application.DisplayAlerts = False Application.ScreenUpdating = False Dim raddress As String, taddress As String raddress = Selection.Address taddress = edRange.Address058. 单元格录入1位字符就跳转(工作表代码)Private Sub TextBox1_Change() If Len(Me.TextBox1.Text) <> 1 Then Exit Sub Me.TextBox1.Activate ActiveCell = Me.TextBox1.Text Me.TextBox1.Text = "" ActiveCell.Activate Application.SendKeys "~"059. 单元格录入数据时运行宏的代码Private Sub Worksheet_Change(ByVal Target As Range) 重排窗口 End Sub060. 去除指定范围内的对象Sub 去除指定范围内的对象() ??Dim p As Shape Set My = Worksheets("工作表名") For Each p In My.Shapes If Not Application.Intersect(p.T opLeftCell, Range("范围")) Is Nothing Then p.Delete Next061. 双击单元执行宏(工作表代码)Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) If Range("$A$1") = "关闭" Then Exit Sub Select Case T arget.Address Case "$A$4" Call 宏1 Cancel = True Case "$B$4"062. 双击单元隐藏该行(工作表代码)Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) Rows(Target.Row).Hidden = True End Sub063. 双击指定区域单元执行宏(工作表代码)Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) If Range("$A$1") = "关闭" Then Exit Sub If Not Application.Intersect(Target, Range("A4:A9", "C4:C9")) Is Nothing Then064. 双击指定单元,循环录入文本(工作表代码)Dim nums As Byte Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) If Target.Address = "$A$1" Then nums = nums Mod 3 + 1 Target = Mid("上中下", nums, 1) T arget.Offse065. 反方向文本(自定义函数)Function zhyz(zhyz1 As Range) zhyz = StrReverse(zhyz1) End Function 将代码复制到模块后单元公式:=zhyz(单元格)066. 取消指定行或列的隐藏Sub 取消隐藏行() Rows("3:5").Select Selection.EntireRow.Hidden = False End Sub Sub 取消隐藏列() Columns("C:F").Select Selection.EntireColumn.Hidden = False End Sub067. 取消数据有效限制Sub 取消数据有效限制() WithSelection.Validation .Delete .Add Type:=xlValidateInputOnly, AlertStyle:=xlValidAlertStop, Operator _ :=xlBetween .IgnoreBlank = False .InCellDropdown = False .InputTitle =068. 取消自动筛选()Sub 取消自动筛选() ActiveSheet.AutoFilterMode = False End Sub069. 取消选定区域的公式只保留值(假空转真空)Sub 取消选定区域的公式只保留值() ?''?? Sheets("数据归并集中").Select ''指定工作表 ?''?? Columns("Q:R").Select ''指定范围 Selection.Value = Selection.Value End Sub070. 另存所有工作表为工作簿Sub 另存所有工作表为工作簿() Dim sht As Worksheet Application.ScreenUpdating = False ipath = ThisWorkbook.Path & "\" For Each sht In Sheets sht.Copy ActiveWorkbook.SaveAs ipath & & ".xls" ''(工作表名071. 另存指定文件名Sub 另存指定文件名() ActiveWorkbook.SaveAs ThisWorkbook.Path & "\别名.xls" End Sub072. 另存本表为TXT文件Sub 另存本表为TXT文件() Dim s As String Dim FullName As String, rng As Range Application.ScreenUpdating = False FullName = ( & ".txt") ''以当前表名为TXT文件名 '' FullName = Replace(ThisWorkboo073. 右侧单元自动加5(工作表代码)Private Sub Worksheet_Change(ByVal Target As Range) Application.EnableEvents = False Target.Offset(0, 1) = T arget + 5 Application.EnableEvents = True End Sub074. 合并A1至C1的内容写到D15单元的批注中‘/dispbbs.asp?boardid=2&id=251887 northwolves版主 Sub 将A1至C1的内容写到D15单元的批注中() [iv1:iv12] = "=rc1 & "" ""& rc2 &"" ""& rc3" [d15].AddComment Join(Application.Transpose([iv1:i075. 合并各工作表内容Sub 合并各工作表内容() sp = InputBox("各表内容之间,间隔几行?不输则默认为0") If sp = "" Then sp = 0 End If st = InputBox("各表从第几行开始合并?不输则默认为2") If st = "" Then st = 2 End If Sheets(1).Select Sheets.Add If st076. 合并指定目录中所有文件中相同格式工作表的数据Sub 合并数据() ''合并指定目录中所有文件中相同格式工作表的数据 ''见/dispbbs.asp?boardid=1&replyid=900613&id=249319&page=1 &skin=0&Star=2帖11楼eq800的代码 Dim myPath$, myFile$, AK As Workbook, aRow%, tRow%, i077. 回车光标向下Sub 录入光标向下() Application.MoveAfterReturnDirection = xlDown End Sub078. 回车光标向右Sub 录入光标向右() Application.MoveAfterReturnDirection =xlToRight End Sub079. 固定区域单元分类变色Sub 单元分类变色() Dim rng As Range For Each rng In Range("d6: i18") If rng < 0 Then rng.Interior.ColorIndex = 4 ''小于0的单元变绿底色 End If Next For Each rng In Range("d6: i18") If rng > 0 Then rng.080. 在A1返回当前选中单元格数量Sub 在A1返回当前选中单元格数量() [A1] = Selection.Count End Sub081. 在A列产生不重复随机数Sub 在A列产生不重复随机数() Randomize Timer Dim c(100) As Byte For i = 1 To 100 ''产生100个随机数 c(i) = i Next k = 100 Do While l < 100 r = Int(Rnd() * k) + 1 ''随机数的范围 aa = c(r) c(r) = c(k) c(k) = aa k =082. 在A和B列返回当前选区的名称和公式Sub 在A和B列返回当前选区的名称和公式() [a1].ListNames End Sub083. 在F1单元显示光标位置批注内容的代码Private Sub Worksheet_SelectionChange(ByVal Target As Range) a = Selection.Address b = Range(a).NoteText Cells(1, 6) = b End Sub084. 在M和N列的14行以下选择单元时显示调用日历控件(工作表代码)Private Sub Calendar1_Click() With Calendar1 ActiveCell= .Value .Visible = False End With End Sub Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Target.Column = 13 And Target085. 在三个宏中依次循环执行一个并相应修改按钮名称(控件按钮代码)Option Explicit Private Sub CommandButton1_Click() With CommandButton1 If .Caption = "宏1" Then Call 宏1 .Caption = "宏2" Exit Sub End If If .Caption = "宏2" Then Call 宏2 .Caption = "宏3" Exit S086. 在两个宏中依次循环执行一个并相应修改按钮名称(控件按钮代码)Private Sub CommandButton1_Click() With CommandButton1 If .Caption = "保护工作表" Then Call 保护工作表 .Caption = "取消工作表保护" Exit Sub End If If .Caption = "取消工作表保护" Then Call 取消工作表保护 .Caption = "保护工作表"087. 在多个宏中依次循环执行一个(控件按钮代码)Private Sub CommandButton1_Click() Static RunMacro As Integer Select Case RunMacro Case 0 宏1 RunMacro = 1 Case 1 宏2 RunMacro = 2 Case 2 宏3 RunMacro = 0 End Select End Sub088. 在当前工作组各表中分别执行指定宏''northwolves版主解答 /dispbbs.asp?boardid=2&id=251426&star=2#914934 Sub 在当前工作组各表中分别执行指定宏() Dim SH As Worksheet For Each SH In ActiveWindow.SelectedSheets SH.Activate 临时 N089. 在当前选区有条件替换数值为文本Sub 在当前选区有条件替换数值为文本() For Each r In Selection If r.Value > 18 And r.Value < 29.5 Then r.Value = "Y" Next End Sub090. 在所有工作表的A1单元返回顺序号Sub 在所有工作表的A1单元返回顺序号() For i = 1 T o Sheets.Count Sheets(i).Cells(1, 1) = "''" & Application.WorksheetFunction.Text(0 + i, "000") Next End Sub091. 在指定区域选择单元时数值加1(工作表代码)Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Not Application.Intersect([a1:e10], Target) Is Nothing Then Target = Val(Target) + 1 End If End Sub092. 在指定单元记录打印和预览次数(工作簿代码)Private Sub Workbook_BeforePrint(Cancel As Boolean) Range("A1") = 1 + Range("A1") End Sub093. 在指定工作表的指定单元返回光标当前多选区地址(工作簿代码)Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range) Worksheets("表2").Range("A1") = Target.Address(0, 0) End Sub094. 在有密码的工作表执行代码Sub 在有密码的工作表执行代码() Sheets("1").Unprotect Password:=123 ''假定表名为“1”,密码为“123”打开工作表 Range("C:C").SpecialCells(xlCellTypeBlanks).EntireRow.Hidden = True ''隐藏C列空值行 Sheets("1").Protect Password:=123095. 在目录表建立本工作簿中各表链接目录Sub 在目录表建立本工作簿中各表链接目录() Dim s%, Rng As Range On Error Resume Next Sheets("目录").Activate If Err = 0 Then Sheets("目录").UsedRange.Delete Else Sheets.Add = "目录" End If For i =096. 在第一个表前插入多工作表Sub 在第一个表前插入多工作表() Sheets(1).Select For I = 1 To 50 = "新表" & I Next End Sub097. 填公式Sub 填公式() Range("C2:C12").Value = "=SUM(A2:B2)" End Sub098. 处理导入的显示为科学计数法样式的身份证号Sub 处理导入的显示为科学计数法样式的身份证号() Selection.Value = Selection.Formula End Sub099. 复制单元数值Sub 复制数值() s = Workbooks("book1").Sheets("Sheet1").Range("A1:A2") Workbooks("book2").Sheets("Sheet1").Range("A1:A2") = s End Sub100. 复制单元格所在列Sub 复制单元格所在列() Selection.EntireColumn.Copy End Sub101. 复制单元格所在行Sub 复制单元格所在行() Selection.EntireRow.Copy End Sub102. 复制当前工作簿的报表到临时工作簿Sub 复制当前工作簿的报表到临时工作簿() ''作者:yuanzhuping 版主 Dim x As Integer Dim sht As Worksheet On Error Resume Next For x = 1 To Workbooks.Count If Workbooks(x).Name = "临时.xls" Then For Each sht In Workbook103. 奇偶页分别打印Sub 奇偶页分别打印() Dim i%, Ps% Ps = ExecuteExcel4Macro("GET.DOCUMENT(50)") ''总页数 MsgBox "现在打印奇数页,按确定开始." For i = 1 To Ps Step 2 ActiveSheet.PrintOut from:=i, To:=i Next i MsgBox "现在打印偶数页,按确定开始." For104. 定义指定工作表标签颜色Sub 定义指定工作表标签颜色() Sheets("Sheet1").T ab.ColorIndex = 46 End Sub105. 定位数据及区域以上的空值Sub 定位数据及区域以上的空值() Dim aa As Range For Each a In edRange If a Like〈0 Then If aa Is Nothing Then Set aa = a.Cells Else Set aa = Union(aa, a.Cells) End If End If Next aa.Select106. 定位选定单元格式相同的全部单元格Sub 定位选定单元格式相同的全部单元格() Dim FirstCell As Range, FoundCell As Range Dim AllCells As Range With Application.FindFormat .Clear .NumberFormatLocal = Selection.NumberFormatLocal .HorizontalAlignment =107. 实现删去特定的行Sub test() For Each i In ThisWorkbook.Worksheets(1).range("E:E") If i.Value = "32766" Then Rows(i.Row).Delete End If Next i End Sub ''用的是第一张工作表,可以按需要改Worksheets(1)为指定的工作表。
Power Query案例合并同一个文件夹下多个Excel工作簿文件及SQL转置动态查询自动刷新
去年一分一档,今年一分一档。
换算快速统计两家指标。
财务付款统计表与成本合同台账匹配合同编号let fx=(s)=>let源 = Web.BrowserContents("https:///search/"&s&".html"),信息= List.Transform(List.Select(Text.Split(源,"href="""),eachText.Contains(_,"torrent")),(x)=>"https://"&Text.Split(x,""" target"){0}),a=List.Transform(信息,Web.BrowserContents),b=List.Transform(a,(r)=>Text.Split(List.Select(Text.Split(r,"href="""),eachText.Contains(_,"thunder")){0},""">"){0})inbinfx文件夹源= Table.AddColumn( Folder.Files("x"), "添加列", each Excel.Workbook([Content]))直接两个文件源。
= bine({Excel.Workbook(File.Contents("C:\Users\Administrator\Desktop\a1.xls"), null, true){[Name="第2页"]}[Data],Excel.Workbook(File.Contents("C:\Users\Administrator\Desktop\a2.xls"), null,true){[Name="第2页"]}[Data]})清单去空白行。
EXCEL宏编程实例
Excel 宏编程举例说明学习宏编程,需要VB基础,如果一点VB基础和面向对象的概念,建议先去补补VB,不然即使自认为学好了也只能拿着高射炮打蚊子!一)、宏学习首先需要明确的是,本文不可能教会您关于宏的所有内容。
您需要学会利用"录制宏"的方法来学习宏:点击Excel"工具"下拉菜单中"宏"下quot;录制新宏",此后可象平时一样进行有关操作,待完成后停止录制。
然后再点击"工具"下拉菜单中"宏"下"宏"的"编辑"选项即可打开刚才所录制的宏的Visual Basic源程序,并且可以在此时的"帮助"下拉菜单中获得有关的编程帮助。
对录制宏进行修改不仅可以学习宏的使用,还能大大简化宏的编写。
二)、基本概念为了学习Excel中的宏,我们需要先了解以下一些基本概念。
1、工作簿:Workbooks、Workbook、ActiveWorkbook、ThisWorkbookWorkbooks集合包含Excel中所有当前打开的Excel工作簿,亦即所有打开的Excel文件;Workbook 对应Workbooks中的成员,即其中的Excel文件;ActiveWorkbook代表当前处于活动状态的工作簿,即当前显示的Excel文件;ThisWorkbook代表其中有Visual Basic代码正在运行的工作簿。
在具体使用中可用Workbooks(index)来引用Workbook对象,其中index为工作簿名称或编号;如Workbooks(1)、Workbooks("年度报表.xls")。
而编号按照创建或打开工作簿的顺序来确定,第一个打开的工作簿编号为1,第二个打开的工作簿为2……。
2、工作表:Worksheets、Worksheet、ActiveSheetWorksheets集合包含工作簿中所有的工作表,即一个Excel文件中的所有数据表页;而Worksheet 则代表其中的一个工作表;ActiveSheet代表当前处于的活动状态工作表,即当前显示的一个工作表。
wps 宏合并excel 代码
wps 宏合并excel 代码【原创实用版】目录1.WPS 宏合并 Excel 代码简介2.WPS 宏合并 Excel 代码的操作方法3.WPS 宏合并 Excel 代码的优点和局限性正文在日常的办公过程中,我们常常需要对 Excel 文件进行合并操作。
作为一款办公软件,WPS Office 提供了宏合并 Excel 代码的功能,为用户带来了便利。
接下来,我们将详细介绍 WPS 宏合并 Excel 代码的相关内容。
一、WPS 宏合并 Excel 代码简介WPS 宏合并 Excel 代码是指在 WPS Office 中,通过编写 VBA 代码实现 Excel 文件的自动合并。
这种操作方式适用于批量处理相似的Excel 文件,可以提高工作效率。
二、WPS 宏合并 Excel 代码的操作方法1.打开 WPS Office,选择“工具”菜单下的“宏”选项,点击“创建”按钮,新建一个宏。
2.在打开的 VBA 编辑器中,编写如下代码:```vbaSub 合并工作簿 ()Dim MyPath, MyName, Rg As RangeDim Sh As WorksheetDim WorkR As WorkbookDim xNum As IntegerApplication.ScreenUpdating = FalseMyPath = InputBox("请输入需要合并的 Excel 文件所在的文件夹路径", "提示")MyName = Dir(MyPath & Application.PathSeparator & "*.xls*")xNum = 0Do While MyName <> ""Set WorkR = Workbooks.Open(MyPath &Application.PathSeparator & MyName)For Each Sh In WorkR.SheetsxNum = xNum + 1Sh.CopyAfter:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count)ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count).Name = "Sheet" & xNumNext ShWorkR.Close SaveChanges:=FalseMyName = DirLoopApplication.ScreenUpdating = TrueMsgBox "合并完成", vbInformationEnd Sub```3.将代码粘贴到 VBA 编辑器中,并保存。
excel宏,实现三组数据随机组合成新样本
i g f j e h d c b a
丙 己 丁 壬 庚 癸 戊 乙 甲 辛
六 五 二 四 九 十 三 八 一 七
i丙六 g己五 f丁二 j壬四 e庚九 h癸十 d戊三 c乙八 b甲一 a辛七 特别说明: 按alt+F8,再点编辑,可以修改宏代码。 1、每列数据设为10,如果不等于10应该实际情况修改程序。 2、要求每列的数据同,如果每列数据不同,则应修改程序。 3、灰色区域为程序生成数据。 4、可以执行无限次,每次执行程序,灰色区结果都不同。 此程序的功能,是将三组ቤተ መጻሕፍቲ ባይዱ据随机组合成一个数据。
abcdefghij甲乙丙丁戊己庚辛壬癸一二三四五六七八九十igfjehdcba丙己丁壬庚癸戊乙甲辛六五二四九十三八一七i丙六g己五f丁二j壬四e庚九h癸十d戊三c乙八b甲一a辛七特别说明
a b c d e f g h i j
甲 乙 丙 丁 戊 己 庚 辛 壬 癸
一 二 三 四 五 六 七 八 九 十
(完整版)VBA方法_-_将多个excel文件合并到一个excel的多个sheet中
VBA方法 - 将多个excel文件合并到一个excel的多个sheet中由上级的要求,同事需要将以前做的所有excel文件(手机话费清单表),都合并到一个excel中,并且每个excel文件为一个sheet。
她开始是用复制粘贴的方法,很麻烦。
所有她就问我,有没有什么方法可以快点做完。
网上搜索,方法如下:1. 将需合并的excel文件放在同一个文件中,并这个文件中新建一个excel 文件2. 打开新建的excel文件,按alt + f11建,打开宏,新建一个模组,将下面的代码拷贝进去,并保存。
Sub Books2Sheets()'定义对话框变量Dim fd As FileDialogSet fd = Application.FileDialog(msoFileDialogFilePicker)'新建一个工作簿Dim newwb As WorkbookSet newwb = Workbooks.AddWith fdIf .Show = -1 Then'定义单个文件变量Dim vrtSelectedItem As Variant'定义循环变量Dim i As Integeri = 1'开始文件检索For Each vrtSelectedItem In .SelectedItems'打开被合并工作簿Dim tempwb As WorkbookSet tempwb = Workbooks.Open(vrtSelectedItem)'复制工作表tempwb.Worksheets(1).Copy Before:=newwb.Worksheets(i) '把新工作簿的工作表名字改成被复制工作簿文件名,这儿应用于xls文件,即Excel97-2003的文件,如果是Excel2007,需要改成xlsxnewwb.Worksheets(i).Name = VBA.Replace(, ".xls", "")'关闭被合并工作簿tempwb.Close SaveChanges:=Falsei = i + 1Next vrtSelectedItemEnd IfEnd WithSet fd = NothingEnd Sub3. 运行程序,弹出对话框,批量选择要合并的excel名,确定即可。
Excel常见宏(简洁版)
Excel常见宏(简洁版)清除剪贴板sub清除剪贴板()application.cutcopymode=false批量清除软回车sub批量去除硬contrary()'也可直接使用alt+10或13替换cells.replacewhat:=chr(10),replacement:=\xlbyrows,matchcase:=false,searchforma t:=false,replaceformat:=falseendsub判断指定文件是否已经打开sub推论选定文件与否已经关上()dimxasintegerforx=1toworkbooks.countifworkbooks(x).name=\函数.xls\'文件名称msgbox\文件已关上\exitsubendifnextmsgbox\文件未打开\endsub当前文件contacts至选定目录sub当前激活文件另存到指定目录()activeworkbook.saveasfilename:=\信件\\\endsub另存指定文件名subcontacts选定文件名()activeworkbook.saveasthisworkbook.path&\别名.xls\endsub以本工作表名称contacts文件至当前目录sub以本工作表名称另存文件到当前目录()activeworkbook.saveasfilename:=thisworkbook.path&\endsub将本工作表单独另存文件到excel当前默认目录sub将本工作表单独contacts文件至excel当前预设目录()activesheet.copyactiveworkbook.saveasfilename:=&\endsub以活动工作表名称contacts文件至excel当前预设目录sub以活动工作表名称另存文件到excel当前默认目录()activeworkbook.saveasfilename:=&\xlnormal,password:=\,createbackup:=falseendsubcontacts所有工作表为工作簿sub另存所有工作表为工作簿()dimshtasworksheetapplication.screenupdating=falseipath=thisworkbook.path&\foreachshtinsheetssht .copyactiveworkbook.saveasipath&&\工作表名称为文件名)'activeworkbook.saveasipath&&trim(sht.[d15])&\(文件名称&d15单元内容)'activeworkbook.saveasipath&trim(sht.[d15])&\'(文件名称为d15单元内容)activeworkbook.closenextapplication.screenupdating=trueendsub以指定单元内容为新文件名另存文件sub以选定单元内容为崭新文件名contacts文件()thisworkbook.saveasfilename:=thisworkbook.path&\endsub以当前日期为崭新文件名contacts文件sub以当前日期为新文件名另存文件()thisworkbook.saveasthisworkbook.path&\endsubsub以当前日期为名称另存文件()activeworkbook.saveasfilename:=date&\endsub以当前日期和时间为新文件名另存文件sub以当前日期和时间为崭新文件名contacts文件()thisworkbook.saveasthisworkbook.path&\年\月\日\时\分\秒\endsubcontacts本表为txt文件sub另存本表为txt文件()dimsasstringdimfullnameasstring,rngasrangeapplication.screenupdating=falsefullname=(&\'以当前表名为txt文件名'fullname=replace(thisworkbook.fullname,\'以当前文件名为txt文件名'fullname=replace(thisworkbook.fullname,\'以文件名&表中名叫txt文件名openfullnameforoutputas#1'以读写方式打开文件,每次写内容都会覆盖原先的内容 '参照协助,fullname为文件全名foreachrnginrange(\s=s&iif(s=\|\ifrng.column=range(\print#1,s&\|\'把数据写下至文本文件里s=\endifnextclose#1'关闭文件application.screenupdating=truemsgbox\数据已引入文本\endsub 引用指定位置单元内容为部分文件名另存文件sub提及选定边线单元内容为部分文件名contacts文件()activeworkbook.saveasfilename:=\信件\\\解答\郎雀.xls\endsub 将a列数据排序至d列sub将a列数据排序到d列()[d:d]=[a:a].value[d:d].sortkey1:=range(\endsub将选定范围的数据排序至d列sub将指定范围的数据排列到d列()dimarr1,arr2,i%,xarr1=range(\redimarr2(1toubound(arr1,1)*ubound(arr1,2),1to1)foreachxinapplication.transpos e(arr1)i=i+1arr2(i,1)=xnextxrange(\endsub光标移动sub光标移动()activecell.offset(1,2).select'向下移动1行,向右移动2列endsub光标所在行下移一行sub光标所在行上移一行()dimi%i=split(activecell.address,\ifi>1thenrows(i).cutrows(i-1).insertshift:=xldownendifendsub提数据有效率管制sub加数据有效限制()withselection.validation.delete.errormessage=\要奋斗就会有牺牲,死人的事是经常发生的。
Excel-259个常用宏
代码目录
链接 类别
1 打开全部隐藏工作表
点击
2 循环宏
点击
3 录制宏时调用“停止录制”工具栏
点击
4 高级筛选5列不重复数据至指定表
点击
5 双击单元执行宏(工作表代码)
点击
6 双击指定区域单元执行宏(工作表代码)
点击
7 进入单元执行宏(工作表代码)
点击
8 进入指定区域单元执行宏(工作表代码)
点击
9 在多个宏中依次循环执行一个(控件按钮代码)
点击
33 不连续区域录入当前日期
点击
34 不连续区域录入当前数字日期
点击
35 不连续区域录入当前日期和时间
点击
36 不连续区域录入对勾
点击
37 不连续区域录入当前文件名
点击
38 不连续区域添加文本
点击
39 不连续区域插入文本
点击
40 从指定位置向下同时录入多单元指定内容
点击
41 按aa工作表A列的内容排列工作表标签顺序
102 选择第5行开始所有数据行
103 选择光标或选区所在行
104 选择光标或选区所在列
105 光标定位到名称指定位置
106 选择名称定义的数据区
107 选择到指定列的最后行
108 将Sheet1的A列的非空值写到Sheet2的A列
109 将名称1的数据写到名称2
110 单元反选
111 调整选中对象中的文字
点击
52 为指定工作表加指定密码保护表
点击
53 在有密码的工作表执行代码
点击
54 执行前需要验证密码的宏(控件按钮代码)
点击
55 拷贝A1公式和格式到A2
EXCEL宏编程简明教程(有实例),
Excel 宏编程简明教程一)、宏学习首先需要明确的是,本文不可能教会您关于宏的所有内容。
您需要学会利用"录制宏"的方法来学习宏:点击Excel"工具"下拉菜单中"宏"下quot;录制新宏",此后可象平时一样进行有关操作,待完成后停止录制。
然后再点击"工具"下拉菜单中"宏"下"宏"的"编辑"选项即可打开刚才所录制的宏的Visual Basic源程序,并且可以在此时的"帮助"下拉菜单中获得有关的编程帮助。
对录制宏进行修改不仅可以学习宏的使用,还能大大简化宏的编写。
二)、基本概念为了学习Excel中的宏,我们需要先了解以下一些基本概念。
1、工作簿:Workbooks、Workbook、ActiveWorkbook、ThisWorkbookWorkbooks集合包含Excel中所有当前打开的Excel工作簿,亦即所有打开的Excel文件;Workbook对应Workbooks中的成员,即其中的Excel文件;ActiveWorkbook代表当前处于活动状态的工作簿,即当前显示的Excel文件;ThisWorkbook代表其中有Visual Basic代码正在运行的工作簿。
在具体使用中可用Workbooks(index)来引用Workbook对象,其中index为工作簿名称或编号;如Workbooks(1)、Workbooks("年度报表.xls")。
而编号按照创建或打开工作簿的顺序来确定,第一个打开的工作簿编号为1,第二个打开的工作簿为2……。
2、工作表:Worksheets、Worksheet、ActiveSheetWorksheets集合包含工作簿中所有的工作表,即一个Excel文件中的所有数据表页;而Worksheet则代表其中的一个工作表;ActiveSheet代表当前处于的活动状态工作表,即当前显示的一个工作表。
300个常用excel宏_成为excel高手
宏文件集▲打开全部隐藏工作表Sub 打开全部隐藏工作表()Dim i As IntegerFor i = 1 To Sheets.CountSheets(i).Visible = TrueNext iEnd Sub▲循环宏Sub 循环()AAA = Range("C2")Dim i As LongDim times As Longtimes = AAA'times代表循环次数,执行前把times赋值即可(不可小于1,不可大于2147483647)For i = 1 To timesCall 过滤一行If Range("完成标志") = "完成" Then Exit For '如果名为'完成标志'的命名单元的值等于'完成',则退 'If Sheets("传送参数").Range("A" & i).Text = "完成" Then Exit For '如果某列出现"完成"内 Next iEnd Sub▲录制宏时调用“停止录制”工具栏Sub 录制宏时调用停止录制工具栏()mandBars("Stop Recording").Visible = TrueEnd Sub▲高级筛选5列不重复数据至指定表Sub 高级筛选5列不重复数据至Sheet2()Sheets("Sheet2").Range("A1:E65536") = "" '清除Sheet2的A:D列Range("A1:E65536").AdvancedFilter Action:=xlFilterCopy, CopyToRange:=Sheet2.Range( _"A1"), Unique:=TrueSheet2.Columns("A:E").Sort Key1:=Sheet2.Range("A2"), Order1:=xlAscending, Header:=xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, SortMethod _:=xlPinYinEnd Sub▲双击单元执行宏(工作表代码)Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)If Range("$A$1") = "关闭" Then Exit SubSelect Case Target.AddressCase "$A$4"Call 宏1Cancel = TrueCase "$B$4"Call 宏2Cancel = TrueCase "$C$4"Call 宏3Cancel = TrueCase "$E$4"Call 宏4Cancel = TrueEnd SelectEnd Sub▲双击指定区域单元执行宏(工作表代码)Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)If Range("$A$1") = "关闭" Then Exit SubIf Not Application.Intersect(Target, Range("A4:A9", "C4:C9")) Is Nothing Then 打开End Sub▲进入单元执行宏(工作表代码)Private Sub Worksheet_SelectionChange(ByVal Target As Range)'以单元格进入代替按钮对象调用宏If Range("$A$1") = "关闭" Then Exit SubSelect Case Target.AddressCase "$A$5" '单元地址(Target.Address),或命名单元名字()Call 宏1Case "$B$5"Call 宏2Case "$C$5"Call 宏3End SelectEnd Sub▲进入指定区域单元执行宏(工作表代码)Private Sub Worksheet_SelectionChange(ByVal Target As Range)If Range("$A$1") = "关闭" Then Exit SubIf Not Application.Intersect(Target, Range("A4:A9","C4:C9")) Is Nothing Then C打开End Sub▲在多个宏中依次循环执行一个(控件按钮代码)Private Sub CommandButton1_Click()Static RunMacro As IntegerSelect Case RunMacroCase 0宏1RunMacro = 1Case 1宏2RunMacro = 2Case 2宏3RunMacro = 0End SelectEnd Sub▲在两个宏中依次循环执行一个并相应修改按钮名称(控件按钮代码)Private Sub CommandButton1_Click()With CommandButton1If .Caption = "保护工作表" ThenCall 保护工作表.Caption = "取消工作表保护"Exit SubEnd IfIf .Caption = "取消工作表保护" ThenCall 取消工作表保护.Caption = "保护工作表"Exit SubEnd IfEnd WithEnd Sub▲在三个宏中依次循环执行一个并相应修改按钮名称(控件按钮代码)Option ExplicitPrivate Sub CommandButton1_Click()With CommandButton1If .Caption = "宏1" ThenCall 宏1.Caption = "宏2"Exit SubEnd IfIf .Caption = "宏2" ThenCall 宏2.Caption = "宏3"Exit SubEnd IfIf .Caption = "宏3" ThenCall 宏3.Caption = "宏1"Exit SubEnd IfEnd WithEnd Sub▲根据A1单元文本隐藏/显示按钮(控件按钮代码)Private Sub Worksheet_SelectionChange(ByVal Target As Range)If Range("A1") > 2 ThenCommandButton1.Visible = 1ElseCommandButton1.Visible = 0End IfEnd SubPrivate Sub CommandButton1_Click()重排窗口End Sub▲当前单元返回按钮名称(控件按钮代码)Private Sub CommandButton1_Click()ActiveCell = CommandButton1.CaptionEnd Sub▲当前单元内容返回到按钮名称(控件按钮代码)Private Sub CommandButton1_Click()CommandButton1.Caption = ActiveCell▲奇偶页分别打印Sub 奇偶页分别打印()Dim i%, Ps%Ps = ExecuteExcel4Macro("GET.DOCUMENT(50)") '总页数MsgBox "现在打印奇数页,按确定开始."For i = 1 To Ps Step 2ActiveSheet.PrintOut from:=i, To:=iNext iMsgBox "现在打印偶数页,按确定开始."For i = 2 To Ps Step 2ActiveSheet.PrintOut from:=i, To:=iNext iEnd Sub▲自动打印多工作表第一页Sub 自动打印多工作表第一页()Dim sh As IntegerDim xDim yDim syDim syzx = InputBox("请输入起始工作表名字:")sy = InputBox("请输入结束工作表名字:")y = Sheets(x).Indexsyz = Sheets(sy).IndexFor sh = y To syzSheets(sh).SelectSheets(sh).PrintOut from:=1, To:=1Next shEnd Sub▲查找A列文本循环插入分页符Sub 循环插入分页符()' Selection = Workbooks("临时表").Sheets("表2").Range("A1") 调用指定地址内容Dim i As LongDim times As Longtimes = Application.WorksheetFunction.CountIf(Sheet1.Range("a:a"), "分页")'times代表循环次数,执行前把times赋值即可(不可小于1,不可大于2147483647)For i = 1 To timesCall 插入分页符Next iEnd SubSub 插入分页符()Cells.Find(What:="分页", After:=ActiveCell, LookIn:=xlValues, LookAt:= _xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False) _ .ActivateActiveWindow.SelectedSheets.HPageBreaks.Add Before:=ActiveCellSub 取消原分页()Cells.SelectActiveSheet.ResetAllPageBreaksEnd Sub▲将A列最后数据行以上的所有B列图片大小调整为所在单元大小Sub 将A列最后数据行以上的所有B列图片大小调整为所在单元大小()Dim Pic As Picture, i&i = [A65536].End(xlUp).RowFor Each Pic In Sheet1.PicturesIf Not Application.Intersect(Pic.TopLeftCell, Range("B1:B" & i)) Is Nothing Then Pic.Top = Pic.TopLeftCell.TopPic.Left = Pic.TopLeftCell.LeftPic.Height = Pic.TopLeftCell.HeightPic.Width = Pic.TopLeftCell.WidthEnd IfNextEnd Sub▲返回光标所在行数Sub 返回光标所在行数()x = ActiveCell.RowRange("A1") = xEnd Sub▲在A1返回当前选中单元格数量Sub 在A1返回当前选中单元格数量()[A1] = Selection.CountEnd Sub▲返回当前工作簿中工作表数量Sub 返回当前工作簿中工作表数量()t = Application.Sheets.CountMsgBox tEnd Sub▲返回光标选择区域的行数和列数Sub 返回光标选择区域的行数和列数()x = Selection.Rows.County = Selection.Columns.CountRange("A1") = xRange("A2") = yEnd Sub▲工作表中包含数据的最大行数Sub 包含数据的最大行数()n = Cells.Find("*", , , , 1, 2).RowMsgBox nEnd Sub▲返回A列数据的最大行数Sub 返回A列数据的最大行数()n = Range("a65536").End(xlUp).RowRange("B1") = nEnd Sub▲将所选区域文本插入新建文本框Sub 将所选区域文本插入新建文本框()For Each rag In Selectionn = n & rag.Value & Chr(10)NextActiveSheet.Shapes.AddTextbox(msoTextOrientationHorizontal, ActiveCell.Left + ActiveCell.Wi Selection.Characters.Text = "问题:" & nWith Selection.Characters(Start:=1, Length:=3).Font.Name = "黑体".FontStyle = "常规".Size = 12End WithEnd Sub▲批量插入地址批注Sub 批量插入地址批注()On Error Resume NextDim r As RangeIf Selection.Cells.Count > 0 ThenFor Each r In Selectionment.Deleter.AddCommentment.Visible = Falsement.Text Text:="本单元格:" & r.Address & " of " & Selection.AddressNextEnd IfEnd Sub▲批量插入统一批注Sub 批量插入统一批注()Dim r As Range, msg As Stringmsg = InputBox("请输入欲批量插入的批注", "提示", "随便输点什么吧")If Selection.Cells.Count > 0 ThenFor Each r In Selectionr.AddCommentment.Visible = Falsement.Text Text:=msgNextEnd IfEnd Sub▲以A1单元内容批量插入批注Sub 以A1单元内容批量插入批注()Dim r As RangeIf Selection.Cells.Count > 0 ThenFor Each r In Selectionr.AddCommentment.Visible = Falsement.Text Text:=[a1].TextNextEnd IfEnd Sub▲不连续区域插入当前文件名和表名及地址Sub 批量插入当前文件名和表名及地址()For Each mycell In Selectionmycell.FormulaR1C1 = "[" + + "]" + + "!" + mycell.NextEnd Sub▲不连续区域录入当前单元地址Sub 区域录入当前单元地址()For Each mycell In Selectionmycell.FormulaR1C1 = mycell.AddressNextEnd Sub▲连续区域录入当前单元地址Sub 连续区域录入当前单元地址()Selection = "=ADDRESS(ROW(),COLUMN(),4,1)"Selection.CopySelection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _:=False, Transpose:=FalseEnd Sub▲返回当前单元地址Sub 返回当前单元地址()d = ActiveCell.Address[A1] = dEnd Sub▲不连续区域录入当前日期Sub 区域录入当前日期()Selection.FormulaR1C1 = Format(Now(), "yyyy-m-d")End Sub▲不连续区域录入当前数字日期Sub 区域录入当前数字日期()Selection.FormulaR1C1 = Format(Now(), "yyyymmdd")End Sub▲不连续区域录入当前日期和时间Sub 区域录入当前日期和时间()Selection.FormulaR1C1 = Format(Now(), "yyyy-m-d h:mm:ss")End Sub▲不连续区域录入对勾Sub 批量录入对勾()Selection.FormulaR1C1 = "√"End Sub▲不连续区域录入当前文件名Sub 批量录入当前文件名()Selection.FormulaR1C1 = End Sub▲不连续区域添加文本Sub 批量添加文本()Dim s As RangeFor Each s In Selections = s & "文本内容"NextEnd Sub▲不连续区域插入文本Sub 批量插入文本()Dim s As RangeFor Each s In Selections = "文本内容" & sNextEnd Sub▲从指定位置向下同时录入多单元指定内容Sub 从指定位置向下同时录入多单元指定内容()Dim arrarr = Array("1", "2", "13", "25", "46", "12", "0", "20")[B2].Resize(8, 1) = Application.WorksheetFunction.Transpose(arr) End Sub▲按aa工作表A列的内容排列工作表标签顺序Sub 按aa工作表A列的内容排列工作表标签顺序()Dim I%, str1$I = 1Sheets("aa").SelectDo While Cells(I, 1).Value <> ""str1 = Trim(Cells(I, 1).Value)Sheets(str1).SelectSheets(str1).Move after:=Sheets(I)I = I + 1Sheets("aa").SelectLoopEnd Sub▲以A1单元文本作表名插入工作表Sub 以A1单元文本作表名插入工作表()Dim nm As Stringnm = [a1]Sheets.Add = nmEnd Sub▲删除全部未选定工作表Sub 删除全部未选定工作表()Dim sht As Worksheet, n As Integer, iFlag As BooleanDim ShtName() As Stringn = ActiveWindow.SelectedSheets.CountReDim ShtName(1 To n)n = 1For Each sht In ActiveWindow.SelectedSheetsShtName(n) = n = n + 1NextApplication.DisplayAlerts = FalseFor Each sht In SheetsiFlag = FalseFor i = 1 To n - 1If ShtName(i) = TheniFlag = TrueExit ForEnd IfNextIf Not iFlag Then sht.DeleteNextApplication.DisplayAlerts = TrueEnd Sub▲工作表标签排序Sub 工作表标签排序()Dim i As Long, j As Long, nums As Long, msg As Longmsg = MsgBox("工作表按升序排列请选 '是[Y]'. " & vbCrLf & vbCrLf & "工作表按降序排列请选 '否[N]' If msg = vbCancel Then Exit Subnums = Sheets.CountIf msg = vbYes Then 'Sort ascendingFor i = 1 To numsFor j = i To numsIf UCase(Sheets(j).Name) < UCase(Sheets(i).Name) ThenSheets(j).Move Before:=Sheets(i)End IfNext jNext iElse 'Sort descendingFor i = 1 To numsFor j = i To numsIf UCase(Sheets(j).Name) > UCase(Sheets(i).Name) ThenSheets(j).Move Before:=Sheets(i)End IfNext jNext iEnd IfEnd Sub▲定义指定工作表标签颜色Sub 定义指定工作表标签颜色()Sheets("Sheet1").Tab.ColorIndex = 46End Sub▲在目录表建立本工作簿中各表链接目录Sub 在目录表建立本工作簿中各表链接目录()Dim s%, Rng As RangeOn Error Resume NextSheets("目录").ActivateIf Err = 0 ThenSheets("目录").UsedRange.DeleteElseSheets.Add = "目录"End IfFor i = 1 To Sheets.CountIf Sheets(i).Name <> "目录" Thens = s + 1Set Rng = Sheets("目录").Cells(((s - 1) Mod 20) + 1, (s - 1) \ 20 + 1 + 1)Rng = Format(s, " 0") & ". " & Sheets(i).NameActiveSheet.Hyperlinks.Add Rng, "#" & Sheets(i).Name & "!A1", ScreenTip:=Sheets(i).End IfNextSheets("目录").Range("b:iv").EntireColumn.ColumnWidth = 20End Sub▲建立工作表文本目录Sub 建立工作表文本目录()Sheets.Add before:=Sheets(1)Sheets(1).Name = "目录"For i = 2 To Sheets.CountCells(i - 1, 1) = Sheets(i).Name'Sheets(1).Hyperlinks.Add Cells(i - 1, 1), "#" & Sheets(i).Name & "!A1" '添加超链接NextEnd Sub▲查另一文件的全部表名Sub 查另一文件的全部表名()On Error Resume NextDim i%Dim sh As WorksheetApplication.ScreenUpdating = FalseWorkbooks.Open Filename:=ThisWorkbook.Path & "\2.xls"Windows("1.xls").Activate '当前文件名称Sheets("Sheet1").Select '当前表名称i = 1 '将表名称返回到第1行For Each sh In Workbooks("2.xls").WorksheetsCells(i, 1) = '将表名称返回到第1列i = i + 1 '返回每个表名称向下移动1行Next shWindows("2.xls").Close '关闭对象文件Application.ScreenUpdating = TrueEnd Sub▲当前单元录入计算机名Sub 当前单元录入计算机名()Selection = Environ("COMPUTERNAME")'Selection = Workbooks("临时表").Sheets("表2").Range("A1") 调用指定地址内容End Sub▲当前单元录入计算机用户名Sub 当前单元录入计算机用户名()Selection = Environ("Username")'Selection = Workbooks("临时表").Sheets("表2").Range("A1") 调用指定地址内容End Sub▲解除全部工作表保护Sub 解除全部工作表保护()Dim n As IntegerFor n = 1 To Sheets.CountSheets(n).UnprotectNext nEnd Sub▲为指定工作表加指定密码保护表Sub 为指定工作表加指定密码保护表()Sheet10.Protect Password:="123"End Sub▲在有密码的工作表执行代码Sub 在有密码的工作表执行代码()Sheets("1").Unprotect Password:=123 '假定表名为“1”,密码为“123” 打开工作表Range("C:C").SpecialCells(xlCellTypeBlanks).EntireRow.Hidden = True '隐藏C列空值行Sheets("1").Protect Password:=123 '重新用密码保护工作表End Sub▲执行前需要验证密码的宏(控件按钮代码)Private Sub CommandButton1_Click()If InputBox("请输入密码:") <> "123" Then '密码是123MsgBox "密码错误,按确定退出!", 64, "提示"Exit SubEnd IfCells(1, 1) = 10End SubSub 执行前需要验证密码的宏()If InputBox("请输入您的使用权限:", "系统提示") = 123 Then重排窗口 '要执行的宏代码或宏名称ElseMsgBox "对不起,您没有使用该宏的权限,按确定键后退出!"End IfEnd Sub▲拷贝A1公式和格式到A2Sub 拷贝A1公式到A2()Workbooks("临时表").Sheets("表1").Range("A1").CopyWorkbooks("临时表").Sheets("表2").Range("A2").PasteSpecialEnd Sub▲复制单元数值Sub 复制数值()s = Workbooks("book1").Sheets("Sheet1").Range("A1:A2")Workbooks("book2").Sheets("Sheet1").Range("A1:A2") = sEnd Sub▲插入数值条件格式Sub 插入数值条件格式()Selection.FormatConditions.DeleteSelection.FormatConditions.Add Type:=xlCellValue, Operator:=xlGreater, _ Formula1:="70"Selection.FormatConditions(1).Interior.ColorIndex = 45Selection.FormatConditions.Add Type:=xlCellValue, Operator:=xlLess, _ Formula1:="55"Selection.FormatConditions(2).Interior.ColorIndex = 39Selection.FormatConditions.Add Type:=xlCellValue, Operator:=xlGreater, _ Formula1:="60"Selection.FormatConditions(3).Interior.ColorIndex = 34End Sub▲插入透明批注Sub 插入透明批注()Selection.AddCommentment.Visible = FalseDim XS As WorksheetFor i = 1 To ments.Countments(i).Text "透明批注"ments(i).Shape.Fill.Visible = msoFalseNextEnd Sub▲添加文本Sub 添加文本()Selection = Selection + "×" '不可在数字后添加文本'Selection = Workbooks("临时表").Sheets("表2").Range("A1") 调用指定地址内容 End Sub▲光标定位到指定工作表A列最后数据行下一单元Sub 光标定位到指定工作表A列最后数据行下一单元()a = Sheets("数据库").[a65536].End(xlUp).RowSheets("数据库").SelectRange("A" & a + 1).SelectEnd Sub▲定位选定单元格式相同的全部单元格Sub 定位选定单元格式相同的全部单元格()Dim FirstCell As Range, FoundCell As RangeDim AllCells As RangeWith Application.FindFormat.Clear.NumberFormatLocal = Selection.NumberFormatLocal.HorizontalAlignment = Selection.HorizontalAlignment.VerticalAlignment = Selection.VerticalAlignment.WrapText = Selection.WrapText.Orientation = Selection.Orientation.AddIndent = Selection.AddIndent.IndentLevel = Selection.IndentLevel.ShrinkToFit = Selection.ShrinkToFit.MergeCells = Selection.MergeCells = .Font.FontStyle = Selection.Font.FontStyle.Font.Size = Selection.Font.Size.Font.Strikethrough = Selection.Font.Strikethrough.Font.Subscript = Selection.Font.Subscript.Font.Underline = Selection.Font.Underline.Font.ColorIndex = Selection.Font.ColorIndex.Interior.ColorIndex = Selection.Interior.ColorIndex.Interior.Pattern = Selection.Interior.Pattern.Locked = Selection.Locked.FormulaHidden = Selection.FormulaHiddenEnd WithSet FirstCell = edRange.Find(what:="", searchformat:=True)If FirstCell Is Nothing ThenExit SubEnd IfSet AllCells = FirstCellSet FoundCell = FirstCellDoSet FoundCell = edRange.Find(After:=FoundCell, what:="", searchformat If FoundCell Is Nothing Then Exit DoSet AllCells = Union(FoundCell, AllCells)If FoundCell.Address = FirstCell.Address Then Exit DoLoopAllCells.SelectEnd Sub▲按当前单元文本定位Sub 按当前单元文本定位()ABC = SelectionDim aa As RangeFor Each a In edRangeIf a Like ABC ThenIf aa Is Nothing ThenSet aa = a.CellsElseSet aa = Union(aa, a.Cells)End IfEnd IfNextaa.SelectEnd Sub▲按固定文本定位Sub 文本定位()Dim aa As RangeFor Each a In edRangeIf a Like "*合计*" ThenIf aa Is Nothing ThenSet aa = a.CellsElseSet aa = Union(aa, a.Cells)End IfEnd IfNextaa.SelectEnd Sub▲删除包含固定文本单元的行或列Sub 删除包含固定文本单元的行或列()DoCells.Find(what:="哈哈").ActivateSelection.EntireRow.Delete '删除行' Selection.EntireColumn.Delete '删除列Loop Until Cells.Find(what:="哈哈") Is NothingEnd Sub▲定位数据及区域以上的空值Sub 定位数据及区域以上的空值()Dim aa As RangeFor Each a In edRangeIf a Like 〈0 ThenIf aa Is Nothing ThenSet aa = a.CellsElseSet aa = Union(aa, a.Cells)End IfEnd IfNextaa.SelectEnd Sub▲右侧单元自动加5(工作表代码)Private Sub Worksheet_Change(ByVal Target As Range) Application.EnableEvents = FalseTarget.Offset(0, 1) = Target + 5Application.EnableEvents = TrueEnd Sub▲当前单元加2Sub 当前单元加2()Selection = Selection + 2'Selection = Workbooks("临时表").Sheets("表2").Range("A1") 调用指定地址内容 End Sub▲A列等于A列减B列Sub A列等于A列减B列()For i = 1 To 23Cells(i, 1) = Cells(i, 1) - Cells(i, 2)NextEnd Sub▲用于光标选定多区域跳转指定单元(工作表代码)Private Sub Worksheet_SelectionChange(ByVal T As Range)a = Array([b6:b7], [e6], [h6])For i = 0 To 2If Not Application.Intersect(T, a(i)) Is Nothing Then[a1].Select: Exit ForEnd IfNextEnd Sub▲将A1单元录入的数据累加到B1单元(工作表代码)Private Sub Worksheet_Change(ByVal Target As Range)Dim t As LongIf Target.Address = "$A$1" Thent = Sheet1.Range("$B$1").ValueSheet1.Range("$B$1").Value = t + Target.ValueEnd IfEnd Sub▲在指定颜色区域选择单元时添加/取消"√"(工作表代码)Private Sub Worksheet_SelectionChange(ByVal Target As Range)Dim myrg As RangeFor Each myrg In TargetIf myrg.Interior.ColorIndex = 37 Then myrg = IIf(myrg <> "√", "√", "") NextEnd Sub▲在指定区域选择单元时添加/取消"√"(工作表代码)Private Sub Worksheet_SelectionChange(ByVal Target As Range)Dim Rng As RangeIf Target.Count <= 15 ThenIf Not Application.Intersect(Target, Range("D6:D20")) Is Nothing Then For Each Rng In SelectionWith RngIf .Value = "" Then.Value = "√"Else.Value = ""End IfEnd WithNextEnd IfEnd IfEnd Sub▲双击指定单元,循环录入文本(工作表代码)Private Sub Worksheet_BeforeDoubleClick(ByVal T As Range, Cancel As Boolean)If T.Address <> "$A$1" Then Exit SubCancel = TrueT = IIf(T = "好", "中", IIf(T = "中", "差", "好"))End Sub双击指定单元,循环录入文本(工作表代码)Dim nums As BytePrivate Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) If Target.Address = "$A$1" Thennums = nums Mod 3 + 1Target = Mid("上中下", nums, 1)Target.Offset(1, 0).SelectEnd IfEnd Sub▲单元区域引用(工作表代码)Private Sub Worksheet_Activate()Sheet1.Range("A1:B3").Value = Sheet2.Range("A1:B3").ValueEnd Sub▲在指定区域选择单元时数值加1(工作表代码)Private Sub Worksheet_SelectionChange(ByVal Target As Range)If Not Application.Intersect([a1:e10], Target) Is Nothing ThenTarget = Val(Target) + 1End IfEnd Sub▲混合文本的编号Sub 混合文本的编号()Worksheets(1).Range("B2").Value = "北京" & (--(Mid(Worksheets(1).Range("B2"), 3, 100)) + 1) End Sub▲指定区域单元双击数据累加(工作表代码)Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)If Not Application.Intersect([A1:Y100], Target) Is Nothing Thenoldvalue = Val(Target.Value)inputvalue = InputBox("请输入数量,按ENTER键确认!", "数值累加器")Target.Value = oldvalue + inputvalueEnd IfEnd Sub▲选择单元区域触发事件(工作表代码)Private Sub Worksheet_SelectionChange(ByVal Target As Range)If Target.Address = "$A$1:$B$2" ThenMsgBox "你选择了$A$1:$B$2单元"End IfEnd Sub▲当修改指定单元内容时自动执行宏(工作表代码)Private Sub Worksheet_Change(ByVal Target As Range)If Not Application.Intersect(Target, [B3:B4]) Is Nothing Then重排窗口End IfEnd Sub▲被指定单元内容限制执行宏Sub 被指定单元限制执行宏()If Range("$A$1") = "关闭" Then Exit Sub窗口End Sub▲双击单元隐藏该行(工作表代码)Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)Rows(Target.Row).Hidden = TrueEnd Sub▲高亮显示行(工作表代码)Private Sub Worksheet_SelectionChange(ByVal Target As Range)Cells.Interior.ColorIndex = 2Rows("1:2").Interior.ColorIndex = 40 '保持1至2行的颜色推荐39,22,40,Rows(Target.Row).Interior.ColorIndex = 35 '高亮推荐颜色35,20,24,34,37,40,15End Sub▲高亮显示行和列(工作表代码)Private Sub Worksheet_SelectionChange(ByVal Target As Range)Cells.Interior.ColorIndex = xlNoneRows(Target.Row).Interior.ColorIndex = 34Columns(Target.Column).Interior.ColorIndex = 34End Sub▲为指定工作表设置滚动范围(工作簿代码)Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)Sheet1.ScrollArea = "A1:M30"End Sub▲在指定单元记录打印和预览次数(工作簿代码)Private Sub Workbook_BeforePrint(Cancel As Boolean)Range("A1") = 1 + Range("A1")End Sub▲自动数字金额转大写(工作表代码)Private Sub Worksheet_Change(ByVal M As Range)On Error Resume Nexty = Int(Round(100 * Abs(M)) / 100)j = Round(100 * Abs(M) + 0.00001) - y * 100f = (j / 10 - Int(j / 10)) * 10A = IIf(y < 1, "", Application.Text(y, "[DBNum2]") & "元")b = IIf(j > 9.5, Application.Text(Int(j / 10), "[DBNum2]") & "角", IIf(y < 1, "", IIf(f > 1c = IIf(f < 1, "整", Application.Text(Round(f, 0), "[DBNum2]") & "分")M = IIf(Abs(M) < 0.005, "", IIf(M < 0, "负" & A & b & c, A & b & c))End Sub▲将全部工作表的A1单元作为单击按钮(工作簿代码)Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range) If Target.Address = "$A$1" ThenCall 宏名End IfEnd Sub▲闹钟——到指定时间执行宏(工作簿代码)Private Sub Workbook_Open()Application.OnTime ("11:45:00"), "提示1" '宏名字Application.OnTime ("12:00:00"), "提示2" '宏名字End Sub▲改变Excel界面标题的宏(工作簿代码)Private Sub Workbook_Open()Application.Caption = "春节快乐"End Sub▲在指定工作表的指定单元返回光标当前多选区地址(工作簿代码)Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range) Worksheets("表2").Range("A1") = Target.Address(0, 0)End Sub▲B列录入数据时在A列返回记录时间(工作表代码)Public Sub Worksheet_Change(ByVal Target As Range)If Target.Column = 2 ThenTarget.Offset(, -1) = NowEnd IfEnd Sub▲当指定区域修改时在其右侧的2个单元返回当前日期和时间(工作表代码)Public Sub Worksheet_Change(ByVal Target As Range)If Not Application.Intersect(Target, [A1:A1000]) Is Nothing ThenIf Target.Column = 1 ThenTarget.Offset(, 1) = DateTarget.Offset(, 2) = TimeEnd IfEnd IfEnd SubPublic Sub Worksheet_Change(ByVal Target As Range)If Not Application.Intersect(Target, [A1:A1000]) Is Nothing ThenIf Target.Column = 1 ThenTarget.Offset(, 1) = Format(Now(), "yyyy-mm-dd")Target.Offset(, 2) = Format(Now(), "h:mm:ss")End IfEnd IfEnd Sub▲指定单元显示光标位置内容(工作表代码)Private Sub Worksheet_SelectionChange(ByVal T As Range)Sheets(1).Range("A1") = SelectionEnd Sub▲每编辑一个单元保存文件Private Sub Worksheet_Change(ByVal Target As Range)ThisWorkbook.SaveEnd Sub▲指定允许编辑区域Sub 指定允许编辑区域()ActiveSheet.ScrollArea = "B8:G15"End Sub▲解除允许编辑区域限制Sub 解除允许编辑区域限制()ActiveSheet.ScrollArea = ""End Sub▲删除指定行Sub 删除指定行()Workbooks("临时表").Sheets("表2").Range("5:5").DeleteEnd Sub▲删除A列为指定内容的行Sub 删除A列为指定内容的行()Dim a, b As Integera = Sheet1.[a65536].End(xlUp).RowFor b = a To 2 Step -1If Cells(b, 1).Value = "删除" ThenRows(b).DeleteEnd IfNextEnd Sub▲删除A列非数字单元行Sub 删除A列非数字单元行()i = [a65536].End(xlUp).RowRange("A1:A" & i).SpecialCells(xlCellTypeConstants, 2).EntireRow.DeleteEnd Sub▲有条件删除当前行Sub 有条件删除当前行()If [A1] = 2 Or [B1] = "删除" ThenSelection.Delete Shift:=xlUpEnd IfEnd Sub▲选择下一行Sub 选择下一行()ActiveCell.Offset(1, 0).Rows("1:1").EntireRow.SelectEnd Sub▲选择第5行开始所有数据行Sub 选择第5行开始所有数据行A()Dim i%i = Cells.Find("*", SearchOrder:=xlByRows, LookIn:=xlValues, SearchDirection:=xlRows("5:" & i).SelectEnd SubSub 选择第5行开始所有数据行B()Rows("5:" & Cells.Find("*", , , , 1, 2).Row).SelectEnd Sub▲选择光标或选区所在行Sub 选择光标或选区所在行()Selection.EntireRow.SelectEnd Sub▲选择光标或选区所在列Sub 选择光标或选区所在列()Selection.EntireColumn.SelectEnd Sub▲光标定位到名称指定位置Sub 定位()Application.Goto Range(Evaluate("名称"))End Sub▲选择名称定义的数据区Sub 选择名称定义的数据区()[数据区].Select '插入名称要使用INDIRECT函数'Range("数据区").Select 或者'Sheet1.Range("数据区").Select 或者End Sub▲选择到指定列的最后行Sub 选择到指定列的最后行()Range("C4:G" & [G65536].End(xlUp).Row).SelectEnd Sub▲将Sheet1的A列的非空值写到Sheet2的A列Sub 将Sheet1的A列的非空值写到Sheet2的A列()Sheet1.Columns("A:A").SpecialCells(2, 23).SpecialCells(12).Copy Sheet2.[A1] End Sub▲将名称1的数据写到名称2Sub Macro2()Range("位置2") = Range("位置1").ValueEnd Sub▲单元反选Sub 单元反选()Application.DisplayAlerts = FalseApplication.ScreenUpdating = FalseDim raddress As String, taddress As Stringraddress = Selection.Addresstaddress = edRange.AddressWith Sheets.Add.Range(taddress) = 0.Range(raddress) = "=0"raddress = .Range(taddress).SpecialCells(xlCellTypeConstants, 1).Address.DeleteEnd WithActiveSheet.Range(raddress).SelectApplication.ScreenUpdating = TrueEnd Sub▲调整选中对象中的文字Sub 调整选中对象中的文字()'文字居中、自动调整大小With Selection.HorizontalAlignment = xlCenter.VerticalAlignment = xlCenter.ReadingOrder = xlContext.Orientation = xlHorizontal.AutoSize = True.AddIndent = FalseEnd WithEnd Sub▲去除指定范围内的对象Sub 去除指定范围内的对象()Dim p As ShapeSet My = Worksheets("工作表名")For Each p In My.ShapesIf Not Application.Intersect(p.TopLeftCell, Range("范围")) Is Nothing Then p.Delete NextEnd Sub▲更新透视表数据项Sub DeleteMissingItems2002All()'防止数据透视表中显示无用的数据项'在 Excel 2002 或更高版本中'如果无用的数据项已经存在,'运行这个宏可以更新Dim pt As PivotTableDim ws As WorksheetFor Each ws In ActiveWorkbook.WorksheetsFor Each pt In ws.PivotTablespt.PivotCache.MissingItemsLimit = xlMissingItemsNoneNext ptNext wsEnd Sub▲将全部工作表名称写到A列Sub 将全部表名称写到A列()k = 1For Each Sht In SheetsCells(k + 1, 1) = '指定写入的行和列k = k + 1NextEnd Sub。
合并多个excel工作表格的方法
合并多个excel工作表格的方法随着工作的进行,我们经常会遇到需要合并多个excel工作表格的情况。
这种情况下,如何高效地将多个excel工作表格合并成一个表格成为了我们面临的问题。
下面,我将为大家介绍几种合并多个excel 工作表格的方法。
一、使用excel自带的功能1. 打开excel,进入你需要合并的第一个excel工作表格2. 在菜单栏中选择“数据”选项3. 选择“从其他来源”中的“从工作簿”4. 在弹出的对话框中选择需要合并的excel工作表格文件,点击“打开”5. 在“合并选项”对话框中选择需要合并的工作表,并勾选“使用第一行作为标题”6. 点击“确定”,excel会将选定的工作表格合并到当前工作表中二、使用excel插件1. 打开excel,进入你需要合并的第一个excel工作表格2. 在菜单栏中选择“插入”选项3. 在搜索框中输入“合并工作表格”,找到并安装相应的excel插件4. 安装完成后,在插件栏中找到并点击“合并工作表格”插件5. 在弹出的对话框中选择需要合并的excel工作表格文件,点击“打开”6. 在“合并选项”对话框中选择需要合并的工作表,并勾选“使用第一行作为标题”7. 点击“确定”,excel插件会自动将选定的工作表格合并到当前工作表中三、使用VBA宏1. 打开excel,按下Alt+F11键打开VBA编辑器2. 在VBA编辑器中选择“插入”-“模块”,在代码窗口中输入以下VBA代码```VBASub 合并工作表格()Dim ws As WorksheetDim wb As WorkbookDim wsCopy As WorksheetDim wsDest As WorksheetDim lRow As LongDim lastRow As LongDim lastCol As LongDim destName As StringDim colIndex As IntegerDim fileName As StringSet wsCopy = ThisWorkbook.Sheets(1)lastCol = wsCopy.Cells(1,Columns.Count).End(xlToLeft).ColumnlastRow = wsCopy.Cells(Rows.Count, 1).End(xlUp).rowfileName = Application.GetOpenFilename(FileFilter:="Excel Files (*.xls*), *.xls*", Title:="请选择需要合并的工作表格")If fileName = "False" Then Exit SubSet wb = Workbooks.Open(fileName)Set wsDest = wb.Sheets(1)lRow = wsDest.Cells(wsDest.Rows.Count, 1).End(xlUp).rowFor Each ws In wb.SheetsIf <> ThenlRow = lRow + 1ws.Cells(1, 1).Resize(1, lastCol).CopywsDest.Cells(lRow, 1).PasteSpecial xlPasteValuesEnd IfNext wswb.Close SaveChanges:=FalseEnd Sub```3. 将以上VBA代码输入完毕后,按下F5键执行代码4. 在弹出的对话框中选择需要合并的excel工作表格文件5. VBA宏会根据代码中的指令将选定的工作表格合并到当前工作表中通过以上介绍,我们了解到了几种合并多个excel工作表格的方法。
excel工作表和工作簿拆分合并宏代码(亲测有效!)
excel工作表和工作簿拆分合并宏代码(亲测有效!)一、【宏代码】根据关键字将一个excel总表分成若干个单独分表的宏代码(即拆分)Sub SelectFile()With Application.Calculation = xlManual.MaxChange = 0.001End With'Application.ScreenUpdating = FalseApplication.DisplayAlerts = FalseCells.Delete Shift:=xlUpDim FileName As VariantFileName = Application.GetOpenFilename("Excel 文件(*.xls),*.xls", , "请选择要分表的工作表所在的位置!", , 0) If FileName = False Then Exit SubSet sjwk = Workbooks.Open(FileName) '要分表的数据所在表Set hzwk = ThisWorkbook '分表模版所在的表On Error Resume Nextvvv = Application.InputBox("请选要分表数据所在工作表关键字的第一个单元格" & Chr(13) & "注意1;用鼠标选择含关键字的第一个单元格,不要选标题行;2;若第一个单元格不可见,也可任选后,手工修改;3;新表会建在选择的数据表相同目录下,以关键字+文件名形式命名,有相同名字会自动覆盖!", , , , , , , 0)If vvv = False Then GoTo 100'以下是取得选择的工作表行列做标wz = InStr(1, vvv, "!")If wz > 0 Thenbname = Mid(vvv, 2, wz - 2) '工作表名If Left(bname, 1) = "'" Then bname = Mid(bname, 2, Len(bname) - 2)Elsebname = End Ifwz2 = InStr(1, vvv, "R")wz3 = InStr(1, vvv, "C")If wz2 > 0 And wz3 > 0 Thenhh = Val(Mid(vvv, wz2 + 1, wz3 - wz2 - 1)) '起始行ll = Val(Mid(vvv, wz3 + 1, Len(vvv) - wz3)) '选择的关键字所在列End IfIf wz2 > 0 And wz3 = 0 Thenhh = Val(Mid(vvv, wz2 + 1, Len(vvv) - wz2))ll = 0End IfIf wz2 = 0 And wz3 > 0 Thenhh = 0ll = Val(Mid(vvv, wz3 + 1, Len(vvv) - wz3))End Iflzm = Application.ConvertFormula(Formula:="=C" & ll, fromReferenceStyle:=xlR1C1, toReferenceStyle:=xlA1) '将R1C1样式变为A1样式lzm = Split(lzm, "$")(2) '将列数转为字母'以上是取得选择的工作表行列做标lastrow = edRange.Rows.Count '用已用区域,判断单元格是否为空的方法判断单列的最末行zhh = lastrowFor ttt = lastrow T o 1 Step -1If Range(lzm & ttt) <> "" Then Exit Forzhh = zhh - 1Nextzmh = zhh '用已用区域,判断单元格是否为空的方法判断单列的最末行'zmh = sjwk.Sheets(bname).Range(lzm & ":" & lzm).Find("*", , , , 1, 2).Row '最末行,此方法在有筛选时不能正确判断Application.StatusBar = "<工作簿:" & & " 工作表:" & bname & " 行号:" & hh & "-" & zmh & " 列字母:" & lzm & "> 正在处理,请等待....."'MsgBox ("表名:" & bname & "行号:" & hh & "列字母:" & lzm)Application.ScreenUpdating = Falsesjwk.Sheets(bname).Rows("1:" & hh - 1).Copy hzwk.Sheets("分表").Rows("1:" & hh - 1) '拷贝表头For ii = hh To zmhsjwk.Sheets(bname).Rows(ii).Copy hzwk.Sheets("分表").Rows(ii) '逐行拷贝所有明细,是因为原表可能有筛选或隐藏Nexthzwk.Sheets("分表").ActivateCells.EntireRow.Hidden = False '拷贝到"分表"后去除隐藏Dim WorkRange As RangeDim Cell As RangeSet WorkRange = Sheets("分表").UsedRange.SpecialCells(xlCellTypeFormulas) '查找有公式的单元格并将有"!"公式的转成值,也就是去除跨表引用的公式,保留本身公式For Each Cell In WorkRangeIf InStr(1, Cell.Formula, "!", 1) Then Cell.Value = Cell.ValueNext CellWith Application.Calculation = xlAutomatic.MaxChange = 0.001End With'以下通过字典取得关键字,通过逐个筛选关键字,分表为工作簿Dim dic, temp, arrDim rng As Range, sxq As RangeSet dic = CreateObject("scripting.dictionary") '字典'下面一句代码:设置上面设置的工作表中的哪一列的内容拆分工作簿Set rng = Range(lzm & hh & ":" & lzm & zmh)For Each temp In rng.Cells '这个for循环实现该列的不重复值的筛选If Not dic.exists(temp.Value) Thendic.Add temp.Value, ""End IfNextarr = dic.keys '返回此列不重复值的数组For Each temp In arr '这个For循环实现按照不重复数组的内容新建工作簿,并删除不应有的内容hzwk.Sheets("分表").ActivateIf AutoFilterMode Then AutoFilterMode = False '工作表里有自动筛选则取消Set sxq = Range("a" & hh - 1 & ":" & lzm & zmh) '筛选区域sxq.AutoFilter ll, tempCells.CopyWorkbooks.Add '新建工作簿Workbooks(Workbooks.Count).Activate '激活新键工作簿ActiveSheet.PasteWorkbooks(Workbooks.Count).SaveAs FileName:=temp & "-" & '粘贴数据后将新工作簿保存为关键字+数据源表的名字Workbooks(Workbooks.Count).CloseNext temp100:sjwk.CloseCells.Delete Shift:=xlUp '两次清除"分表"中的数据,因为可能有筛选,一次清不完Cells.Delete Shift:=xlUpApplication.ScreenUpdating = TrueApplication.DisplayAlerts = TrueApplication.StatusBar = FalseSet dic = Nothing'With Application' .Calculation = xlAutomatic'.MaxChange = 0.001' End WithMsgBox ("分表操作完毕,请到所选文件目录下查看!")End Sub二、【宏代码】多个工作簿合并到1个工作表(即合并)Sub 合并当前目录下所有工作簿的全部工作表()Dim MyPath, MyName, AWbNameDim Wb As Workbook, WbN As StringDim G As LongDim Num As LongDim BOX As StringApplication.ScreenUpdating = FalseMyPath = ActiveWorkbook.PathMyName = Dir(MyPath & "\" & "*.xls")AWbName = Num = 0Do While MyName <> ""If MyName <> AWbName ThenSet Wb = Workbooks.Open(MyPath & "\" & MyName)Num = Num + 1With Workbooks(1).ActiveSheet.Cells(.Range("A65536").End(xlUp).Row + 2, 1) = Left(MyName, Len(MyName) - 4)For G = 1 To Sheets.CountWb.Sheets(G).UsedRange.Copy .Cells(.Range("A65536").End (xlUp).Row + 1, 1)NextWbN = WbN & Chr(13) & Wb.Close FalseEnd WithEnd IfMyName = DirLoopRange("A1").SelectApplication.ScreenUpdating = TrueMsgBox "共合并了" & Num & "个工作薄下的全部工作表。
运用VBA实现大量Excel工作薄和工作表快速合并成一张工作表
运用VBA实现大量Excel工作薄快速合并成一张工作表在实际工作中,运用VBA能快速实现上述需求,避免大量重复的复制粘贴,提高了工作效率,保证了数据采集的质量。
方法1:一、将大量工作薄合并成一个工作薄1、新建一个工作薄,将其命名为你合并后的名字。
2、打开工作薄,留下一张工作表将多余的删除,在工作表标签上单击右键,选择“查看代码”。
3、在打开的VBA编辑窗口中粘贴以下代码:Sub 工作薄间工作表合并()Dim FileOpenDim X As IntegerApplication.ScreenUpdating = FalseFileOpen = Application.GetOpenFilename(FileFilter:="Microsoft Excel文件(*.xls),*.xls",MultiSelect:=True, Title:="合并工作薄")X = 1While X <= UBound(FileOpen)1/ 6Workbooks.Open Filename:=FileOpen(X)Sheets().MoveAfter:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count)X = X + 1WendExitHandler: Application.ScreenUpdating = TrueExit Suberrhadler:MsgBox Err.DescriptionEnd Sub4、关闭VBA编辑窗口。
5、在Excel 2010中,选择视图—宏—查看宏(如Excel 2003中,选择工具—宏),然后点击“执行”。
6、在打开的对话窗口中,选择所有要合并的工作薄,然后点击“打开”。
二、将大量工作表合并成一张工作表1、在第一张空白工作表标签点击右键,选择“查看代码”。
2/ 62、在打开的VBA编辑窗口中粘贴以下代码:Sub 合并当前工作簿下的所有工作表()Application.ScreenUpdating = FalseFor j = 1 To Sheets.CountIf Sheets(j).Name <> ThenX = Range("A65536").End(xlUp).Row + 1Sheets(j).UsedRange.Copy Cells(X, 1)End IfNextRange("B1").SelectApplication.ScreenUpdating = TrueMsgBox "当前工作簿下的全部工作表已经合并完毕!", vbInformation, "提示"End Sub3、选择运行—运行子过程/用户窗体。
EXCEL 常用的宏代码大全
EXCEL 常用的宏代码大全本示例为设置密码窗口(1)If Application.InputBox("请输入密码:") = 1234 Then[A1] = 1 '密码正确时执行Else: MsgBox "密码错误,即将退出!" '此行与第2行共同设置密码End If本示例为设置密码窗口(1)X = MsgBox("是否真的要结帐?", vbYesNo)If X = vbYes ThenClose本示例为设置工作表密码ActiveSheet.Protect Password:=641112 ' 保护工作表并设置密码ActiveSheet.Unprotect Password:=641112 '撤消工作表保护并取消密码'本示例关闭除正在运行本示例的工作簿以外的其他所有工作簿,并保存其更改内容。
For Each w In WorkbooksIf <> Thenw.Close SaveChanges:=TrueEnd IfNext w'每次打开工作簿时,本示例都最大化Microsoft Excel 窗口。
Application.WindowState = xlMaximized'本示例显示活动工作表的名称。
MsgBox "The name of the active sheet is " & '本示例保存当前活动工作簿的副本。
ActiveWorkbook.SaveCopyAs "C:\TEMP\XXXX.XLS"'下述过程激活工作簿中的第四张工作表。
Sheets(4).Activate'下述过程激活工作簿中的第1张工作表。
Worksheets(1).Activate'本示例通过将Saved 属性设为True 来关闭包含本段代码的工作簿,并放弃对该工作簿的任何更改。
利用宏自动从各表内容汇总到一张表格
本段代码作用如上图所示,可以自动按每天的对账单的表内容汇总复制至对账单汇总表,不需要打开每个表来复制,详细宏代码如下所示Sub Macro1()'' Macro1 Macro'''MsgBox ThisWorkbook.PathApplication.DisplayAlerts = FalseSet MyFile = CreateObject("Scripting.FileSystemObject")path1 = ThisWorkbook.Pathwbk2 = (path1 + "汇总表.xlsx")Dim tmonth As Stringtmonth = InputBox("请输入月份")If Val(tmonth) = 1 Or Val(tmonth) = 3 Or Val(tmonth) = 5 Or Val(tmonth) = 7 Or Val(tmonth) = 8 Or Val(tmonth) = 10 Or Val(tmonth) = 12 Thenm = 31ElseIf Val(tmonth) = 2 Thenm = 28ElseIf Val(tmonth) = Val(tmonth) = 4 Or Val(tmonth) = 6 Or Val(tmonth) = 9 Or Val(tmonth) = 11 Thenm = 30End IfEnd IfEnd IfFor j = 1 To mIf j < 10 ThenIf (MyFile.FileExists(path1 & "\" & "完工证2011" & tmonth & "0" & j & ".xls") = True) Then Set wbk1 = Workbooks.Open(path1 & "\" & "完工证2011" & tmonth & "0" & j & ".xls")i = 7Range("a7").SelectDo While ActiveCell.Value <> ""Range("a" & i).SelectIf Not IsNumeric(ActiveCell.Value) ThenActiveCell.EntireRow.Deletei = i - 1End Ifi = i + 1LoopRange(Range("a7"), Range("u" & i - 1)).CopyActiveWorkbook.CloseWorkbooks("汇总表.xlsm").ActivateRange("a7").Selectk = 7Do While ActiveCell.Value <> ""k = k + 1Range("a" & k).SelectLoopRows(k).SelectActiveSheet.PasteEnd If'On Error Resume Next'Set wbk1 = Workbooks.Open("C:\Users\zhongzx\Desktop\2011年1-12月工班完工证日报表\工班完工证日报表\1月份" & "\" & "完工证2011010" & j & ".xls")ElseIf MyFile.FileExists(path1 & "\" & "完工证2011" & tmonth & j & ".xls") = True ThenSet wbk1 = Workbooks.Open(path1 & "\" & "完工证2011" & tmonth & j & ".xls")i = 7Range("a7").SelectDo While ActiveCell.Value <> ""Range("a" & i).SelectIf Not IsNumeric(ActiveCell.Value) ThenActiveCell.EntireRow.Deletei = i - 1End Ifi = i + 1LoopRange(Range("a7"), Range("u" & i - 1)).CopyActiveWorkbook.CloseWorkbooks("汇总表.xlsm").ActivateRange("a7").Selectk = 7Do While ActiveCell.Value <> ""k = k + 1Range("a" & k).SelectLoopRows(k).SelectActiveSheet.PasteEnd If'On Error Resume Next'Set wbk1 = Workbooks.Open("C:\Users\zhongzx\Desktop\2011年1-12月工班完工证日报表\工班完工证日报表\1月份" & "\" & "完工证201101" & j & ".xls")End IfNext jEnd Sub。
xls的用法 -回复
xls的用法-回复XLS的用法XLS是一种常见的电子表格文件格式,用于存储、分析和管理数据。
在本文中,我们将一步一步地介绍XLS的用法,从基本的操作到高级的功能,帮助读者更好地利用这个强大的工具。
第一步:创建和打开XLS文件要开始使用XLS,我们首先需要创建或打开一个XLS文件。
可以通过以下几种方式来实现:1. 创建新的XLS文件:打开Excel或任何支持XLS格式的电子表格软件,在菜单栏中选择“文件”>“新建”>“空白文档”。
然后,保存该文件并选择.XLS作为文件格式。
2. 打开现有的XLS文件:在Excel中,单击菜单栏上的“文件”>“打开”,然后浏览并选择要打开的XLS文件。
第二步:数据输入和编辑一旦我们成功打开了XLS文件,我们可以开始输入和编辑数据了。
在电子表格的每个单元格中,可以输入文本、数字、日期、公式等。
以下是一些常用的数据输入和编辑技巧:1. 输入数据:通过直接在单元格中键入数据,将数据输入到电子表格中。
可以使用Tab键或方向键在单元格之间导航。
2. 格式化数据:通过选择单元格或单元格范围,然后点击工具栏中的格式化选项,可以对数据进行格式化。
例如,可以将数据设置为特定的货币、百分比或日期格式。
3. 复制和粘贴数据:选中要复制的单元格或单元格范围,然后使用快捷键Ctrl+C进行复制。
要将复制的数据粘贴到其他单元格或单元格范围中,使用快捷键Ctrl+V。
4. 拖拽填充:通过选中一个或多个单元格,鼠标指针变为一个加号符号。
将鼠标移到选定单元格的边缘,然后拖动以填充其他相邻单元格。
第三步:数据排序和筛选XLS提供了数据排序和筛选功能,以便更好地管理和分析数据。
1. 数据排序:要对数据进行排序,选择要排序的单元格范围,然后点击Excel工具栏上的“数据”>“排序”。
根据需要选择升序或降序排序,然后选择要排序的列。
2. 数据筛选:要根据特定条件筛选数据,选择包含数据的整个表格,然后点击Excel工具栏中的“数据”>“筛选”。
Excel将A表的基础数据拼接到B表中来-三种方法:ctrl+回车,VLOOKUP()函数,宏
Excel将A表的基础数据拼接到B表中来-三种⽅法:ctrl+回车,VLOOKUP()函数,宏A表基础信息表B表业务信息表将a表中的基础数据拼接到B表的后⾯,应⽤场景是:B表很多数据,很繁乱,名字不⼀定全,A表也是⽐较多的⾏,B表乱:⽐如有8⾏有李晨的,却只有3⾏是范仲淹的,现在需要快速拼接:⽅法⼀:不⽤函数,利⽤ctrl+Enter两个表的数据合并放在⼀个表B 列当做姓名,CD 列当做B表的学科和分数。
EF G列当做A基础信息列。
A表复制过来的时候,要空出列,以便后⾯的数据可以接上B表的后⾯。
【总的任务就是快速⾃动填 EFG列】还有⼀点,两个表前⾯要加上⼀列标志列。
如上图A表的左边加上A标志服,B表的左边随便加点标志。
对B列进⾏排序,发现要向上填充数据,不太符合本实践要求。
改进:全选所有列,⾃定义排序:对E列做次排序变成按照博⽂说的,选择列,Ctrl+G 定位选择空值在编辑栏中输⼊=上⼀个格⼦的地址,(是上⼀个值的格⼦)再按CTRL+Enter完成填充这样就会⾃动往下填充了,整列完成,瞬间完成(我的⼏万⾏数据)。
同时对多列是否可以操作,还没有试(后来试了,不可以)。
最后⼀步:把基础A表的数据删除:先将整个表的复制,到另⼀个新表格粘贴为数值(不要带格式的)对表的A列排序,把A列中有A字符的⾏全部删除(这是A表的基础数据),完成。
⽅法⼆:⽤函数 VLOOKUPVLOOKUP(参数1,参数2,参数3,参数4)=VLOOKUP(要查找的值、要在其中查找值的区域、区域中包含返回值的列号、精确匹配或近似匹配 – 指定为 0/FALSE 或 1/TRUE)。
参数2中数据区域,区域的第⼀列就是要查找的列,区域后⾯列是要返回的列,在D1中输⼊公式回车,快速下拉填完整列的公式发现有些数据找不到,明明在数据表⾥⾯的。
【奇怪的是,同⼀台车,有些⾏可以找到,有些⾏找不到,有空格?】下⾯⽹上的说法:原因有以下⼏个⽅⾯:1.字符串后⾯有空格。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
GoTo ExitHandler
End If
x = 1
Whபைடு நூலகம்le x <= UBound(FilesToOpen)
Workbooks.Open Filename:=FilesToOpen(x)
Exit Sub
ErrHandler:
MsgBox Err.Description
Resume ExitHandler
End Sub
'复制多个工作簿里的工作表到一个工作表中,只能复制第一个工作表
Sub UnionWorksheets()
Application.ScreenUpdating = False
Cells.Clear
Do While dirname <> ""
If dirname <> nm Then
Workbooks.Open Filename:=lj & "\" & dirname
Workbooks(nm).Activate
Workbooks(dirname).Close False
End If
dirname = Dir
Loop
End Sub
FilesToOpen = Application.GetOpenFilename(FileFilter:="MicroSoft Excel文件(*.xls),*.xls", MultiSelect:=True, Title:="要合并的文件")
If TypeName(FilesToOpen) = "Boolean" Then
'复制多个工作簿里的工作表到一个工作簿中
Sub CombineWorkbooks()
Dim FilesToOpen
Dim x As Integer
On Error GoTo ErrHandler
Application.ScreenUpdating = False
Sheets().Move After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count)
x = x + 1
Wend
ExitHandler:
Application.ScreenUpdating = True
Dim lj As String
Dim dirname As String
Dim nm As String
lj = ActiveWorkbook.Path
nm =
dirname = Dir(lj & "\*.xls")
'复制新打开工作簿的第一个工作表的已用区域到当前工作表
Workbooks(dirname).Sheets(1).UsedRange.Copy _
Range("A65536").End(xlUp).Offset(1, 0)