2013-07-08 3 views
1

내가하려는 것은 셀 (A1)이 명명 된 범위 ("이름")의 내용과 일치 할 때 색상을 변경하지만 일치하지 않을 때 다른 이름이 붙은 범위 ("아이")가되면 다른 색이됩니다 (더 많은 범위가 있지만 두 가지 작업이 끝나면 알아낼 수있을 것입니다)셀이 범위 내에있는 경우 서식 변경

주의 사항 :

조건부 서식을 사용하여이 작업을 수행 할 수 있음을 알고 있지만 명명 된 범위의 수와 매크로 크기를 사용하기가 더 쉬울 것으로 기대했던 범위의 크기로 인해 가능합니다. 지금까지입니다 (이 시트 1 아래주의 코드의

내이 많이

나는 지금까지 하나 개의 명명 된 범위에 대한 작업을 진행하게 관리해야하고, A1이 아닌 공식 경우 (단 A1이 될 것입니다)) :

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 

답변

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) 만 사용할 수 있습니다.

+0

내게 맘에 들지 않았습니다. 18 번 줄에 있습니다. 그래서 그것을 워크 시트 ("sheet1")로 변경했습니다. 범위와 이제는 잘 작동합니다. 도움을 주셔서 감사합니다 : D 조 – TinyTim

관련 문제