[VBA] 動的配列 ReDim ステートメントで要素数を確定します

動的配列 (ReDim ステートメントで要素数を確定します)

 今回は 動的配列と ReDim ステートメント について解説します。タイトルクリエーターで作成した架空書籍の「表題」「著者」「出版社」の一覧表を使って説明します。

「沖縄の大王」 嵩原勝伍 大和出版協会
「不死の鉄塔」 浜阪貴佑 大和書房
「異国読み書き」 斧渕咲樹 ハスキー
「隠されたジャズ」 平出将誉 ブックフォレスト
「苦悩する都市」 山辺吉亘 大和図書館協会

 データを用意するのが面倒な人は表をコピーしてセル B2 に張り付けてくださいな。

 Excel ユーザーが項目を追加する可能性のあるリスト

 このデータを次のような要素の配列として取り込んでみます。

mybook (1, 1) mybook (1, 2) mybook (1, 3)
mybook (2, 1) mybook (2, 2) mybook (2, 3)
mybook (3, 1) mybook (3, 2) mybook (3, 3)
mybook (4, 1) mybook (4, 2) mybook (4, 3)
mybook (5, 1) mybook (5, 2) mybook (5, 3)

 ただし、リストはユーザーさんが新たな項目を付け加えて、行数については変更されることも想定してコードを書きます。そのような場合に 動的配列 を使用するのです。

 Option Base 1

 '書籍データを配列に入れるマクロです

 Sub BookList()

 'mybook を文字列型データを格納する配列として宣言します
 Dim mybook() As String
 Dim rc As Long, lc As Long, i As Long

 'リストの最終行をカウントします
 rc = ActiveSheet.Rows.Count
 lc = Cells(rc, 2).End(xlUp).Row

 '配列の要素数を確定します
 ReDim mybook(lc, 3)

 For i = 1 To lc

  mybook(i, 1) = Cells(i, 2).Value
  mybook(i, 2) = Cells(i, 3).Value
  mybook(i, 3) = Cells(i, 4).Value

 Next i

 For i = 1 To lc

  Debug.Print mybook(i, 1), mybook(i, 2), mybook(i, 3)

 Next i

 End Sub

 BookList マクロを実行すると

 「沖縄の大王」    嵩原勝伍   大和出版協会
 「不死の鉄塔」    浜阪貴佑   大和書房
 「異国読み書き」   斧渕咲樹   ハスキー
 「隠されたジャズ」  平出将誉   ブックフォレスト
 「苦悩する都市」   山辺吉亘   大和図書館協会

というように、ワークシートの表と同じ並びで表示されます。
 

次元と要素数を確定しないで配列を宣言します

 このマクロでは mybook(y, x) という 2 次元配列を用いるのですが、

Dim mybook() As String

というコードでは mybook を「文字列型の入る変数です」とだけ宣言し、この段階では次元数も要素数も決められていません。そして

lc = Cells(rc, 2).End(xlUp).Row

によって、リストの最終行の行番号 lc を得てから、

ReDim mybook(lc, 3)

によって次元数を 2 , それぞれの次元について要素数を lc , 3 とした配列を定めています。冒頭で用意した表を使えば lc には 5 が入りますが、表に項目を追加すれば lc の値は増えていきます。そのあと繰り返し処理によってこの 2 次元配列にセルのデータを格納しています。

 ≫ VBA 辞典メニューに戻って他の記事も読んでくださいな~♪

スポンサードリンク
末尾大型広告
末尾大型広告

コメントをどうぞ

メールアドレスが公開されることはありません。

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください