VBAの配列で2次元配列を使用する方法
ExcelのVBAでプログラミングをする時に2次元配列を使用する機会は多いのではないでしょうか。
しかしプログラミング経験が少ない方にとっては理解しにくい変数です。
ただ使用できるようになると、プログラミングでできることの幅がかなり増えます。
2次元配列の宣言方法
Dim arrList(7,1) As String
Dim 配列名(列数,項目数) As データ型
私は配列を宣言する時によく列数と項目数の指定を間違えてしまいます。
As以降でデータ型を指定することで配列全体のデータ型を一度に指定することができます。
項目ごとにデータ型を分ける方法
変数のデータ型宣言をする時に「Variant」型で宣言をします。
Variant型はデータ格納時にデータ型が自動で決まります。
配列の要素に文字列を格納するとString型の要素になり、数値を格納するとInteger型やDouble型など数値のデータ型になります。
2次元配列を使ったVBAのサンプル
Sub ボタン1_Click() Dim i As Integer Dim arrlist() As Variant Dim MaxRow As Integer MaxRow = Cells(1, 1).End(xlDown).Row ReDim arrlist(MaxRow, 1) For i = 0 To MaxRow - 1 arrlist(i, 0) = ThisWorkbook.Worksheets("Sheet1").Cells(i + 1, 1).Value arrlist(i, 1) = ThisWorkbook.Worksheets("Sheet1").Cells(i + 1, 2).Value Next For i = 0 To MaxRow - 1 MsgBox arrlist(i, 0) & " : " & arrlist(i, 1) Next End Sub
VBAの解説
MaxRow = Cells(1, 1).End(xlDown).Row
変数MaxRowにExcelの最終行を格納します。
最終行の取得については以前紹介していますので、詳細はこちらの記事を確認してください。
ReDim arrlist(MaxRow, 1)
配列を再定義します。
列数には取得したExcelの行数をセットし、行数にはデータ行数が2行なので1をセットします。
For i = 0 To MaxRow - 1 arrlist(i, 0) = ThisWorkbook.Worksheets("Sheet1").Cells(i + 1, 1).Value arrlist(i, 1) = ThisWorkbook.Worksheets("Sheet1").Cells(i + 1, 2).Value Next
Excelの最終行まで繰り返し処理をしています。
配列の列数は動的にするため、変数「i」を使用しています。
配列の最初の行にはの「都道府県」、次の行には「県庁所在地」を格納しています。
For i = 0 To MaxRow - 1 MsgBox arrlist(i, 0) & " : " & arrlist(i, 1) Next
再度Excelの列数だけ繰り返し処理をしています。
「都道府県 : 県庁所在地」の形式でExcelの列数分メッセージボックスに出力をしています。
配列の上限値と下限値を確認する方法
配列の上限値を取得するのは「UBound」、下限値を取得するのは「LBound」を使用します。
2次元配列でこの関数を使用すると、列数の上限値や下限値を戻り値として取得できます。
UBoundとLBoundの使い方ですが、引数に配列を渡します。
MsgBox LBound(arrlist) MsgBox UBound(arrlist)
上記のサンプルでは戻り値をメッセージボックスに表示していますが、変数に格納することもできます。
最後に
いかがだったでしょうか。
本日はExcelのVBAで二次元配列を使用する方法を紹介しました。
私がプログラムを始めたばかりの頃、配列がなかなか理解できずにとても苦労しました。
ただプログラムを続けていく上では避けては通れないほどよく使われます。
配列が苦手な人はぜひこの記事を参考にしてみてください。