Range.FormatCondition.Modifyメソッド
既に登録されている条件付き書式の編集を行うにはRangeオブジェクトの条件付き書式を管理するFormatConditionオブジェクトのModifyメソッドを使います。
条件付き書式の設定を行うAddメソッドについては「VBAで条件付き書式を追加する」を参照ください。
Modifyメソッドは「条件付き書式ルールの管理」ダイアログの「ルールの編集」ボタンに該当します。
Modifyメソッドには戻り値はなく、メソッド実行後はFormatConditionsコレクションの登録内容が編集された状態になります。上の画像でのModifyメソッドはFormatConditions(1)から(3)が編集対象になります。
あとは必要があれば書式の設定をFormatConditionオブジェクト(コードではFormatConditions(x)と書くことも可能)のFontプロパティ(文字設定)、Interiorプロパティ(背景色)、Borderプロパティ(罫線)などの設定を行います。ここの書き方はAddメソッドと同じです。
構文
Modifyメソッドの引数はAddメソッドと似ていますが若干異なります。
1 |
Sub Range.FormatCondition.Modify(Type As XlFormatConditionType, [Operator As XLFormatConditionOperator], [Formula1], [Formula2], [String], [Operator2 As XlContainsOperator]) |
構文では引数OperatorとOperator2にはそれぞれ列挙型を書いていますが、実際の定義上では型は未定義です。便宜上付けています。
Microsoftのヘルプには引数は4つしか書かれていませんが実際には6つあります。以下では6つの引数について説明します。
https://msdn.microsoft.com/ja-jp/vba/excel-vba/articles/formatcondition-modify-method-excel
Type | 条件付き書式の種類をXlFormatConditionType列挙型の定数で指定します。
|
|||||||||||||||||||||||||||||||||||||||||||||
Operator | 条件付き書式の演算子をXLFormatConditionOperator列挙型の定数で指定します。引数TypeがxlExpressionの場合は無視されます。省略可能です。
|
|||||||||||||||||||||||||||||||||||||||||||||
Formula1 | 条件の値となる数値、文字列、セル参照、数式を設定します。省略可能です。 | |||||||||||||||||||||||||||||||||||||||||||||
Formula2 | 引数OperatorがxlBetween(範囲内)、または、xlNotBetween(範囲外)の場合に引数Formula1に対応する値を設定します。省略可能です。 | |||||||||||||||||||||||||||||||||||||||||||||
String | 引数TypeでxlTextString(文字列)を指定した場合に対象となる文字列を指定します。この場合は引数Formula1と引数Formula2は無視されます。省略可能です。 | |||||||||||||||||||||||||||||||||||||||||||||
Operator2 | 引数TypeでxlTextString(文字列)を指定した場合に引数Stringの判定方法をXlContainsOperator列挙型で指定します。省略可能です。
|
サンプルコード
条件付き書式を設定し、その後編集するサンプルです。引数Operator2を使うコードを見たことがないので書いてみました。
まず、A列とB列で文字列”aaa”を含んでいる場合に書式を設定する条件付き書式を設定します。これはAddメソッドでの処理になります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
Sub FormatCollectionsAddStringTest() Dim r As Range Dim f As FormatCondition '// 対象範囲指定 Set r = Range("A:A") '// 条件付き書式の追加(セルにaaaが含まれる場合) Set f = r.FormatConditions.Add(Type:=xlTextString, String:="aaa", TextOperator:=xlContains) '// フォント太字、文字色、背景色 f.Font.Bold = True f.Font.Color = RGB(20, 140, 150) f.Interior.Color = RGB(200, 250, 180) f.Borders.LineStyle = xlContinuous End Sub |
上のコードを実行後に文字列を入力するとこのようになります。
次に、文字列”aaa”を含まない、という条件に変更します。
1 2 3 4 5 6 7 8 9 10 |
Sub FormatCollectionModifyStringTest() Dim r As Range Dim f As FormatCondition '// 対象範囲指定 Set r = Range("A:B") '// 条件付き書式の編集(★セルにaaaが含まれない場合、に編集) Call r.FormatConditions(1).Modify(Type:=xlTextString, Operator2:=xlDoesNotContain) End Sub |
コードを実行するとこのようになります。”aaa”を含まない、という条件になるため書式が反転します。
シート内の条件付き書式の一部を修正するサンプルコード
以下のサンプルはシートに含まれる全ての条件付き書式を見て、それぞれの設定内容を見た上で、編集対象とみなした場合のみ編集するコードです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
Sub FormatCollectionsModifyTest() Dim r As Range Dim f As FormatCondition '// 全セル範囲指定 Set r = Cells '// 全ての条件付き書式をループ For Each f In r.FormatConditions '// セル値が1の場合の条件付き書式の場合 If (f.Type = xlCellValue And f.Formula1 = 1) Then '// 条件付き書式のセルの値を1から2に変更 Call f.Modify(Type:=xlCellValue, Operator:=xlEqual, Formula1:=2) End If Next End Sub |