サイト内検索

VBA基礎 基本

VBAコードの可読性を上げるWith

VBAコードの可読性、高速化、コーディング効率を向上させるWithステートメントの使い方を分かりやすいサンプルコードで解説します。

VBAコードの可読性を上げる方法の一つとして、適切なコメント文の使用があります。 適切なコメント文をVBAコードの中に書き入れることで、時間が経過した後でもすぐに内容を理解できますし、ほかの人がコードを理解するのを助けます。コメント文については、過去の記事で取り上げていますので、参考にしてください。

VBAコードの可読性を上げる方法は、適切なコメント文以外にもいろいろとありますが、今回は同じコードを繰り返し書くのを避けるという考え方です。

同じコードを繰り返し書くことは、コーディングが非効率になりますし、見る側も同じ内容を繰り返し読むことに労力を使います。可能な限り、すっきりと読みやすいコードにすることを心掛けたいですね。

そこで、この繰り返し書くのを避ける方法の1つに今回紹介する「With」の使用があります。

「With」は、VBAコートを繰り返し書かないようにするための便利なコードです。使用頻度が高く、きれいなコードを書くには必須です。

では早速ですが、今回もサンプルファイルを使いながら解説をしますので、以下のファイルを準備しておいてください。

では、まずSample028プロシージャを、「With」を使う前と後で比較した図を紹介しますね。

Withを使う場合と使わない場合の比較のためのVBAコードサンプル
Withを使わない場合(左)とWithを使う場合(右)

図の左側は「With」を使う前、右側は「With」を使った後です。ここで右側の赤枠は、「With」を使ったことで書き加えられた箇所です。一方、赤△は「With」を使ったことで変数「wstADep」が取り除かれた箇所です。

ちなみに上の「With」をつける前と後を示した2つのVBAコードの実行結果は同じです。つまり、「With」の有り無しは、実行結果に影響しないということです。では、「With」をつけると何が変わるのかについてお話ししますね。

ちょっとコードを拡大して説明を入れてみました。

Withの使い方をやさしく説明
With ~ End With

上記VBAコードは「With」を使った場合です。「With」を使ったことで取り除かれた4箇所の「wstADep」は、「With ~ End With」の範囲の中にありますよね。

また一番上の行の「With」の横にはオブジェクト変数「wstADep」が書かれています。このとき、オブジェクト変数「wstADep」は、「With ~ End With」までの範囲の中では、その記述を省略(図中グレーアウト部分)できます。

また「With」で囲まれた範囲の中では、「.」を打つだけで「wstADep」であることが認識されます。よって、VBAコードを書く際に「.」を打つだけで、下図のように「wstADep」に関するプロパティやメソッドの候補が表示されますので、コードの記述が効率よくなります。

With使用による入力アシスト説明
With ~ End Withの範囲で「.」を打った状態

このように、「With ~ End With」でオブジェクトをまとめると、その範囲での繰り返し記述の量が減り、可読性も良くなり、コーディングの効率も上がるというメリットがあり、使用頻度も非常に高いです。

わたしも実務でVBAコードを書くときは、必ずと言っていいほど「With」を使います。

サンプルファイルに収めてあるもう1つのプロシージャ(Sample030)についても考え方は同じですので、ここでご紹介したSample028の「With」の使い方をまねしてVBAコードを実際に書き換えてみてください。

まとめ

今回は、VBAコードのWith文について解説しました。長いコードを書くようになると、繰り返し記述する回数が多くなる箇所が出てきます。そんな時は特に今回ご紹介した「With」を使うことで、すっきりした可読性のよいコードになります。

(ちなみにコードの繰り返し記述を大幅に減らす方法としては、VBAコードのサブルーチン化、ユーザ定義関数化があります。)

また、Withを使う事で同じコードを繰り返し書く人の手間も減りますが、実はコンピュータ側自身も実行回数が減ることにより、結果的に実行時間の高速化にもなります。

なお、「With」はネスティング(入れ子状態)で使うこともできます。頻度としては少ないのですが、下記記事でその例を見ることができますので、宜しければご参考ください。

Tips:Withを入れ子で使うサンプルコード
VBAコードで集計データを別シートに帳票形式で集計させる
VBAコードで対象レコードとは別シートに集計させる

[スポンサーリンク]



サイト内検索

-VBA基礎, 基本
-

Copyright© 集計用VBAサンプルコードをやさしく学ぼう , 2020 All Rights Reserved.