有条件地格式化范围

我有两个范围的数据,我想比较和格式,如果他们匹配。 所以我想格式化范围1单元格,如果有任何数据匹配范围2中的数据。这是我迄今为止 – 它的工作原理,直到我将数据更改为范围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事件macros, Target表示一个或多个当前select的单元格。 通过循环select当前select中的每个单元格,可以在更大的范围内执行此伪条件格式化。 目标或select可以是工作表中单元总数的任意数量的单元,但ActiveCell属性只能是单个单元。

我已经减less了颜色/颜色切换到单个工作表MATCHfunction和一些小math。 这消除了循环通过标准单元格。

因为您可能希望在某个时候select整个行或列,所以我包含了一个单元格处理“限制”,它将处理工作表上的数据范围。 如果没有要处理的单元格的上限,那么在使用Worksheet_SelectionChange时,很容易陷入整个行或列的空白单元格的不必要处理。

Worksheet_SelectionChange单元格格式