【问题标题】:How to loop through all sheets and if cells match copy range to sheet?如何遍历所有工作表以及单元格是否将复制范围与工作表匹配?
【发布时间】:2021-03-19 18:27:36
【问题描述】:

我有一个包含许多工作表的工作簿。我想合并工作表。

大多数工作表中的单元格 A13 不同,但对于某些工作表,它们是相同的。

我想循环浏览床单。如果单元格 A13 匹配,则将第 10 行和第 11 行复制到 A10 中的第一个匹配表中,并删除其他匹配表。

例如,

比较 Sheet1 和 Sheet2 -> 如果单元格 A13 不匹配,则比较下一张表,即比较 Sheet2 和 Sheet3 以检查它们是否匹配。

如果 Sheet2 和 Sheet3 中的单元格 A13 匹配,则将 Sheet3 中的第 10 行和第 11 行复制到第 10 行下方的 Sheet2 中并删除 Sheet3。

然后将 Sheet2 与 Sheet4 进行比较,依此类推。

Sub WorksheetLoop()

    Dim WS_Count As Integer
    Dim I As Integer

    ' Set WS_Count equal to the number of worksheets in the active workbook.
    WS_Count = ActiveWorkbook.Worksheets.Count

    ' Begin the loop.
    For I = 1 To WS_Count
        If Worksheets(I).Range("A13").Value = Worksheets(I + 1).Range("A13") Then
            Worksheets(I + 1).Range("A7:L9").Copy
            Worksheets(I).Range("A10").PasteSpecial
            Worksheets(I + 1).Delete
        End If
    Next I

End Sub

首先,当这完成时我得到一个错误(我怀疑是因为范围)。

其次,当“A13”仅匹配两张纸时,它可以工作。当有多个匹配的工作表时,它只处理第一个匹配的工作表。

另一个问题是,如果有多个匹配的工作表,我将如何保留复制到第一个工作表中的所有范围,以便它们彼此粘贴而不是被覆盖?

【问题讨论】:

  • 看起来您需要循环每个工作表,然后再次循环以检查值是否在其中。所以检查 sheet1 vs 2,3,4,5 然后 2 vs, 1,3,4,5 等等
  • 或者只是将工作表循环到数组或字典中,“工作表名称”“A13 的内容”然后循环遍历并执行您需要做的事情。

标签: excel vba


【解决方案1】:

另外,尝试使用:

For Each Worksheet in ThisWorkbook.Sheets

由于您要删除循环中的工作表,WS_Count 会保持大于您被排除在外的工作表的数量。

【讨论】:

  • 那么我如何循环遍历每张工作表并使用这种方法将其与其余工作表一一进行比较?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-23
  • 1970-01-01
  • 2022-11-16
  • 2016-11-06
  • 1970-01-01
相关资源
最近更新 更多