|
本帖最后由 likeyouli 于 2023-12-14 14:38 编辑
vba完全可以实现,工作表还是工作簿,无非是需要不需要再次open的问题,,
可惜我来晚了,,之前曾向h大请教过多个问题,,话说貌似h大的vba水平没我厉害啊 大体思路:第一步,不管是多个工作表还是工作簿,都先复制合并到一个工作表里,注意标题别合并重复。假如,工作簿,保存在d盘ceshi文件夹下,- Sub 合并工作簿()
- Dim ss$, t As Workbook
- ss = Dir("D:\ceshi")
- Do
- If ss <> ThisWorkbook.Name Then
- Set t = Workbooks.Open("D:\ceshi" & ss)
- c = c + 1
- If c = 1 Then
- Range("a1").CurrentRegion.Copy ThisWorkbook.Sheets(1).Range("a1")
- Else
- 'Range("a2", Selection.SpecialCells(xlCellTypeLastCell)).Select
- 'Range("a2", Selection.SpecialCells(xlCellTypeLastCell)).Copy ThisWorkbook.Sheets(1).Cells(Rows.Count, "a").End(xlUp).Offset(1, 0)
- Range("a1").EntireRow.Delete
- Range("a1").CurrentRegion.Copy ThisWorkbook.Sheets(1).Cells(Rows.Count, "a").End(xlUp).Offset(1, 0)
- End If
- t.Close False
- End If
- ss = Dir
- Loop Until ss = ""
- MsgBox "恭喜,已合并完成!!"
- End Sub
复制代码
第二部,解决累加的问题,以事项作为字典,数量和金额累加,,当然到了这步,不用vba,函数也完全可以解决
刚回头看了下,代码竟然和复制的不一样:
Sub 合并工作簿()
Dim ss$, t As Workbook
ss = Dir("D:\ceshi\")
Do
If ss <> ThisWorkbook.Name Then
Set t = Workbooks.Open("D:\ceshi\" & ss)
c = c + 1
If c = 1 Then
Range("a1").CurrentRegion.Copy ThisWorkbook.Sheets(1).Range("a1")
Else
Range("a2", Selection.SpecialCells(xlCellTypeLastCell)).Select
Range("a2", Selection.SpecialCells(xlCellTypeLastCell)).Copy ThisWorkbook.Sheets(1).Cells(Rows.Count, "a").End(xlUp).Offset(1, 0)
End If
t.Close
End If
ss = Dir
Loop Until ss = ""
MsgBox "恭喜,已合并完成!!"
End Sub
ceshi后边少了\
|
|