「Set a = セル範囲.FormatConditions.Add(Type:=xlExpression, Formula1:=数式)」
今回は、オブジェクトを使った方法で、ご紹介します。
5以上は塗りつぶし
先ほどと同じように、セルA1に入力された値が、「5以上」のセルを「黄色」に塗りつぶししてみます。
VBAコードは、こんな感じになります。
Sub TEST1()
Dim Con
'条件付き書式を削除
Range("A1").FormatConditions.Delete
'条件を、5以上に設定して、オブジェクトに格納
Set Con = Range("A1").FormatConditions.Add(Type:=xlExpression, Formula1:="=A1>=5")
'条件成立で、背景色を「黄色」
Con.Interior.ColorIndex = 6
End Sub
手順は、
条件付き書式を削除
「5以上」の条件を設定して、オブジェクトに格納
条件が成立した場合の、書式を設定
という流れです。
では、実行してみます。
条件付き書式が、設定されているかを確認してみます。
条件付き書式の確認
先ほどと同じように、数式「=A1>=5」が設定されています。
では、セルA1に「10」を入力してみます。
「10」を入力してみる
セルA1に入力された値が、「5以上」なので、黄色に塗りつぶしされました。
次は、条件が不成立の場合で、「3」を入力してみます。
「3」を入力してみる
「3」は、「5以上」ではないので、書式はそのままとなりました。
こんな感じで、VBAで、条件付き書式を設定することができます。
他のパターンもやってみます。
2~5は塗りつぶし
次は、セルA1に入力された値が、「2~5」の場合に、セルを塗りつぶししてみます。
VBAコードは、こんな感じになります。
Sub TEST2()
Dim Con
'条件付き書式を削除
Range("A1").FormatConditions.Delete
'条件を、2~5に設定して、オブジェクトに格納
Set Con = Range("A1").FormatConditions.Add(Type:=xlExpression, Formula1:="=And(2<=A1, A1<=5)")
'条件成立で、背景色を「黄色」
Con.Interior.ColorIndex = 6
End Sub
Sub TEST3()
Dim Con
'条件付き書式を削除
Range("A1:A10").FormatConditions.Delete
'条件を、2~5以上に設定して、オブジェクトに格納
Set Con = Range("A1:A10").FormatConditions.Add(Type:=xlExpression, Formula1:="=And(2<=A1, A1<=5)")
'条件成立で、背景色を「黄色」
Con.Interior.ColorIndex = 6
End Sub
条件を設定するセル範囲を、「Range("A1:A10")」としています。
条件を設定する数式は、「"=And(2<=A1, A1<=5)"」として、相対参照にしています。
相対参照は、「$」をつけないで、セルを固定しない方法です。
セルA1~A10に数字を入力しました。
表を用意
では、このA1~A10に条件付き書式を設定します。
実行すると、条件付き書式が設定されます。
条件付き書式が設定される
条件付き書式の結果は、こんな感じになります。
「2~5」の範囲内の値が塗りつぶし
「2~5」の値が、塗りつぶされています。
絶対参照だとうまくいかない
ちなみに、次のように絶対参照で数式を設定すると、うまくいきません。
Sub TEST4()
Dim Con
'条件付き書式を削除
Range("A1:A10").FormatConditions.Delete
'条件を、2~5に設定して、オブジェクトに格納
Set Con = Range("A1:A10").FormatConditions.Add(Type:=xlExpression, Formula1:="=And(2<=$A$1, $A$1<=5)")
'条件成立で、背景色を「黄色」
Con.Interior.ColorIndex = 6
End Sub
Sub TEST5()
Dim a, Rg, Con
For Each a In Range("A2:A5")
'条件付き書式を削除
a.FormatConditions.Delete
'参照先のセルで、1つ右のセルのアドレスを取得
Rg = Range(a.Formula).Offset(0, 1).Address(external:=True)
'条件を、5未満に設定して、オブジェクトに格納
Set Con = a.FormatConditions.Add(Type:=xlExpression, Formula1:="=" & Rg & "<5")
'条件成立で、背景色を「黄色」
Con.Interior.ColorIndex = 6
Next
End Sub