微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决比较 2 个单独工作表上的多列,并显示“匹配”或“不匹配?

我是 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

解决方法

请按照 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 

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。