比较 2 个单独工作表上的多个列并显示 "Match" 或“不匹配?

Compare multiple columns on 2 seperate sheets and says "Match" or "No Match?

我是 VBA 的初学者,我正在尝试创建一个宏来检查 Sheet4 上特定列中的值是否与 Sheet3 上的匹配。如果有匹配,我希望它在 Sheet2 中从 D4 开始放置“匹配”或“不匹配”,并在 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 上的 table,并将所有检查放在产品的相应列中。 This is the output table

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

您任务的第一部分(match/no 匹配)。你不必第二次迭代,所以用

简化你的 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”)到最后一列,找到该列中的最后一行,对于行 = 2 到 last_row_of_selected_column 找到所有错误(如果是)然后添加+1 或以其他方式存储它。

也请考虑在代码开头添加

Application.Screenupdating = False 

代码结束

Application.Screenupdating = True