Withステートメントの構造とその読み方
最後に、マクロ記録で頻出する「Withステートメント」について紹介しましょう。
早速、Withステートメントのサンプルをご覧下さい。このサンプルは、セルのフォントを変更する操作を記録した場合のVBAプログラムです。
Withステートメントは、「With」で始まり、「End With」で終了します。Withの直後にはオブジェクトを表すキーワードが記述され、WithとEnd Withの間には、そのオブジェクトに対する操作内容(プロパティの設定やメソッドの実行など)が記述されます。
ポイントは、「1つのオブジェクト」に対する「複数の操作」がまとめて記述されている、という点です。「With」の後に記述されているオブジェクトが「1つのオブジェクト」で、「With」と「EndWith」の間に複数の「操作」が記述されている、というわけです。
「操作」を表すキーワードの行頭に記述されている「.(ピリオド)」は、「1つのオブジェクト」につながっていることを表しています。これは、プロパティの構文で紹介した「オブジェクト.プロパティ=値」での「.(ピリオド)」と同じものです。
ということは、Withステートメントは、下図のように書き換えることができます。Withステートメントと比較すると、繰り返し記述されるべきオブジェクト名が、WithステートメントではWithの直後にだけ記述されていることがわかりますね。
したがって、Withステートメントを読むときは、Withの直後のオブジェクトを操作の主体として補いながら、EndWithまでの間の操作内容を読み解きます。
詳しく読み解いてみましょう。オブジェクトの部分の「Selectionプロパティ」は現在選択されているセルを指し、そのセルに入力されているフォント(Fontオブジェクト)を「Fontプロパティ」で取得しています。操作の対象であるFontオブジェクトについて、「セル→フォント」と階層をたどった形で記述されているのがわかりますね。そして、「Nameプロパティ」には、変更した後のフォントの名前が記述されています。
ところで、WithとEnd Withの間に記述されている内容は、全て対象セルのフォントに対する操作ですが、よく読むと、実際に操作していない項目ばかり。このように、マクロ記録では、全ての設定項目について記述される場合があります。操作していない内容については、現状の設定状況が記述されます。
こういった記述内容は、目的の操作と関係がないので削除できます。むしろ、VBAプログラムが冗長になるだけなので削除した方が良いでしょう。Withステートメントの構造を考えると、次のように書き換えることが可能です。プロパティの値を設定する、シンプルなステートメントになりました。こういった書き換えも、Withステートメントが読めることで可能になります。
「マクロ基本構文と読み方(プロパティとメソッド)」と今回の内容で、マクロ記録で作成されたVBAプログラムを読み解く準備がほぼ完了しました。あとは、ヘルプを活用しながら、様々なプロパティ、メソッドの意味を調べていくだけです。
「エクセルのマクロ編集(編集の重要ポイント)」では、読み解いたVBAプログラムを整形する方法について詳しく紹介します。こちらも合わせてご覧ください。