Home » エクセルマクロ・Excel VBAの使い方 » 配列 » 2次元配列をFor Each~Nextループで

2次元配列をFor Each~Nextループで

対象:Excel2007, Excel2010, Excel2013, Windows版Excel2016

「2次元配列 excel for each next 形式」
という検索で、このサイト・インストラクターのネタ帳がありました。

Excel VBA(Visual Basic for Applications)で2次元配列をFor Each~Nextループで処理するには、どのようなコードを書けばいいのかを探している方による検索でしょうか。

どのアプリケーションソフトでの話かわかりませんが、
「2次元配列 for えあch」
という検索も同じようなコードを探していらしたのでしょうか。

[スポンサードリンク]

2次元配列をFor Each~Nextループで処理するサンプルマクロ

参考になりそうな簡単なマクロをご紹介しておきます。

Sub 二次元配列をForEach_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

End Sub

上記のマクロを実行すると、
  い・松・ろ・竹・は・梅
の順で、メッセージボックスが表示されます。

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ループでも。

 Dim arr(1 To 3, 1 To 2) As String

 arr(1, 1) = "い"
 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ループで

「配列」の記事一覧

検索


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

.