首页 > 解决方案 > 两列的字符串比较不返回 If 语句结果

问题描述

我已经成功地让这个字符串比较适用于一列。我已将范围扩大到两列,并且在查看正在进行比较的本地窗口时会出现。由于某些原因,如果字符串比较为正,我无法破译 if 语句来更改单元格的颜色。

没有得到任何错误,但也没有得到任何响应。

我已经穿过并观看了本地窗口,我在那里观察到的一切都告诉我正在进行比较,所以我对可能缺少什么感到有些困惑。

Sub ColourDuplicateNameTwoCol() 'Work in progress

    Dim baseName As Range
    Dim allName As Range 
    Dim cell As Range

    With ThisWorkbook.Worksheets("sheet1")
            Set baseName = Range("c1")
            Set allName = Range("a1:b7")

            For Each cell In allName.cells
                If StrComp(baseName.Value, cell.Value, vbTextCompare) = 1 Then
                  cell.Interior.Color = vbYellow
                End If
            Next cell

    End With

End Sub

这是我提到的单列工作版本

Sub ColourDuplicateName() 'Works 

Dim baseName As Range

With ThisWorkbook.Worksheets("sheet1")
Set baseName = .Range("b1")

For I = 1 To 7
    If StrComp(baseName.Value, cells(I, 1).Value, vbTextCompare) = 1 Then
    cells(I, 1).Interior.ColorIndex = 3
    End If
Next I

End With
End Sub

标签: excelvba

解决方案


您对 from 的返回值的解释StrComp不正确。检查 VBA 帮助。

Option Explicit
Sub ColourDuplicateNameTwoCol() 'Work in progress

    Dim baseName As Range
    Dim allName As Range
    Dim cell As Range

    With ThisWorkbook.Worksheets("sheet1")
            Set baseName = .Range("c1")
            Set allName = .Range("a1:b7")

            For Each cell In allName.Cells
                If StrComp(baseName.Value, cell.Value, vbTextCompare) = 0 Then
                  cell.Interior.Color = vbYellow
                End If
            Next cell

    End With

End Sub

在此处输入图像描述

上面的代码仅显示了StrComp您遇到的问题,不是很动态。您必须添加代码以删除颜色,然后将其添加回来,应该baseName会更改。当然,您可以使用事件宏来执行此操作。

但是,更动态的方法是只设置条件格式。你只需要这样做一次,它就可以完成同样的事情。

要在 VBA 代码中执行此操作,例如:

Option Explicit
Sub ColourDuplicateNameTwoCol() 'Work in progress

    Dim baseName As Range
    Dim allName As Range
    Dim cell As Range

    With ThisWorkbook.Worksheets("sheet1")
            Set baseName = .Range("c1")
            Set allName = .Range("a1:b7")
    End With

    With baseName.FormatConditions
        .Delete
        .Add Type:=xlCellValue, _
            Operator:=xlEqual, _
            Formula1:=baseName
        .Item(1).Interior.Color = vbYellow
    End With

End Sub

FormatConditions如果您有其他要allNames保留的代码,则需要修改此代码。


推荐阅读