「2次元配列 excel for each next 形式」
という検索で、このサイト・インストラクターのネタ帳がありました。
Excel VBA(Visual Basic for Applications)で2次元配列をFor Each~Nextループで処理するには、どのようなコードを書けばいいのかを探している方による検索でしょうか。
どのアプリケーションソフトでの話かわかりませんが、
「2次元配列 for えあch」
という検索も同じようなコードを探していらしたのでしょうか。
2次元配列をFor Each~Nextループで処理するサンプルマクロ
参考になりそうな簡単なマクロをご紹介しておきます。
Dim itm As Variant
Dim arr(1 To 2, 1 To 3) As String
arr(1, 1) = "い"
arr(1, 2) = "ろ"
arr(1, 3) = "は"
arr(2, 1) = "松"
arr(2, 2) = "竹"
arr(2, 3) = "梅"
For Each itm In arr()
MsgBox itm
Next itm
上記のマクロを実行すると、
い・松・ろ・竹・は・梅
の順で、メッセージボックスが表示されます。
For Each~Nextループで各要素を受ける変数はVariant
For Each~Nextループで個々の要素を受け取る変数は、
Dim itm As Variant
のようにVariant型で宣言しなければならないのがポイントです。
上記のマクロの場合、
Dim arr(1 To 2, 1 To 3) As String
とString型の配列変数ですから、
Dim itm As String
でも良さそうに思えるかもしれませんが、これではダメです。あくまでもVariantです。
1次元配列をFor Each~Nextループで処理する場合と同じです。
表示される順序を制御したい
上記のマクロは、
い・松・ろ・竹・は・梅
の順で、メッセージボックスが表示されますが、これを、
い・ろ・は・松・竹・梅
の順に表示させたいと考える方もいらっしゃるでしょう。
For Each~Nextループの場合、
arr(1, 1) = "い"
arr(1, 2) = "ろ"
arr(1, 3) = "は"
arr(2, 1) = "松"
arr(2, 2) = "竹"
arr(2, 3) = "梅"
という配列変数ならば、必ず、
い・松・ろ・竹・は・梅
と表示されてしまいます。
表示順序を制御したいのなら、オブジェクト変数を使うFor Each~Nextループではなく、カウンター変数を使ったFor~Nextループにしましょう。
For Each~Nextループで表示される順序を制御したいのなら...
どうしてもFor Each~Nextループを使って、
い・ろ・は・松・竹・梅
という順序で表示させたいのならば、配列変数にデータを格納する順序を変えましょう。
以下のようにデータを入れておけば、
い・ろ・は・松・竹・梅
の順になります。For Each~Nextループでも。
arr(2, 1) = "ろ"
arr(3, 1) = "は"
arr(1, 2) = "松"
arr(2, 2) = "竹"
arr(3, 2) = "梅"
先のマクロでは、
arr(1, 1) = "い"
arr(1, 2) = "ろ"
arr(1, 3) = "は"
arr(2, 1) = "松"
arr(2, 2) = "竹"
arr(2, 3) = "梅"
と、第1次元の昇順→第2次元の昇順という順序でデータを格納していましたが、
arr(1, 1) = "い"
arr(2, 1) = "ろ"
arr(3, 1) = "は"
arr(1, 2) = "松"
arr(2, 2) = "竹"
arr(3, 2) = "梅"
と、第2次元の昇順→第1次元の昇順という順序でデータを格納しておけばFor Each~Nextループでも、
い・ろ・は・松・竹・梅
の順にデータを取得することができるようになります。
Home » エクセルマクロ・Excel VBAの使い方 » 配列 » 2次元配列をFor Each~Nextループで