如果单元格在某个范围内,请更改格式

时间:2013-07-08 02:43:19

标签: excel-vba vba excel

我想要做的是当一个单元格(A1)匹配命名区域(“名称”)中的某些内容然后它会改变颜色,但是如果它不匹配但是匹配某个不同的命名范围(“眼睛”) )然后它变成了一种不同的颜色(还有更多的范围,但我确信在我有两个工作后我能够弄清楚它)

注意事项:

我知道这可以通过条件格式来完成,但是由于命名范围的数量和范围的大小,我希望使用宏更容易。

到目前为止,我已经设法让它适用于一个命名范围,并且当A1不是公式时(但是A1将是)

到目前为止我的2个代码是(注意这是在sheet1下):

Private Sub Worksheet_Change(ByVal Target As Range)

    If Target.Address = "$A$1" Then
        Application.Run ("Colour")
    End If

End Sub

我的第二个(是一个单独的模块):

Sub Colour()

    With ActiveSheet
        For Each c In .Range("Names").Cells

        If c.Value = .Range("A1").Value Then
            Range("A1").Select
            With Selection.Interior
                .Color = 5287936
            End With
        End If

        Next c
    End With

End Sub

1 个答案:

答案 0 :(得分:0)

我认为这可以满足您的需求:

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Me.Range("A1")) Is Nothing Then
    ApplyColor Me.Range("A1")
End If
End Sub

Sub ApplyColor(ValueRange As Range)
Dim MatchRanges As Variant
Dim MatchColors As Variant
Dim MatchValue As Variant
Dim i As Long

MatchRanges = Array("Names", "Eye")
MatchColors = Array(5287936, 4287952)
MatchValue = ValueRange.Value

ValueRange.Interior.Color = vbWhite
For i = LBound(MatchRanges) To UBound(MatchRanges)
    If WorksheetFunction.CountIf(Me.Range(MatchRanges(i)), MatchValue) > 0 Then
        ValueRange.Interior.Color = MatchColors(i)
        Exit For
    End If
Next i
End Sub

一些注释:“颜色”是一个VBA保留字,可能会导致问题,所以我使用了其他东西作为你的子名。在这种情况下,您不需要使用Application.Run,只需要使用子名称及其参数(如果您愿意,还可以使用Call。)