〜Withステートメント構文の効果を調べる〜#29Withステートメント構文の効果を調べる結論Withステートメントを使うと、オブジェクトに対する複数のプロパティ設定やメソッド呼び出しが高速化されるが、実用的には大差ない程度である。コーディング(記法)としてのメリットの方が高いかもしれない。Withステートメントは、ある同じオブジェクトに対する一連のステートメントを実行ための、フロー制御ステートメントです。構文の中に、プロパティを割り当てるステートメントやメソッドを指定します。この方法を使えば、各プロパティやメソッドの前にオブジェクト名を指定する必要はありません。最初のWithステートメントの行で1度だけ指定してやればよいのです。次のような一連のコードがあったとします。500txtData.Requeryこれらはいずれも、"txtData"というオブジェクトに対して、プロパティ設定とメソッドを実行しています。これをWithステートメントを使って書き換えると次のようになります。Withコードの行数は若干増えますが、ずいぶんスッキリした感じになると思いませんか?。個人的には、もっぱら、「今どのオブジェクトに対してプロパティを設定しているのか、メソッドを実行しているのかといったことが判別しやすいように」という目的で使っています。同じコード(ここでは"txtData"というオブジェクト名)を何回も繰り返し記述しなくてよいというのも、しばしば使う理由です。書籍等では、このWithステートメントにはパフォーマンスを向上させる効果があると書かれているものもあります。そこで、プログラムを見たときの違いは一目瞭然だと思いますが、ここではその処理速度が実際どの程度違うのか、比較してみたいと思います。今回は、フォームを使って、そこに配置されたテキストボックスに対して複数のプロパティ設定を実行するというテストを行ってみます。コマンドボタンは2つ用意されていて、それぞれのボタンをクリックすると、Withステートメントを使わない処理、Withステートメントを使った処理を実行します。コードの記述が異なるだけで、やっていることはまったく同じものです。測定された処理時間も、フォームの別のテキストボックスに表示します。2つのコマンドボタンそれぞれのイベントプロシージャは、次のようになっています。Sub実行結果は次のようになりました。結果的に、明らかにWithステートメントを使った方が速いことが分かります。1000回ものループを実行した結果ですので、実用的には大差ないといっていいでしょう。コードがスッキリするその部分のコードがどのオブジェクトを対象に処理しているのか分かりやすいオブジェクト名を繰り返し記述する必要がないといったコーディング(記法)上のメリットだけでも、Withステートメントを使う価値は十分にあると考えます。それでかつ、多少なりとも速いということであれば、一石二鳥ではないでしょうか。