配列のサイズを調べる

ついに VBA にも手をつけてしまいました。と、言っても仕事では以前から使っていますが、ますますなんでも屋の様相を呈してまいりました、という事で。

それにしても Excel2007 が異常に使いにくくて仕方がありません。新しいインターフェースに慣れれば解決する問題だとは思うのですが、10年近く使っていたアプリがいきなり大幅に変わるとさすがに面倒。

さて、VBA で配列を扱う場合、C や Java に比較的近い形で指定します。このとき、サイズも動的に指定できます。

Dim num As Integer ' 通常の変数
Dim numArray(10) As Integer ' Integer 型の配列
Dim numArray() As Integer ' Integer 型の動的配列

' Preserve を使うと値を保存しつつサイズを指定/変更できる
ReDim Preserve numArray(10)

ここで、動的にサイズを指定した配列にループを使う場合、ほとんどのケースでは For Each を使うのが便利なのですが、配列のインデックスが問題になる事もあると思います。そんな場合 UBound を使います。

Dim i As Integer ' ループカウンタ
Dim numBuf As Integer ' 数値格納用

For i = 0 To UBound(numArray)
    ' ある要素が条件を満たす時、そのインデックスを取得
    If numArray(i) > 5 Then
        numBuf = i
    End If
Next

numArray.Length とすると一見いけそうですが、これではうまくいかない様子。