セルのスタイルの削除を行うDeleteメソッド
Excelのスタイルはブック単位に登録されており、自分で追加するスタイルも同様です。
それらのスタイルを削除する場合はStylesコレクションに削除したいスタイル名を指定し、Deleteメソッドを使います。
存在しないスタイル名をDeleteした場合は「実行時エラー’9′: インデックスが有効範囲にありません。」のエラーになります。
なお、Excelに最初から登録されているスタイルのうち「標準(英字ではNormal)」スタイルだけは削除できません。削除しようとすると「実行時エラー’1004′: StyleクラスのDeleteメソッドが失敗しました。」のエラーになります。
構文
1 2 3 4 5 |
'// スタイル名指定時 Function Workbook.Styles(Name).Delete() '// Index指定時 Function Workbook.Styles(Index).Delete() |
Workbook | スタイルを削除するブックを指定します。通常はActiveWorkbookを指定することが多いと思います。 |
Styles | WorkbookオブジェクトのプロパティであるStylesコレクションを指定します。 |
Name | <スタイル名指定時>
削除するスタイルの名前を文字列で「Styles(“test”)」のように指定します。 |
Index | <Index指定時>
削除するスタイルのIDを指定します。通常は分からないため使うことはまずないと思われます。 |
戻り値 | 内部処理形式がBooleanのVariant型を返します。Deleteに成功した場合はTrueを返します。失敗した場合は実行時エラー’1004’になりますが、On Error Resume Nextなどのエラー対応をしている場合はEmptyが返却されます。よって、Falseになることはありません。 |
サンプルコード
独自スタイルを追加し、そのスタイルを文字列指定で削除する方法と、Index指定で削除するサンプルを紹介します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
Sub StyleDeleteTest() On Error Resume Next Dim i Dim s '// スタイル追加 Call ActiveWorkbook.Styles.Add(Name:="aaaa") '// スタイル名を指定して削除 Call ActiveWorkbook.Styles("aaaa").Delete '// Indexを指定して全スタイル削除 For i = ActiveWorkbook.Styles.Count To 1 Step -1 s = ActiveWorkbook.Styles(i).Delete Next End Sub |
コード説明
単純なコードなのでコメントの通りなのですが、14行目のループが逆順になっています。
これはDeleteメソッドとは直接関係はありませんが、配列やコレクションの削除処理の場合は逆順から行った方がよいでしょう。
理由は、削除が発生するとコレクションのIndexが削除した以降が1ずつ減ってずれるためで、ループカウンタと一致しなくなります。それを回避するために逆順にしています。