Excel VBA 循环遍历列并为不属于另一列的单元格着色。

Excel VBA 循环遍历列并为不属于另一列的单元格着色。

我正在尝试编写 Excel VBA 代码,该代码将循环遍历列中的数据并检查值是否存在于另一张工作表的列中。我这样做是为了验证输入的数据是否来自值列表。如果值列表中不存在数据,我想将单元格的背景颜色设置为红色。数据未输入到 Excel 中,因此使用数据验证列表不是一种选择。我正在验证的列中的某些值可能为空,这没问题,但我想确保它检查所有有值的行。

这是我目前拼凑起来的,但它正在改变顶行的颜色,而不是沿着第 I 列向下改变。

Option Explicit

Sub Test()

Dim Rng As Range
Dim i As Long
Dim LastRow As Long


Set Rng = Worksheets("Lookups").Range("AC2:AC" & Range("AC" & Rows.Count).End(xlUp).Row)
Application.ScreenUpdating = False
With Worksheets("COMPANY")

    LastRow = .Cells(.Rows.Count, "I").End(xlUp).Row

    For i = 1 To LastRow

        If Not IsError(Application.Match(.Range("I" & i).Value, Rng, 0)) Then
            .Cells(i).Interior.ColorIndex = 3
        End If
    Next i
End With
Application.ScreenUpdating = True

End Sub

答案1

如果相应值不在 Sheet2 中,则此 VBA(宏)代码将帮助您突出显示 Sheet1 中的所有行。

Sub CompareSheets()


Dim i As Long, f As Variant

With Worksheets(1)
    For i = 1 To .Cells(.Rows.Count, "A").End(xlUp).Row
        f = Application.Match(.Cells(i, "A").Value2, Worksheets(2).Columns("A"), 0)
        If Not IsError(f) Then
            .Cells(i, "A").Interior.ColorIndex = 4
        End If
    Next i
End With
End Sub

注意:

  • 使用的列是A form Row 1 onwards,您需要根据需要调整参考。
  • Sheet1Source&Sheet2Target Sheet

相关内容