将多个工作表中的单行数据合并为一个 – 循环macros?

我有一个工作簿,其中包含许多跟踪整个财政年度预计和实际项目支出的工作表。 每个工作表中的每一行都有相同的项目。 我被要求将每个项目上的所有财务数据组合在一个主电子表格中,并且一直在使用这个运行良好的macros:

Sub CombineData() Dim Sht As Worksheet For Each Sht In ActiveWorkbook.Worksheets If Sht.Name <> "Master" Then Sht.Select Range("A:A").Insert Range("A91").Formula = "=Mid(Cell(""filename"",B1),Find(""]"",Cell(""filename""))+1,255)" Range("A91").Copy Range("A91").PasteSpecial Paste:=xlPasteValues Range("A91:U91").Copy Sheets("Master").Select Range("A65536").End(xlUp).Offset(1, 0).Select ActiveSheet.Paste Sht.Select Range("A:A").Delete Else End If Next Sht End Sub 

但是,我有大约180行数据,我需要合并到一个工作表,目前不得不手动更改macros内的行号。 有没有办法让macros一旦完成就自动移动到下一行? 即一旦它已经从单独的工作簿复制和粘贴到我的主工作簿的所有行91,它重复所有92行的过程中,我不必手动更改代码?

从我在网上读到的,我猜测可能使用For循环来实现这一点。 不幸的是,我对VBA相当陌生,而且我无法弄清楚如何将这个function融入到我的macros中。 任何人都可以给我的指针将不胜感激!

试试像这样…

 Sub CombineData() Dim shMaster As Worksheet, Sht As Worksheet Dim LastRow As Long Application.ScreenUpdating = False Set shMaster = Sheets("Master") shMaster.Range("A1").CurrentRegion.Offset(1).Clear For Each Sht In ActiveWorkbook.Worksheets If Sht.Name <> "Master" Then With Sht LastRow = .Cells(Rows.Count, 1).End(xlUp).Row .Columns(1).Insert .Range("A2:A" & LastRow).Formula = "=Mid(Cell(""filename"",B1),Find(""]"",Cell(""filename""))+1,255)" .Range("A2:A" & LastRow).Value = .Range("A2:A" & LastRow).Value .Range("A2:U" & LastRow).Copy shMaster.Range("A" & Rows.Count).End(3)(2) .Columns(1).Delete End With End If Next Sht Application.ScreenUpdating = True End Sub 

你说你想把所有第91行从单个工作簿复制并粘贴到我的主工作簿中,它重复所有第92行的过程,但是你没有提供终止点。

这个代码做你想要的(假设你把9999调整为更合理的东西),但是在一个工作表上执行所有的hte操作可能会更好,然后移动到所有的91,然后是92的所有等等。 。

 Sub CombineData() Dim ws As Worksheet, rw As Long For rw = 91 To 9999 For Each ws In ActiveWorkbook.Worksheets With ws If .Name <> "Master" Then .Columns("A").EntireColumn.Insert .Cells(rw, "A") = .Name .Cells(rw, "A").Resize(1, 21).Copy _ Destination:=Worksheets("Master").Range("A65536").End(xlUp).Offset(1, 0) .Columns("A").EntireColumn.Delete End If End With Next ws Next rw End Sub