VBAコードの可読性、高速化、コーディング効率を向上させるWithステートメントの使い方を分かりやすいサンプルコードで解説します。
VBAコードの可読性を上げる方法の一つとして、適切なコメント文の使用があります。 適切なコメント文をVBAコードの中に書き入れることで、時間が経過した後でもすぐに内容を理解できますし、ほかの人がコードを理解するのを助けます。コメント文については、過去の記事で取り上げていますので、参考にしてください。
VBAコードの可読性を上げる方法は、適切なコメント文以外にもいろいろとありますが、今回は同じコードを繰り返し書くのを避けるという考え方です。
同じコードを繰り返し書くことは、コーディングが非効率になりますし、見る側も同じ内容を繰り返し読むことに労力を使います。可能な限り、すっきりと読みやすいコードにすることを心掛けたいですね。
そこで、この繰り返し書くのを避ける方法の1つに今回紹介する「With」の使用があります。
「With」は、VBAコートを繰り返し書かないようにするための便利なコードです。使用頻度が高く、きれいなコードを書くには必須です。
では早速ですが、今回もサンプルファイルを使いながら解説をしますので、以下のファイルを準備しておいてください。
では、まずSample028プロシージャを、「With」を使う前と後で比較した図を紹介しますね。
図の左側は「With」を使う前、右側は「With」を使った後です。ここで右側の赤枠は、「With」を使ったことで書き加えられた箇所です。一方、赤△は「With」を使ったことで変数「wstADep」が取り除かれた箇所です。
ちなみに上の「With」をつける前と後を示した2つのVBAコードの実行結果は同じです。つまり、「With」の有り無しは、実行結果に影響しないということです。では、「With」をつけると何が変わるのかについてお話ししますね。
ちょっとコードを拡大して説明を入れてみました。
上記VBAコードは「With」を使った場合です。「With」を使ったことで取り除かれた4箇所の「wstADep」は、「With ~ End With」の範囲の中にありますよね。
また一番上の行の「With」の横にはオブジェクト変数「wstADep」が書かれています。このとき、オブジェクト変数「wstADep」は、「With ~ End With」までの範囲の中では、その記述を省略(図中グレーアウト部分)できます。
また「With」で囲まれた範囲の中では、「.」を打つだけで「wstADep」であることが認識されます。よって、VBAコードを書く際に「.」を打つだけで、下図のように「wstADep」に関するプロパティやメソッドの候補が表示されますので、コードの記述が効率よくなります。
このように、「With ~ End With」でオブジェクトをまとめると、その範囲での繰り返し記述の量が減り、可読性も良くなり、コーディングの効率も上がるというメリットがあり、使用頻度も非常に高いです。
わたしも実務でVBAコードを書くときは、必ずと言っていいほど「With」を使います。
サンプルファイルに収めてあるもう1つのプロシージャ(Sample030)についても考え方は同じですので、ここでご紹介したSample028の「With」の使い方をまねしてVBAコードを実際に書き換えてみてください。
まとめ
今回は、VBAコードのWith文について解説しました。長いコードを書くようになると、繰り返し記述する回数が多くなる箇所が出てきます。そんな時は特に今回ご紹介した「With」を使うことで、すっきりした可読性のよいコードになります。
(ちなみにコードの繰り返し記述を大幅に減らす方法としては、VBAコードのサブルーチン化、ユーザ定義関数化があります。)
また、Withを使う事で同じコードを繰り返し書く人の手間も減りますが、実はコンピュータ側自身も実行回数が減ることにより、結果的に実行時間の高速化にもなります。
なお、「With」はネスティング(入れ子状態)で使うこともできます。頻度としては少ないのですが、下記記事でその例を見ることができますので、宜しければご参考ください。
Tips:Withを入れ子で使うサンプルコード
VBAコードで集計データを別シートに帳票形式で集計させる
VBAコードで対象レコードとは別シートに集計させる