Excel VBAの配列について、よく忘れるのでまとめてみました!
配列の宣言
宣言は()をつけることで行います。
Dim arr() As String
よくある言語と違うどころは、[]でなく()で行うことです。
配列数の初期化
配列の初期化は「ReDim」で行います。
コレをすることで、配列要素数を設定します。
ReDim arr(num)
例えば0~5の配列を作る場合は
ReDim arr(5) ' [0]~[5]
のようにします。
ぼくはてっきり1から始まると思っていたらハマりました……
そして「5個」作られると思ったので、更にハマった……
この場合の配列の最終番号「4」を想定していたら、「5」だったので……
代入
代入は
arr(1) = "text"
で行います。
配列へのアクセスも、宣言同様()で行います。
値の取得
値の取得も
val = arr(1)
のように行います。
同じく()で配列要素へアクセスです!
配列サイズ・配列インデックス
VBAは「配列サイズ」という要素がありません。
他の言語でよく使う「length」という要素ですね。
そのかわりに、先頭と最終のインデックス番号が取得できます。
LBound(arr) ' 先頭インデックス UBound(arr) ' 最終インデックス
コレを使うと、配列を全て処理することもできます。
For ii = LBound(arr) To UBound(arr) ' 処理 Next ii
最終行を知る
配列とは関係ないですが、この1文で列の最終行を知ることができます。
ActiveSheet.Cells(Rows.Count, 1).End(xlUp).row
コレを使ってループすると……
配列に対象列の情報を一気に詰めることができます!
Dim ii, row As Integer Dim arr() As String ReDim varName(dataNum - 1) For row = 1 To ActiveSheet.Cells(Rows.Count, 1).End(xlUp).row arr(ii) = Cells(row, 1).Value ii = ii + 1 Next row
参考
こちらを参考にしました。
ありがとうございました!
あとがき
配列をシート内の一覧と絡めて使う場合、ループカウンタとrow(行)/col(列)を併用すると、いいと思います!
なんか大概なんとかなる気がします。