遍历工作簿中的所有 Sheet 并 Copy/Paste 匹配摘要 Sheet

Loop Through All Sheets In Workbook And Copy/Paste Match To Summary Sheet

我正在尝试开发一个 Excel VBA sheet,其中有一个摘要 sheet。该程序必须循环遍历所有活动的 sheet,其中标题为“修订”,并且能够复制和粘贴最新修订工作中的所有内容sheet 如果当前修订 sheet 中没有任何内容 sheet。但是,如果它确实从以前的修订 sheet 中找到了某些内容,则它必须在该行的摘要 sheet 上进行反击。

例如,在摘要页面上会是这样的:

修订标题

0 苹果

遍历所有 sheets

在修订版 1 上查找苹果 sheet

将苹果版本 1 粘贴到摘要中 sheet

修订标题

1 个苹果

到目前为止,我的代码是这样的,但我认为它不在正确的轨道上,其中“BOM”是上面示例中的摘要 sheet。该代码还必须遍历所有行,直到它检测到第一个空白行,然后移动到下一个 sheet,直到不再有名称为“revision”的 sheet。


Dim wkst As Worksheet
Dim row As Long 'if you ever exceed 32,000 this will fail as integer
row = 1
For Each wkst In ActiveWorkbook.Worksheets
' loop through the Open worksheets
   If wkst.Name <> "Summary" Then
        Sheets("BOM").Range("B2").Value = Worksheets(I + 1).Range("B2")
        Sheets(I + 1).Range("B2").Copy
        Sheets("BOM").Range("B5").PasteSpecial xlPasteValues
      row = row + 1
   End If

Next
    
End Sub

对不起,我很难理解你想要什么。
特别是你提到了一个名为“summary”的 sheet 和一个名为“BOM”的 sheet。

无论如何,下面是我对你想要什么的猜测

代码假设上图中A列的数据是sheet“rev1”A列的数据,C列是sheetA列的数据“rev2”和E列是sheet“rev3”的A列中的数据。

目标是计算名称包含“rev”的所有 sheet 上所有现有数据的出现次数。

因此,根据图中所示的示例,预期结果是图片中 G 列的结果,它将被放入 sheet 中,名称为“摘要”A 列。例如:标题“AA”出现两次 (2 AA),一次在 sheet“rev1”中,一次在 sheet“rev2”中......标题“G”出现是四次 (4 GG),在 sheet "rev1" 中是一次,在 sheet "rev2" 中是两次,在 sheet "rev3" 中是一次......等等在。其他“rev”上不存在的标题 sheet 是唯一的,前缀为“1”。

Sub test()
Dim arr As Object: Set arr = CreateObject("scripting.dictionary")
Dim el As Variant
Dim sh As Worksheet
Dim cnt As Integer
Dim c as Range

For Each sh In Worksheets
    If InStr(sh.Name, "rev") Then _
        For Each c In sh.Range("A2", sh.Range("A" & Rows.Count).End(xlUp)): arr(c.Value) = 1: Next
Next


For Each el In arr
    For Each sh In Worksheets
        If InStr(sh.Name, "rev") Then cnt = cnt + Application.CountIf(sh.Range("A:A"), el)
    Next sh
Sheets("summary").Range("A" & Rows.Count).End(xlUp).Offset(1, 0).Value = CStr(cnt) & " " & el
cnt = 0
Next el

End Sub

代码的作用:
它收集名称包含“rev”的每个 sheet 上的所有唯一值,从单元格 A2 开始到最后一个值进入变量 arr 的任何行。

然后它循环到 arr 中的每个元素,以计算每个 sheet 中名称包含“rev”的元素出现的次数,并将其保存到变量 cnt 中。

然后最后它在sheet“摘要”列A中写入cnt值和元素名称。