我在A
和B
列中有数据。 B
专栏的数据大多是A
数据的重复数据,但并非总是如此。例如:
A
Budapest
Prague
Paris
Bukarest
Moscow
Rome
New York
B
Budapest
Prague
Los Angeles
Bukarest
我需要在A
列中搜索B
中的值。如果一行匹配,我需要将A
中行的背景颜色更改为红色或其他东西。
这是公式
基于公式在条件格式中创建新规则。使用以下公式并将其应用于$ A:$ A.
=NOT(ISERROR(MATCH(A1,$B$1:$B$1000,0)))
这是the example sheet to download if you encounter problems
UPDATE 这里是@pnuts的建议也很完美:
=MATCH(A1,B:B,0)>0
不需要公式。这适用于您需要的任意数量的列,但只会比较同一工作表中的列:
另一个更简单的解决方案是在条件格式中使用此公式(适用于A列):
=COUNTIF(B:B,A1)
问候!
你需要做的只是一个简单的循环。 这不适用于小写,大写不匹配的测试。如果这不是你想要的,评论,我可以修改。
如果您打算学习VBA。这是一个很好的开始。
测试:
Sub MatchAndColor()
Dim lastRow As Long
Dim sheetName As String
sheetName = "Sheet1" 'Insert your sheet name here
lastRow = Sheets(sheetName).Range("A" & Rows.Count).End(xlUp).Row
For lRow = 2 To lastRow 'Loop through all rows
If Sheets(sheetName).Cells(lRow, "A") = Sheets(sheetName).Cells(lRow, "B") Then
Sheets(sheetName).Cells(lRow, "A").Interior.ColorIndex = 3 'Set Color to RED
End If
Next lRow
End Sub
我正在研究这个并且喜欢使用for循环的peege方法! (因为我现在正在学习VBA)
但是,如果我们尝试匹配另一列的“任何”值,那么如何使用嵌套循环如下?
Sub MatchAndColor()
Dim lastRow As Long
Dim sheetName As String
sheetName = "Sheet1" 'Insert your sheet name here
lastRow = Sheets(sheetName).Range("A" & Rows.Count).End(xlUp).Row
For lRowA = 1 To lastRow 'Loop through all rows
For lRowB = 1 To lastRow
If Sheets(sheetName).Cells(lRowA, "A") = Sheets(sheetName).Cells(lRowB, "B") Then
Sheets(sheetName).Cells(lRowA, "A").Interior.ColorIndex = 3 'Set Color to RED
End If
Next lRowB
Next lRowA
End Sub
我无法对最佳答案发表评论,但Excel实际上允许您在不添加丑陋条件逻辑的情况下执行此操作。
条件格式自动应用于任何非错误的输入,因此您可以实现与以下相同的效果:
=NOT(ISERROR(MATCH(A1,$B$1:$B$1000,0)))
有了这个:
= MATCH(A1,$B$1:$B$1000,0)))
如果以上内容适用于您的数据,A1将被格式化,如果它匹配$ B $ 1中的任何单元格:$ B $ 1000,因为任何非匹配将返回错误。