首页 > 解决方案 > 标记所有不包含两个给定单词的单元格

问题描述

我正在编写一个代码,它应该在一个范围内用红色标记所有不包含单词"bel"and的单元格"hsa"

Sub Check()
    Range("c2:c49").Select

    For Each cell In Selection
        If (cell.Value <> "bel" Or cell.Value <> "hsa") Then
            cell.Interior.Color = RGB(255, 0, 0)
        End If
    Next cell
End Sub

如果我只有一个论点,它会起作用。使用上面的两个参数,它将范围内的所有单元格标记为红色。

Or运营商有错吗?

标签: excelvbaif-statement

解决方案


请注意,此任务可以使用条件格式来解决,它的优点是如果数据更改会自动更新,您无需一遍又一遍地运行该过程。


以下只是为了改进您的编码:

  1. 避免在 Excel VBA 中使用 Select。• 而是直接使用范围并指定范围在哪个工作表中。如果您不这样做,Excel 会猜测您打算使用哪个工作表,它可能会失败:

    For Each cell In Worksheets("MySheet").Range("C2:C49")
    
  2. 我建议始终激活Option Explicit并声明所有变量。这是一个非常好的做法,可以防止许多错误:在 VBA 编辑器中,转到ToolsOptionsRequire Variable Declaration

  3. 您的实际问题是,如果您想排除两者"bel" "hsa"然后(当然)您需要使用And运算符。

    Cell.Value <> "bel" And Cell.Value <> "hsa"
    

    请注意<>vs=总是改变操作符的逻辑or/and。或者,您可以使用:

    Not (Cell.Value = "bel" Or Cell.Value = "hsa")
    

    …这会给你同样的结果。使用对您来说更容易理解的那个。


所以你最终会得到类似的东西:

Option Explicit

Public Sub ValidateAndColorCells()
    Dim CheckRange As Range
    Set CheckRange = Worksheets("YourSheet").Range("C2:C49") 'Always specify the sheet!

    Dim Cell As Range '<-- declare ALL your variables
    For Each Cell In CheckRange 
        If Cell.Value <> "bel" And Cell.Value <> "hsa" Then
            Cell.Interior.Color = RGB(255, 0, 0)
        End If
    Next Cell 
End Sub

推荐阅读