2017-05-07 208 views
1

我想通過使用VBA來突出顯示具有與單元格匹配的值的行,從而節省了我一些時間。我可以讓它在單行上工作,但希望它在一個循環上工作以捕獲〜97行。Excel條件格式VBA循環

匹配的值是在細胞A4中欄U7:U97,因此突出顯示範圍( 「E7:K7,M7:S7,U7:V7」)

我的代碼是:

Sub Macro1() 

    Range("E7:K7,M7:S7,U7:V7").Select 
    Range("U7").Activate 
    Application.CutCopyMode = False 
    Selection.FormatConditions.Add Type:=xlExpression, Formula1:="=$U$7=$A$4" 
    Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority 
    With Selection.FormatConditions(1).Font 
     .ThemeColor = xlThemeColorDark1 
     .TintAndShade = 0 
    End With 
    With Selection.FormatConditions(1).Interior 
     .PatternColorIndex = xlAutomatic 
     .ThemeColor = xlThemeColorLight1 
     .TintAndShade = 0.249946592608417 
    End With 
    Selection.FormatConditions(1).StopIfTrue = False 
End Sub 

這對第7行可以正常工作,我可以剪切並粘貼它並手動更改下一行的值,但必須有方法在循環中運行此操作。

我嘗試以下不工作,

Sub Macro2() 

    For i = 7 To 97 

    Sheet2.Cells(i, "E").Select 
    Sheet2.Cells(i, "F").Select 
    Sheet2.Cells(i, "G").Select 
    Sheet2.Cells(i, "H").Select 
    Sheet2.Cells(i, "I").Select 
    Sheet2.Cells(i, "J").Select 
    Sheet2.Cells(i, "K").Select 
    Sheet2.Cells(i, "L").Select 
    Sheet2.Cells(i, "U").Activate 
    Application.CutCopyMode = False 
    Selection.FormatConditions.Add Type:=xlExpression, Formula1:="=Sheet2.Cells(i, 21)=$A$4" 
    Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority 
    With Selection.FormatConditions(1).Font 
     .ThemeColor = xlThemeColorDark1 
     .TintAndShade = 0 
    End With 
    With Selection.FormatConditions(1).Interior 
     .PatternColorIndex = xlAutomatic 
     .ThemeColor = xlThemeColorLight1 
     .TintAndShade = 0.249946592608417 
    End With 
    Selection.FormatConditions(1).StopIfTrue = False 

    Next i 

End Sub 
+0

你爲什麼要使用VBA,而不是條件格式沒有它?另外,有什麼不適用於代碼?錯誤是否被拋出?什麼錯誤,在哪裏?此外,您可以通過[避免使用'.Select /'.Activate']來幫助收緊代碼[(https://stackoverflow.com/questions/10714251/how-to-avoid-using-select-in- Excel的VBA的宏)。 (例如,在'Macro2'中,選擇列E到K的行不會做任何事情,因爲您最後選擇列L,並且變成'選擇')。 – BruceWayne

回答

1

懶惰速戰速決(未經測試):

Sub Macro1() 

    Dim i As Long 

    For i = 7 to 97 


    Range(Replace("E#:K#,M#:S#,U#:V#","#",i)).Select 
    Range("U" & i).Activate 
    Application.CutCopyMode = False 
    Selection.FormatConditions.Add Type:=xlExpression, _ 
            Formula1:="=$U$" & i & "=$A$4"  

    Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority 
    With Selection.FormatConditions(1).Font 
     .ThemeColor = xlThemeColorDark1 
     .TintAndShade = 0 
    End With 
    With Selection.FormatConditions(1).Interior 
     .PatternColorIndex = xlAutomatic 
     .ThemeColor = xlThemeColorLight1 
     .TintAndShade = 0.249946592608417 
    End With 
    Selection.FormatConditions(1).StopIfTrue = False 

    Next i 

End Sub 
+0

非常感謝!很好地工作。 – Nemo51