「二次元配列 宣言 エクセル」
「excel vba 二次元配列 宣言」
「excel2010マクロ 2次元配列のredim宣言方法」
という検索で、このサイト・インストラクターのネタ帳へのアクセスが時折あることに気が付きました。
Excel VBA(Visual Basic for Applications)で、2次元配列の宣言をどう行えばいいのか、どう書けばいいのかを探している方による検索です。
2次元の配列変数の宣言に関係する、サンプルマクロをいくつかご紹介しておきます。
0からはじまる2次元配列を宣言するサンプルマクロ
まずは一番の基本である、要素数が事前に決まっている2次元配列の宣言です。
Dim arr(3, 5) As String
Stop
上記のマクロのとおり、
Dim arr(3, 5) As String
という書き方で、行・列ともインデックスが0から始まる、4行6列の、String型の2次元配列の宣言となります。
Option Baseを指定していない場合に、配列のインデックスが0はじまりなのは、1次元の配列変数と同じです。
上記のマクロを実行すると、Stop文の箇所でステップ実行モードになりますから、ステップ実行モードの状態で、メニュー[表示]-[ローカルウィンドウ]をクリックして、ローカルウィンドウを表示すると、下図のように4行6列の2次元配列が用意されていることが確認できます。
1からはじまる2次元配列を宣言するサンプルマクロ
配列のインデックスは0からはじまるのが基本ですが、特にExcelマクロの場合、インデックスの1から使うほうが便利なことが多いはずです。
その場合に、上記のように、
Dim arr(3, 5) As String
のように宣言して、インデックス0の要素を使わないという考え方もあるでしょうけれど、1はじまりだということを明示しておくほうが、可読性が上がるはずです。
そんなサンプルです。
Dim arr(1 To 3, 1 To 5) As String
Stop
上記のような、
Dim arr(1 To 3, 1 To 5) As String
という宣言で、行・列ともにインデックスが1からはじまる、3行5列の、String型の2次元配列が宣言できます。
1はじまりの1次元配列を宣言する場合、
Dim arr(1 to 3) As String
のような書き方をします。この括弧の中が次元数に合わせて増えたのが、
Dim arr(1 To 3, 1 To 5) As String
です。
0からはじまる動的2次元配列を宣言するサンプルマクロ
基本を理解していただくために、事前にサイズが決まっているケースからご紹介しましたが、実務上は、プロシージャの途中で配列のサイズを決めることが多いでしょう。
配列の要素数が、プロシージャの途中で決まる場合の動的な2次元配列の宣言は以下のとおりです。
Dim arr() As String
Dim r As Long
Dim c As Long
Stop
r = 3
c = 5
ReDim arr(r, c)
Stop
まず、
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が用意され、
2つめのStop文で下図のように0はじまりの4行6列の2次元配列になっていることをご確認ください。
1からはじまる動的2次元配列を宣言するサンプルマクロ
動的な2次元配列で、インデックスを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
このマクロのように、
ReDim arr(1 To r, 1 To c)
とReDim文を書いてあげれば、下図のように1はじまりの、動的2次元配列となります。
この記事を書くキッカケとなった、
「excel2010マクロ 2次元配列のredim宣言方法」
という検索をした方は、この、
ReDim arr(1 To r, 1 To c)
という書き方を調べていらしたのでしょうか。
バリアント型変数にセルの値を代入して2次元配列に
もう一つ、Excelならではの、2次元配列についてのサンプルです。
Dim arr As Variant
arr = Range("A1", "E3").Value
Stop
バリアント型で変数宣言をしておいて、
Dim arr As Variant
この変数にセル範囲の値を代入すると、
arr = Range("A1", "E3").Value
自動的に2次元配列になってしまいます。
ひとまとまりのセル範囲の値を2次元配列に代入する場合、このバリアント型の変数を宣言しておいて、いきなりセル範囲の値を代入することで、自動的に2次元配列にする方法が簡単でしょう。
Home » エクセルマクロ・Excel VBAの使い方 » 配列 » Excel VBAで2次元配列を宣言する