繁体   English   中英

突出显示不在另一列中的单元格

[英]Highlight cells that are not in another column

我正在尝试比较两个列表(用户可以选择 - 它可以是数值或文本(10 个数字/字符长(不确定它是否重要))并突出显示第一个列表中不存在的单元格(红色)第二个。我知道可以用条件格式来做,但我想用 VBA 来做。

我在Debug.Print的即时窗口中收到“错误 2015”。

这是我到目前为止编写的代码:

Sub Colorcells()

Dim v1 As Range
Dim v2 As Range
Dim f As Variant

Set v1 = Application.InputBox("First list", "Obtain Range Object", Type:=8)
Set v2 = Application.InputBox("Second list", "Obtain Range Object", Type:=8)

lastv1 = v1.End(xlDown).Row

With Worksheets(1)
    For i = 1 To lastv1
        Debug.Print Application.Match(v1.Cells(i, 1), v2.Address)
        f = Application.Match(v1.Cells(i, 1), v2.Address, 0)
        If Not IsError(f) Then
            v1.Cells(i, 1).Interior.ColorIndex = 3
        End If
    Next i
End With

End Sub

我试图将 f 数据类型更改为 string/long,但随后我收到了“类型不匹配”错误。 我也尝试将循环更改为(具有相同的错误 2015 结果):

For i = 1 To lastv1
    If Not IsError(Application.Match(v1.Cells(i, 1), v2.Address, 0) then
        v1.Cells(i, 1).Interior.ColorIndex = 3
    End If
Next i

任何帮助,将不胜感激。

不如不使用 Match 函数,而是使用 Find one,如下所示:

Sub Colorcells()
Dim v1 As Range
Dim v2 As Range
Dim found As Range

Set v1 = Application.InputBox("First list", "Obtain Range Object", Type:=8)
Set v2 = Application.InputBox("Second list", "Obtain Range Object", Type:=8)

For i = 1 To v1.Count
    Set found = v2.Find(What:=v1.Cells(i, 1), LookAt:=xlWhole)
    'find the value from v1 in v2
    If found Is Nothing Then
    'if not found then Color
        v1.Cells(i, 1).Interior.ColorIndex = 3
    End If
Next i
End Sub

您需要使用以下内容调整两行:

Debug.Print Application.Match(v1.Cells(i, 1), .Range(v2.Address), 0)
f = Application.Match(v1.Cells(i, 1), .Range(v2.Address), 0)

.Range将遵循您在此代码部分开头指定的With Worksheets(1)

v2.Address是不够的,因为它只返回单元格引用,例如“$B$1:$B$2”。 您需要将其包装在范围内并指定工作表名称。

结果:

在此处输入图片说明

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM