条件格式范围

Conditionally formatting ranges

我有两个数据范围,我想比较它们并设置格式(如果它们匹配)。因此,如果任何数据与范围 2 中的数据匹配,我想格式化范围 1 单元格。这就是我到目前为止所拥有的 - 它一直有效,直到我将数据更改为范围 2 但不更新它:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

Dim myRange As Range, cell As Range
Set myRange = Range("a9:a12")

For Each cell In myRange
If cell.Value = ActiveCell.Value And Not IsEmpty(ActiveCell.Value) Then
ActiveCell.Interior.ColorIndex = 3

End If
Next cell
End Sub

问题是单元格仍然保持从第一个代码块格式化的颜色,所以如果第二个范围内的数据发生变化,我如何才能将其改回原样?

  Private Sub Worksheet_Change(ByVal Target As Range)
  Dim myRange1 As Range
  Set myRange1 = Range("f9:f12")

  If Not Intersect(Target, Range("f1:f6")) Is Nothing Then
  If Application.WorksheetFunction.CountIf(myRange1,   ActiveCell.Value) > 0 _
  Then ActiveCell.Interior.ColorIndex = 3 Else ActiveCell.Interior.Color =   xlNone
  End If
End Sub

这是你正在尝试的吗?

If cell.Value = ActiveCell.Value And _
Not IsEmpty(ActiveCell.Value) Then
    ActiveCell.Interior.ColorIndex = 3
Else
    ActiveCell.Interior.Color = xlNone
End If

编辑

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Dim myRange As Range

    Set myRange = Range("a9:a12")

    If Application.WorksheetFunction.CountIf(myRange, ActiveCell.Value) > 0 _
    Then ActiveCell.Interior.ColorIndex = 3 Else ActiveCell.Interior.Color = xlNone
End Sub

编辑

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim myRange As Range
    Set myRange = Range("f9:f12")

    If Not Intersect(Target, myRange) Is Nothing Then
        If Application.WorksheetFunction.CountIf(myRange, Target.Value) > 0 _
        Then Target.Interior.ColorIndex = 3 Else Target.Interior.Color = xlNone
    End If
End Sub

您的循环似乎采用了一种效率低下的路线,并且忽略了提供给您的工具之一(例如 Target)。

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    'important for _SelectionChange event macros
    'only process the cells to the extents of the data, not whole rows or columns
    If Not Intersect(Target, Target.Parent.UsedRange) Is Nothing Then
        Dim c As Range
        For Each c In Intersect(Target, Target.Parent.UsedRange)
            c.Interior.ColorIndex = 3 + _
                4145 * IsError(Application.Match(c.Value2, Range("A9:A12"), 0))
        Next c
    End If
End Sub

因为 Worksheet_SelectionChange event macro, the Target represents one or more cells that is the current Selection. By cycling through each of the cells in the current selection, you can perform this pseudo-Conditional Formatting on a larger range. The Target or Selection can be any number of cells up to the total number of cells in a worksheet but the ActiveCell property 永远只能是一个单元格。

我已将颜色 on/color 关闭开关减少到单个工作表 MATCH function 和一点数学。这消除了循环遍历条件单元格。

因为您可能希望在某个时候 select 整行或整列,所以我包含了一个单元格处理 'limit',它将处理数据的范围在工作表上。如果不对要处理的单元格设置上限,使用 Worksheet_SelectionChange.

时很容易陷入对整行或整列空白单元格的不必要处理中