一、合并工作簿
Sub 合并工作簿()
   
Application.ScreenUpdating = False
    myfile =
Dir(ThisWorkbook.Path &
"\*.xls*")'Dir函数,获取同路径下待合并excel的文件名
    Do While myfile <>
""  '当文件名不为空的时候,继续运行,如果为空,说明表格已经循环一个遍了
     
     If myfile
<> ThisWorkbook.Name Then'在文件名不为空的前提下,还不能是代码所在的汇总工作簿
     
     
    Set wb =
Workbooks.Open(ThisWorkbook.Path & "" & myfile)
     
     
    For m = 1 To
wb.Worksheets.Count '对待汇总的工作簿中所有worksheet做循环
     
     
    rrow =
wb.Worksheets(m).UsedRange.Rows.Count
     
     
    wb.Worksheets(m).Range("a1:d"
& rrow).Copy ThisWorkbook.Worksheets(1).Cells(Rows.Count,
"a").End(xlUp).Offset(1, 0)
     
     
    Next
     
     
    Workbooks(myfile).Close
False'复制完数据以后,分表关闭,不保存。
     
     Else
     
   End If
     
  myfile = Dir '获取下一个待汇总工作簿的文件名
   
  
    Loop
   
Application.ScreenUpdating = True
    MsgBox "完成"
End Sub
绿色部分为按自己需要修改的代码。文中代码框架是汇总A:D列内容。
这里着重说一下:代码使用环境是待合并工作簿和代码工作簿在同一个路径下。
Sub 合并工作簿()
   
Application.ScreenUpdating = False
    With
Application.FileDialog(msoFileDialogFolderPicker)
'创建一个浏览文件夹的对话框
     
  If .Show = -1 Then PathSht = .SelectedItems(1)
Else Exit Sub
    End With
   
源代码,省略不写了,记得把"ThisWorkbook.Path"改为"PathSht" 
    
   
 ....
End Sub
 
二、拆分工作簿
这段代码可以实现对工作簿任意列的拆分。(对某一列相同内容的所在行挑出来,汇总到一个新建工作簿里面)
Sub 拆分工作簿()
   
Application.ScreenUpdating = False '关闭屏幕闪动,提速
   
Application.DisplayAlerts = False '关闭窗口提示
    kk = 2
    Set dic =
CreateObject("scripting.dictionary")
    With
ThisWorkbook.Worksheets("待拆分的Sheet名")'根据自己的工作簿自行修改
     
  cln = InputBox("请输入需要按列拆分的列:" & Chr(10)
& "英文列标", "输入列标", "A") 'inputbox提示输入需要拆分的列标
     
  cln2 = .Range("a1").End(xlToRight).Column
'获取最大列数,为了增加通用性
     
  If .Range(cln & 2) = "" Then Exit Sub
     
  rrow = .Cells(Rows.Count,
cln).End(xlUp).Row
     
  arr = WorksheetFunction.Transpose(.Range(cln
& 1 & ":" & cln & rrow))
     
  For i = 1 To UBound(arr) 
'将拆分条件列数据写入字典,为了去重复。
     
      If Not
dic.exists(arr(i)) Then '若字典中不存在该字符串,则写入。
     
      dic.Add
arr(i), .Range("a" & i).Resize(1, cln2)
     
  Else
     
      Set
dic.Item(arr(i)) = Union(dic.Item(arr(i)), .Range("a" &
i).Resize(1, cln2))
     
  End If
    Next
    k = dic.keys
    l = dic.items
    For ss = 0 To dic.Count
- 1
     
  Set wb = Workbooks.Add '新建工作簿
     
  With wb.Worksheets(1)
     
      l(ss).Copy
.Range("a1")
     
  End With
     
  wb.SaveAs ThisWorkbook.Path & "" &
k(ss) & ".xlsx" '将新建的工作簿保存在代码工作簿下
     
  wb.Close True '关闭工作簿,并保存
     
  Set wb = Nothing '释放内存
    Next
End With
Application.ScreenUpdating = True
Application.DisplayAlerts = True
MsgBox "完成"
End Sub
 
上述代码默认从第一行拆分,如果有标题行不想拆分,可以把上述下句代码修改一下。
arr = WorksheetFunction.Transpose(.Range(cln & 1 & ":"
& cln & rrow)),从哪一行开始拆分,就把1修改为行号
 
三、合并工作表(Sheet)
合并同一个工作簿下所有Sheet到一个Sheet里面就比较简单了。
 
Sub 合并当前工作簿下的所有Sheet()
Application.ScreenUpdating = False
For j = 1 To Sheets.Count
   If Sheets(j).Name
<> ActiveSheet.Name Then
     
 X = Range("A65536").End(xlUp).Row + 1
     
 Sheets(j).UsedRange.Copy Cells(X,
1)'默认复制所有内容
   End If
Next
Range("B1").Select
Application.ScreenUpdating = True
MsgBox "当前工作簿下的全部工作表已经合并完毕!", vbInformation, "提示"
End Sub
默认复制所有内容,如果有特定需要,自己修改这部分代码Sheets(j).UsedRange.Copy Cells(X,
1)'默认复制所有内容。
 
四、拆分工作表(Sheet)
Sub 拆分表格()
    Set d =
CreateObject("scripting.dictionary")
    With Worksheets(1)
     
  rrow = .Cells(Rows.Count, "a").End(3).Row
     
  For i = 2 To rrow '从第2行开始拆分
     
      strr =
.Range("c" & i).Value '拆分C列内容
     
      If Not
d.exists(strr) Then
     
     
    d.Add strr, .Range("a" &
i).Resize(1, 4)
     
      Else
     
     
    Set d.Item(strr) =
Union(d.Item(strr), .Range("a" & i).Resize(1, 4))
     
      End
If
     
  Next
     
  k = d.keys
     
  i = d.items
     
  For a = 0 To d.Count - 1
     
     
Worksheets.Add.Name = k(a)
     
      i(a).Copy
Worksheets(k(a)).Range("a2")
     
  Next
    End With
End Sub
 
 
上述代码用到了字典
For i = 2 To rrow '从第2行开始拆分
strr = .Range("c" & i).Value '拆分C列内容
根据自己实际需求修改代码即可。
 
							
		 
						
		加载中,请稍候......