関数は自分で作る

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

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

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

モバイルバージョンを終了