配列の()?コレクションの()?関数の()?

VBでは、配列、コレクション、プロシージャも同じ記号の()を使う。ややこしいですね。他の言語では配列は[ ]を使う。

VBAの()の使い方3つ。

  1. 配列変数(要素番号)
  2. コレクション(名前またはインデックス番号) Range
  3. プロシージャ名(引数1,引数2)

ここでは、とりあえず2番目のRangeを説明します。

まず、XXXX(??, ??,??)とカッコを付けると戻り値がある。つまり、変数名=XXXX(??, ??,??)やDebug.Print XXXX(??, ??,??)( Debug.Print の出力が値)ができる。配列も関数も同じような書き方をする。イミディエイトで?とする場合は、戻り値を期待しているので()がいる。「変数=」の右辺に書く場合も変数に代入したいのだから()がいる。

ExcelのオブジェクトであるRange(“A1”)()のカッコは、配列ように見えるがItemの省略。Item関数は感覚的には配列のように考えればいい。以下は、イミディエイトウィンドウで、?はPrintのこと。?から始まる行は入力。次の行は出力結果。

set kk=range("a1:b2")
?vba.TypeName(kk)
Range
?kk(1)
A1
?kk(2)
B1
?kk(3)
A2
?vba.TypeName(range("a1:b2"))
Range
?range("a1:b2").Item(1)=range("a1:b2")(1)
True
?range("a2:b3")(1)
A2

配列でもオブジェクトでも関数でも()のカッコは、戻り値を受け取るためと理解すればいい。最もよく使うのがコレクションの中の一つを取り出すために使う()。

(Visited 178 times, 1 visits today)
カテゴリー: 3 習熟のためにイミディエイウィンドウを使う パーマリンク

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です