我想要比较两个数据范围,如果匹配则会格式化。所以我想格式化一个范围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
答案 0 :(得分:3)
这是你在尝试的吗?
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
答案 1 :(得分:0)
您的循环似乎采用了一种效率低下的路线,而忽略了提供给您的其中一种工具(例如目标)。
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事件宏,目标表示一个或多个当前选择的单元格。通过循环选择当前选择中的每个单元格,可以在更大的范围内执行此伪条件格式。目标或选择可以是任意数量的单元格,直到工作表中的单元格总数,但ActiveCell property只能是单个单元格。
我已将/ color off开关上的颜色缩小为单个工作表MATCH function和一些小数学。这消除了循环标准单元格。
因为您可能希望在某个时刻选择整个行或列,所以我已经包含了一个单元处理“限制”,它将处理工作表上数据的范围。如果没有要处理的单元格上限,则在使用Worksheet_SelectionChange时很容易陷入对空行单元格的整行或列进行不必要的处理。