【问题标题】:Compare multiple columns on 2 seperate sheets and says "Match" or "No Match?比较 2 张单独工作表上的多列并显示“匹配”或“不匹配?
【发布时间】:2021-07-22 10:10:43
【问题描述】:

我是 VBA 的初学者,我正在尝试创建一个宏来检查 Sheet4 上特定列中的值是否与 Sheet3 上的匹配。如果有匹配项,我希望它从 D4 开始在 Sheet2 中放置“匹配”或“不匹配”,并在 D2:AC2 的每一列中显示错误计数。我编写的当前代码一直在运行,直到 excel 崩溃并且所有值都显示为“不匹配”,我不确定我做错了什么。

Sub ProductCheck()

Dim i, r As Integer
Dim LRow, LRow1 As Long
Dim found As Range

'Copies over all the product names currently set up on demo
Worksheets("Product Rec").Range("B4:AC5000").Clear
Sheets("Demo Product Report").Select
Range("A2:B5000").Copy
Sheets("Product Rec").Select
Range("B4").Select
ActiveSheet.Paste

'Checking if both products are in live and demo
LRow = Sheets(4).Range("A" & Rows.Count).End(xlUp).Row
LRow1 = Sheets(2).Range("B" & Rows.Count).End(xlUp).Row

For i = 2 To LRow
    For r = 4 To LRow1
        If Sheets(4).Range("A" & i).Value = Sheets(3).Range("A" & i).Value Then
            Sheets(2).Range("D" & r).Value = "MATCH"
        Else
            Sheets(2).Range("D" & r).Value = "NO MATCH"
        End If
    Next r
Next i

有关更多信息,第一部分只是将设置的所有产品的名称复制到 sheet2 上的表格中,并且所有检查都放在产品的相应列中。 This is the output table

【问题讨论】:

  • VLOOKUP 没有帮助?
  • 能否提供不含任何敏感信息的示例 excel?
  • 很遗憾,我无法提供样本,我可以说第 3 和第 4 页上的列/行大约为 A1:AT5000 但可以每天更改,我不需要比较所有列,只需到 AC柱子。 VLOOKUP 可以,但产品数量每天都在变化,所以认为运行宏会更好
  • 不是解决方案,而是注释:Dim LRow, LRow1 As Long 仅声明 LRow1 As LongLRow As Variant。在 VBA 中,您需要为 每个 变量指定一个类型,或者默认为 VariantDim LRow As Long, LRow1 As Long。您还需要Dim i As Long, r As Long,因为您将它们与LRow 一起使用,因此它们需要是相同的类型。 • 您可能会从阅读How to avoid using Select in Excel VBA 中受益。
  • 哦,我明白了,请阅读它,感谢您的链接!

标签: excel vba compare


【解决方案1】:

请按照 Peh 在上方评论中所说的进行调整。

对于您任务的第一部分(匹配/不匹配)。您不必进行第二次迭代,因此使用

简化您的 VBA
LRow = Sheets(4).Cells(Sheets(4).Rows.Count, "A").End(xlUp).Row
r = 4
For i = 2 To LRow
        If Sheets(4).Range("A" & i).Value = Sheets(3).Range("A" & i).Value Then
            Sheets(2).Range("D" & r).Value = "MATCH"
            r = r + 1
        Else
            Sheets(2).Range("D" & r).Value = "NO MATCH"
        End If
Next i

对于查找错误任务的第二部分,您可以遍历每列中的每一行以搜索所有错误:)。

想法是找到最后一个右列,对于 i = 4(作为“D”行)到最后一列,在该列中找到最后一行,对于 row = 2 到 last_row_of_selected_column,如果是,则查找所有错误,然后添加 +1 或存储以其他方式。

也请考虑在代码开头添加

Application.Screenupdating = False 

代码结束

Application.Screenupdating = True 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-21
    • 1970-01-01
    相关资源
    最近更新 更多