Delete対象はFormatConditionsとFormatConditionの2つがある
条件付き書式の削除には2つの方法があります。
1つは指定セル範囲の条件付き書式を全て削除する方法です。これはFormatConditionsコレクションのDeleteメソッドを利用します。ルール全削除です。
もう1つは指定セル範囲の条件付き書式のルールの中で削除するルールを指定して削除する方法です。これはFormatConditionオブジェクトのDeleteメソッドを利用します。ルールの一部削除です。
FormatConditionsコレクションとFormatConditionオブジェクト、sの有無だけですが違いがあります。以下に詳細を説明します。
指定セル範囲のルール全削除(FormatConditions.Delete)
上で書いた通りですが、指定セル範囲の条件付き書式を削除するには、FormatConditionsコレクションのDeleteメソッドを利用します。
構文
1 |
Sub Range.FormatConditions.Delete() |
実行後は以下のように指定セル範囲のルールが全て削除されます。
このFormatConditions.Deleteメソッドに該当するExcel操作はありません。
一部ルールの削除(FormatCondition.Delete)
条件付き書式のルールの削除を行うにはRangeオブジェクトの条件付き書式を管理するFormatConditionオブジェクトのDeleteメソッドを使います。
構文
1 |
Sub Range.FormatCondition.Delete() |
実際のコードでは以下のような書き方になります。
1 |
Range("A1").FormatConditions(2).Delete |
FormatConditions(2)はFormatConditionオブジェクトを返すため、そのDeleteメソッドは指定ルールの削除になります。
Deleteメソッドは「条件付き書式ルールの管理」ダイアログの「ルールの削除」ボタンに該当します。
一部削除するとFormatConditionsコレクションのインデックスがズレる
FormatCondition.Deleteメソッド実行後はFormatConditionsコレクションの数が減るためインデックスも変わります。
以下のようなルールが設定されている場合があるとします。
そこで、2番目を削除します。
1 |
FormatConditions(2).Delete |
すると、2番目のルールが削除され、以下のようになります。見た目上は2番目がコードの通りに削除されています。
ところがFormatConditionsコレクションを見ると、2番目を削除すると元の3番と4番が、2番と3番にズレていることが分かります。
削除前
削除後
単に削除するだけであれば問題はありませんが、登録と削除を組み合わせる場合にはどのインデックスが削除対象なのかを把握しておく必要があります。
FormatConditionsコレクションのインデックスは「条件付き書式ルールの管理」ダイアログ上の順番になります。
ダイアログ上での登録順ではありません。順番を入れ替えてなければ登録の逆順になります。
なお、「条件付き書式ルールの管理」ダイアログでルールを追加した場合も、VBAでFormatConditions.Addメソッドを使ってルールを追加した場合のどちらもダイアログの先頭に登録されます。
このように、新規ルールを追加すると、その追加されたルールはインデックス1番として登録され、元々登録されていたルールは2番以降に押しやられます。
削除の際にはその点を考慮する必要があります。
サンプルコード
シートの全ての条件付き書式を削除
シートの条件付き書式を全て削除する場合はセル全てを対象として削除します。
1 |
Cells.FormatConditions.Delete |
指定セル範囲の条件付き書式を削除
A列とB列の条件付き書式を削除するサンプルです。
1 |
Range("A:B").FormatConditions.Delete |
指定セル範囲の条件付き書式を一部削除
7行目は条件付き書式のルールの管理ダイアログ上の2番目を削除するコードです。
それ以降は各ルールを1つずつ削除するコードです。「Range(“A1”).FormatConditions.Delete」と書くのと同じ結果になります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
Sub FormatCollectionsDeleteTest() Dim r As Range Dim f As FormatCondition Set r = Range("A1") '// 2番目を削除 r.FormatConditions(2).Delete '// 全て削除 For Each f In r.FormatConditions f.Delete Next End Sub |