COMオブジェクト・モジュール表記にてオブジェクト・モジュール名を省略して書くことができます。省略したオブジェクト・モジュールを使用するには、.(ピリオド)以降を記述します。
- 構文
- WITH 省略部
.変数.関数名( )ENDWITH
- 引数
- 戻り値
WITH文とは
プログラムを書いていると一つのオブジェクトに対して複数の処理を行うことがあります。そのようなときWITH文を使うとオブジェクトを省略して書くことができます。
WITH文内では.(ピリオド)から始めたものはオブジェクト名を省略したことになります。
WITH文の使い方
例えば以下のようにExcelでセルA1に対して複数の処理を記述したとき、Excel.Range("A1")というのが何度も出てくることになります。
この共通しているオブジェクトExcel.Range("A1")をWITH直後に書くことで、WITH内では省略することができ簡潔に書くことができるようになります。
WITH文の入れ子
WITH文は入れ子にして使うこともできます。以下のようにWITH文の中で共通するオブジェクトがある場合、WITH文の中にさらにWITH文を書く(入れ子にする)ことで簡潔に表すことができます。
.オブジェクト2をWITH文の省略部に出すことで、以下のように記述することができます。
以下はWITH文の使い方でWITH文を使う例として書きましたが、WITH文の中に.Fontが何度も出てきてます。この場合は、WITH文を入れ子にすることで更にオブジェクトを省略することができます。
以下はWITH文を入れ子にした書き方です。
以下のプログラムはWITH文の省略部の括り方の違いによる比較です。行われる処理はセルA1、B1への代入、フォントの変更で全部同じです。
Excelオブジェクト、セルA1とセルB1、Fontで括った書き方。
Range("B1") をRange("A1")から行方向に0、列方向に+1のセルと考えれば、Range("A1").Offset(0 ,1)に書き換えることができます。
Excel.Range("B1")をExcel.Range("A1").Offset(0, 1)に書き換え、Excel.Range("A1")で括った書き方。
Font、Offsetも括ると以下のようになります。
ここまでしてWITH文で括るとさすがに見づらいですが、一応こういう書き方もできるんだなって参考程度にしてください。今回のプログラムの場合、以下のようにExcelオブジェクトとRangeオブジェクトを括るまでが限界かなって思います。WITH文を入れ子にし過ぎるくらいなら敢えて括らない方が良いと思います。WITHの入れ子もやって2つまでかなと。3個以上はやり過ぎな気がします。
Offset使ってセルA1に統一するなら、入れ子し過ぎなければまだ見やすいし理解もしやすい気がする。
モジュールでの使い方
自作のmathモジュールでmathを省略部に書く例。
WITH内で省略した変数・関数を使うにはドット以降から書き始めます。
WITH文を使わずに書いた場合。
WITH文を使って書いた場合。
