我没有为这个问题找到一个好的答案,我已经进行了广泛的搜索 .
我有两个列表,每列有两列 . 这些清单包含经销商编号(A栏)和经销商的部件编号(B栏) . 在每个列中相同的值可以是重复的(每个经销商具有多个部件号,并且每个部件号可以针对多个经销商出现) .
我希望脚本以sheet1中的A1和B1开头,检查两个单元格是否在sheet2中匹配 - 列A和列B,如果是,则将A1中的等效单元格标记为红色,然后移至A2 B2执行相同操作比较再次 . 换句话说,它应检查工作表1中的row1,将其与Sheet2中的每一行进行比较以获得匹配,如果匹配则将Sheet1中的A单元格标记为红色,然后移至Sheet1中的下一行 .
这是我遇到问题的地方;我似乎无法使脚本灵活 . 我的脚本似乎没有检查Sheet1中的单元格A和B,并且它不检查每个循环的表单2中的完整范围 .
在下一步中,我还希望脚本检查Sheet2中的第三列是否高于Sheet1中的相应单元格,但是一旦我掌握了基础知识,我应该能够处理它 .
以下是我的代码现在的样子:
Sub Comparestwocolumns()
Dim i As Long
Dim lastrow As Long
Dim ws As Worksheet
Set ws = Sheet1
Set ws2 = Sheet2
For i = 1 To 500000
If IsEmpty(ws.Range("A" & i)) = True Then
Exit For
End If
For j = 1 To 500000
If IsEmpty(ws2.Range("A" & j)) = True Then
Exit For
End If
If ws.Range("A" & i).Value = ws2.Range("A" & j).Value Then
If ws.Range("A" & i).Offset(0, 1).Value = ws2.Range("A" & j).Offset(0, 1).Value Then
ws.Range("A" & i).Interior.Color = vbRed
Else
ws.Range("A" & i).Interior.Color = vbWhite
End If
Exit For
End If
Next j
Next i
MsgBox ("Finished ")
End Sub
谢谢!
3 回答
循环直到你的工作表上有数据:
关闭,如此接近 .
我对您的代码所做的大部分更改都是“装饰性的”(例如,使用“B”而不是从“A”中偏移一列) .
main 更改是
If
语句 . 在"cosmetic"更改后,您的If
语句最终看起来像:问题是,只要A列中的值匹配,就会退出
For j
循环,即使B列中的值不匹配也是如此 . 只有在A列和B列匹配时才需要执行Exit For
,例如,在完成所有更改后,最终代码最终为:
你可以使用AutoFilter():