配列のサイズを調べる
ついに 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 とすると一見いけそうですが、これではうまくいかない様子。