Home » エクセルマクロ・Excel VBAの使い方 » 配列 » Excel VBAで2次元配列を宣言する

Excel VBAで2次元配列を宣言する

対象:Excel2007, Excel2010, Excel2013

「二次元配列 宣言 エクセル」
「excel vba 二次元配列 宣言」
「excel2010マクロ 2次元配列のredim宣言方法」
という検索で、このサイト・インストラクターのネタ帳へのアクセスが時折あることに気が付きました。

Excel VBA(Visual Basic for Applications)で、2次元配列の宣言をどう行えばいいのか、どう書けばいいのかを探している方による検索です。

2次元の配列変数の宣言に関係する、サンプルマクロをいくつかご紹介しておきます。

[スポンサードリンク]

0からはじまる2次元配列を宣言するサンプルマクロ

まずは一番の基本である、要素数が事前に決まっている2次元配列の宣言です。

Sub 二次元配列の宣言_Dim_0から()

 Dim arr(3, 5) As String
 Stop

End Sub

上記のマクロのとおり、
 Dim arr(3, 5) As String
という書き方で、行・列ともインデックスが0から始まる、4行6列の、String型の2次元配列の宣言となります。

Option Baseを指定していない場合に、配列のインデックスが0はじまりなのは、1次元の配列変数と同じです。

上記のマクロを実行すると、Stop文の箇所でステップ実行モードになりますから、ステップ実行モードの状態で、メニュー[表示]-[ローカルウィンドウ]をクリックして、ローカルウィンドウを表示すると、下図のように4行6列の2次元配列が用意されていることが確認できます。

Excel VBAで2次元配列を宣言する

1からはじまる2次元配列を宣言するサンプルマクロ

配列のインデックスは0からはじまるのが基本ですが、特にExcelマクロの場合、インデックスの1から使うほうが便利なことが多いはずです。

その場合に、上記のように、
 Dim arr(3, 5) As String
のように宣言して、インデックス0の要素を使わないという考え方もあるでしょうけれど、1はじまりだということを明示しておくほうが、可読性が上がるはずです。

そんなサンプルです。

Sub 二次元配列の宣言_Dim_1から()

 Dim arr(1 To 3, 1 To 5) As String
 Stop

End Sub

上記のような、
 Dim arr(1 To 3, 1 To 5) As String
という宣言で、行・列ともにインデックスが1からはじまる、3行5列の、String型の2次元配列が宣言できます。

Excel VBAで2次元配列を宣言する

1はじまりの1次元配列を宣言する場合、
 Dim arr(1 to 3) As String
のような書き方をします。この括弧の中が次元数に合わせて増えたのが、
 Dim arr(1 To 3, 1 To 5) As String
です。

0からはじまる動的2次元配列を宣言するサンプルマクロ

基本を理解していただくために、事前にサイズが決まっているケースからご紹介しましたが、実務上は、プロシージャの途中で配列のサイズを決めることが多いでしょう。

配列の要素数が、プロシージャの途中で決まる場合の動的な2次元配列の宣言は以下のとおりです。

Sub 二次元配列の宣言_ReDim_0から()

 Dim arr() As String
 Dim r As Long
 Dim c As Long
 Stop

 r = 3
 c = 5
 ReDim arr(r, c)
 Stop

End Sub

まず、
 Dim arr() As String
のように、Dim文で、次元数も要素数もわからないけれどString型の配列変数・arrを宣言しておいてから、

プロシージャの途中で、
 ReDim arr(r, c)
と、ReDim文で要素数を決めます。

静的2次元配列の宣言、
 Dim arr(3, 5) As String
のときと同じように、
 ReDim arr(r, c)
の場合もインデックスは、0はじまりです。

上記のマクロを実行して、
1つ目のStop文の箇所で下図のように次元数も要素数も決まっていないString型の配列変数・arrが用意され、

Excel VBAで2次元配列を宣言する

2つめのStop文で下図のように0はじまりの4行6列の2次元配列になっていることをご確認ください。

Excel VBAで2次元配列を宣言する

1からはじまる動的2次元配列を宣言するサンプルマクロ

動的な2次元配列で、インデックスを1はじまりにする場合は以下のとおりです。

Sub 二次元配列の宣言_ReDim_1から()

 Dim arr() As String
 Dim r As Long
 Dim c As Long

 Stop

 r = 3
 c = 5
 ReDim arr(1 To r, 1 To c)
 Stop

End Sub

このマクロのように、
 ReDim arr(1 To r, 1 To c)
とReDim文を書いてあげれば、下図のように1はじまりの、動的2次元配列となります。

Excel VBAで2次元配列を宣言する

この記事を書くキッカケとなった、
「excel2010マクロ 2次元配列のredim宣言方法」
という検索をした方は、この、
 ReDim arr(1 To r, 1 To c)
という書き方を調べていらしたのでしょうか。

バリアント型変数にセルの値を代入して2次元配列に

もう一つ、Excelならではの、2次元配列についてのサンプルです。

Sub Variant型変数にセル範囲を格納すると二次元配列に()

 Dim arr As Variant

 arr = Range("A1", "E3").Value
 Stop

End Sub

バリアント型で変数宣言をしておいて、
 Dim arr As Variant

この変数にセル範囲の値を代入すると、
 arr = Range("A1", "E3").Value

自動的に2次元配列になってしまいます。

Excel VBAで2次元配列を宣言する

ひとまとまりのセル範囲の値を2次元配列に代入する場合、このバリアント型の変数を宣言しておいて、いきなりセル範囲の値を代入することで、自動的に2次元配列にする方法が簡単でしょう。

[スポンサードリンク]

Home » エクセルマクロ・Excel VBAの使い方 » 配列 » Excel VBAで2次元配列を宣言する

「配列」の記事一覧

検索


Copyright © インストラクターのネタ帳 All Rights Reserved.

.