我正在编写一个宏,它将在工作表中循环,以检测产品日志中的重复行。我需要它来查看UPC(A列)、到期日(E列)和位置(H列)。
第一个循环从2运行到LastRow,它是srcSheet.Cells(Rows.Count, "A").End(xlUp).Row
的值。我给变量赋值范围A/E/H:x,然后第二个循环从LastRow运行到3,步长为-1。
我遇到的问题是,当我使用And
或嵌套的If/Then
添加第二个条件时,每一行都将匹配。我让MsgBox
输出一条消息,并向我显示x
和y
的值。
如果我只检查一对值,如chkUPC
和srcUPC
,我会看到一切正常。当我添加第二个条件chkExpDate = srcExpDate
时,它会发现每一行都是重复的,当我输出x
和y
的值时,它们会匹配,因此,而不是在第一次运行时比较第2行和第1950行。它将把行3与自身进行比较。
下面是代码:
srcLastRow = srcSheet.Cells(Rows.Count, "A").End(xlUp).Row
For x = 2 To srcLastRow
srcUPC = srcSheet.Range("A" & x).Value
srcExpDate = srcSheet.Range("E" & x).Value
srcQty = srcSheet.Range("G" & x).Value
srcLocation = srcSheet.Range("H" & x).Value
For y = srcLastRow To 3 Step -1
chkUPC = srcSheet.Range("A" & y).Value
chkExpDate = srcSheet.Range("E" & y).Value
chkQty = srcSheet.Range("G" & y).Value
chkLocation = srcSheet.Range("H" & y).Value
If chkUPC = srcUPC And chkExpDate = srcExpDate Then
MsgBox "The same product has been found on multiple lines" & vbCrLf & x & " | " & y
End If
Next y
Next x
1条答案
按热度按时间lyr7nygr1#
你换吧
到
否则它将把除第二行之外的每一行与它自己进行比较。