PC・モバイル公開日:2013年6月23日エクセルのマクロをすっきりさせるwithステートメントエクセルのマクロにおけるWithステートメントとは、オブジェクト名を省略するためにしばしば用いられます。Withステートメント自体は必須の文法ではなく、Withを使わないで記述しても構文的にエラーになることはありません。Withを使わない記述はコード量が増え読みにくく、変更時にも手間が掛かる欠点があります。Withで囲まれる区間において、「.」で始まる記述は、全てWithの後のオブジェクトのプロパティやメソッドとして扱われます。EXCELのVBAで最も有名なRangeオブジェクトを例にしてみましょう。Withこのマクロを実行すると、セルA1の値とセルA1のアドレスがメッセージボックスで表示されます。これをWithステートメント無しで書くと次のようになります。Range("A1").Addressむしろ行数が2行で済むので、こちらの方が良いのでは?と思うのも当然ですよね。極端にいえば、Withステートメントの間に書く行が100行だったらどうするでしょう?「Range("A1")」と100回書くのと、Withを使って1回書くのではどちらの手間が掛かるか一目瞭然ですよね。Range("A1")が、Range("B1")になった場合、Withを使わなければ全ての「A1」を「B1」に変えなくてはなりません。Range型の変数になったら...と、さまざまな変更に対して保守性を高めるのがWithステートメントを使用する理由です。WithステートメントのネストWithステートメントはネスト(入れ子)にすることもできます。次の例を見てみましょう。WithWithの中にWithがもう1回登場しています。Range("A1").Fontと同じ意味になりますので、Withステートメント無しで書くと次のようになります。TrueこれでもまだWithステートメントを使わない方が行数が少なくて済みます。withステートメントはマクロを見やすくしミスを減らしますしかし、気付いているでしょうか?Withを使ったときの方が、一行が短く済んでいますよね。階層の深いプロパティやメソッドを呼び出すときに、一行一行全てを記述していくのは非常に非効率ですし間違いも増えます。Withステートメントの使用は、日本語で主語を決めて話すのとよく似ています。「あなたの趣味は何で、あなたの好きな食べ物は何で、あなたの誕生日はいつですか?」と聞く人はあまりいませんし、くどいですよね。「あなたの」と一度いったら以降は「あなた」について聞いているのと誰もが想定します。同じように、Withステートメントを使うことで、すっきりとしたコーディングができるので積極的に利用していきましょう。