VBAでセルに条件付き書式を追加したい場合は、FormatConditionsコレクション(参考)のAddメソッドを実行します。
この記事では、セルの値を判定する例(値が一致、以上以下など)を作りたいと思います。他のTypeについては別途記事作る予定です。
FormatConditions.Addメソッド
基本形(セルの値)
条件付き書式の作成(セルの値)
FormatConditions.Add(Type:=xlCellValue,Operator,Formula1,Formula2).適用する書式
FormatConditions.Add(Type:=xlCellValue,Operator,Formula1,Formula2).適用する書式
A1セルに何も条件付き書式が設定されていない状態から始めます。
まずは範囲の指定ですが、RangeやCellsの後にFormatConditionsをくっつければ、(範囲の)条件付き書式の集合であるFormatConditionsコレクションが取得されます。要するに命令の「対象」になります。
オブジェクト.FormatConditionsの後ろにAddを付けると、「対象」(指定範囲)に条件付き書式を追加するという意味になります。本来どういった書式を追加するかなどを追加指定していくんですが、
' vba
Range("A1").FormatConditions.Add 1, 3, 1
それは後にして、まず簡単なコードを用意しました。これを実行してみます。
実行後にA1セルの条件付き書式を確認すると、書式こそ指定されていないものの、条件付き書式が作成されていることがわかります。
さらに書式の中身を確認すると、①セルの値が②1と③一致する場合、書式を変更する設定になっています。
先ほどのコードでいう最後の1、3、1が、それぞれ①③②を意味しています。
先ほどのコードでいう最後の1、3、1が、それぞれ①③②を意味しています。
' vba
Range("A1").FormatConditions.Add Type:=1, Operator:=3, Formula1:=1
メソッドの引数にはそれぞれ名前があり、決められた順番で書く以外にもフィールド名で指定する書き方もあります。
フィールド名を指定するとこういった書き方になります。
①ルール(セルの値)のフィールド名がType、
②参照する値がFormula1、
③条件(一致する)がOperatorとなります。
フィールド名を指定するとこういった書き方になります。
①ルール(セルの値)のフィールド名がType、
②参照する値がFormula1、
③条件(一致する)がOperatorとなります。
' vba
Range("A1").FormatConditions.Add Type:=1, Operator:=4, Formula1:=10
少し値を変更してみます。Typeはそのまま、Operatorを4に、Formula1を10に変更してみます。
実行結果を見ると、条件が変化していることが確認できます。
Type
Typeでは、ルールの種類を数字またはXlFormatCondition列挙型定数で指定できます。
定数名 | 値 | 内容 |
---|---|---|
xlCellValue | 1 | セルの値 |
xlExpression | 2 | 演算 |
xlColorScale | 3 | カラー スケール |
xlDataBar | 4 | データバー |
xlTop10 | 5 | トップ10 |
xlIconSet | 6 | アイコンセット |
xlUniqueValues | 8 | 一意の値 |
xlTextString | 9 | テキスト文字列 |
xlBlanksCondition | 10 | 空白の条件 |
xlTimePeriod | 11 | 期間 |
xlAboveAverageCondition | 12 | 平均より上/下 |
xlNoBlanksCondition | 13 | 空白の条件なし |
xlErrorsCondition | 16 | エラー条件 |
xlNoErrorsCondition | 17 | エラー条件なし |
ルールの種類でぴんとこない方は、マクロ抜きでいくつか試してみることをおすすめします。
Operator
Operatorでは、条件付き書式の演算子を数字またはXlFormatConditionOperator列挙型定数で指定できます。
演算子を使わない条件付き書式では使用しません。
定数名 | 値 | 内容 |
---|---|---|
xlBetween | 1 | 値の間(Folmula2必須) |
xlNotBetween | 2 | 値の間以外(Folmula2必須) |
xlEqual | 3 | 次の値と等しい |
xlNotEqual | 4 | 次の値と等しくない |
xlGreater | 5 | 次の値より大きい |
xlLess | 6 | 次の値より小さい |
xlGreaterEqual | 7 | 次の値以上 |
xlLessEqual | 8 | 次の値以下 |
Formula1、Formula2
Formula1、Formula2は演算で仕様する値です。対象の値がひとつしかない場合、Formula2は設定できません。
Formula2も指定する例としてはこのようになり、
' vba
Range("A1").FormatConditions.Add Type:=xlCellValue, _
Operator:=xlBetween, _
Formula1:=1, _
Formula2:=5
上の例をコードで実装するとこのようになります。
xlCellValueおよびxlBetweenは値でいうと1です。定数名、値、どちらでも引数は指定できます。
xlCellValueおよびxlBetweenは値でいうと1です。定数名、値、どちらでも引数は指定できます。
ここまでで条件の設定の説明は一旦終わり、次に書式の設定に移ります。
書式の指定
条件を満たした場合の書式を指定するには、まずAddの後の引数部分を全部()で閉じます。これだけだと構文エラーになりますが、
' vba
Range("A1").FormatConditions.Add(Type:=xlCellValue, _
Operator:=xlBetween, _
Formula1:=1, Formula2:=5).Font.Bold = True
)の後ろに指定したい書式を記述すると、実行可能な状態になります。
Font.Bold = True
は文字を太字にする命令です(TrueでON、FalseでOff)。実行すると、A1セルに条件付き書式が適用されていて、書式も反映されることが確認できます。
' vba
With Range("A1").FormatConditions.Add(Type:=xlCellValue, _
Operator:=xlBetween, _
Formula1:=1, Formula2:=5)
.Font.Color = RGB(200, 0, 0)
.Interior.Color = RGB(30, 30, 250)
End With
もし複数の書式を指定したい場合は、Withステートメントでまとめて設定することができます。色変更についはこちら。
複数の条件付き書式がひとつのセルにある場合、先に指定した(優先順位の高い)条件付き書式が反映されるのでご注意ください。
関連記事
平均より上とか以下とかはこちら。
Excel(エクセル):条件付き書式
Excelの条件付き書式は、読んで字のごとく「特定の条件を満たした時にだけ指定した書式を適用する」機能です。また、セルの内容をより視覚的に表現する機能もいくつか用意されています。
書式には罫線、フォント、文字色、背景色などが含まれ、十分に...
関数・演算子・メソッド・プロパティ名から探すExcel/VBA(マクロ)使い方・組み合わせ方まとめ
こちらはExcelやメソッドの諸機能を、機能の名称から探せるまとめ記事です。
やりたいことから方法を探すエクセル(Excel)操作・関数・VBA(マクロ)逆引きまとめ
逆引き(やりたいことから探す)Excel記事まとめ
コメント