「vba アクティブセルの隣のセル参照して条件付き書式を設定」
という検索で、このサイト・インストラクターのネタ帳へのアクセスがありました。
隣のセルのデータに応じて書式を変更する条件付き書式を設定するマクロ・VBA(Visual Basic for Applications)のコードを探している方による検索です。
隣のセルを参照して書式変更する条件付き書式を設定するということは、Excel側の操作としては
[数式を使用して、書式設定するセルを決定]
から指定するタイプの条件付き書式ということです。
数式を使った条件付き書式を設定するサンプルマクロ
参考になりそうなシンプルなマクロをご紹介しておきます。
Dim fc As FormatCondition Set fc = Selection.FormatConditions.Add( _
Type:=xlExpression, _
Formula1:="=R[0]C[1]<=30")
fc.Interior.Color = RGB(255, 0, 0)
End Sub
条件付き書式を設定したいセル範囲を選択しておいてから、上記のマクロを実行すると、右隣のセルに「30」以下の数値が入力されているときに、セルの塗りつぶし色が赤色になる条件付き書式が設定されます。
下図のように名前の右隣に点数が入力されているときに、30点以下の人の名前を目立たせるような条件付き書式を設定するマクロをイメージしてください。
上記のマクロを実行後にExcelで条件付き書式の設定を確認すると、下図のような状態となります。
サンプルマクロの解説
数式使った条件付き書式をVBAから設定する場合は、FormatConditionsコレクションオブジェクトのAddメソッドの引数・Typeに、定数・xlExpressionを指定します。
Type:=xlExpression, _
FormatConditions.Addメソッドの引数・Formula1に、具体的な数式を指定するわけですが、ここはR1C1形式で書いておくほうが可読性・汎用性の面からいいのではないかと感じますので、
Formula1:="=R[0]C[1]<=30"
としました。
「=R[0]C[1]<=30」という式は、R1C1形式の数式で、「C」の後ろの「[1]」が、1列右のColumn(列)を参照することを表しています。
もしも左隣のセルを参照したい場合は「=R[0]C[-1]<=30」のように「C」の後ろを「[-1]」としてください。
FormatConditionsコレクションオブジェクトのAddメソッドは実行されると、Addメソッドで新たに追加されたばかりのFormatConditionオブジェクトを返してきます。
その返されるFormatConditionオブジェクトをオブジェクト変数・fcに格納しているのが、
Set fc = Selection.FormatConditions.Add( _
Type:=xlExpression, _
Formula1:="=R[0]C[1]<=30")
の意味です。
そのオブジェクト変数・fcを使って、FormatConditionのInteriorオブジェクトのColorプロパティを、RGB関数を使って指定しています。
fc.Interior.Color = RGB(255, 0, 0)
Home » Excel VBA Rangeオブジェクト » 条件付き書式 » 数式を使った条件付き書式を設定するExcelマクロ