対象:Excel2007, Excel2010, Excel2013, Windows版Excel2016
セル範囲の値を簡単に2次元配列にできることは、ある程度Excel VBAを使っている方ならご存知のはずです。
この2次元配列にした場合と、セル範囲直接の場合で、For Each~Nextループを回したときに処理する順番が異なることをご存知ない方もいらっしゃるようですので、記事にしておきます。
上図のように
A1:C1セルに「い」「ろ」「は」
A2:C2セルに「松」「竹」「梅」
と入力しておいて確認してみましょう。
[スポンサードリンク]
RangeオブジェクトをFor Each~Nextループで処理するサンプルマクロ
以下のSubプロシージャを実行すると、「い」「ろ」「は」「松」「竹」「梅」
の順番にメッセージが表示されます。
Sub ForEachの順序_Rangeオブジェクト()
Dim rng As Range
For Each rng In Range("A1:C2")
MsgBox rng.Value
Next rng
End Sub
Dim rng As Range
For Each rng In Range("A1:C2")
MsgBox rng.Value
Next rng
End Sub
アルファベットの「z」を書くのと同じような順番に処理されるということです。
Variant型変数に代入して作られた2次配列元をFor Each~Nextループで処理するサンプルマクロ
これに対して以下のSubプロシージャを実行すると、
「い」「松」「ろ」「竹」「は」「梅」
の順番にメッセージが表示されます。
Sub ForEachの順序_二次元配列の場合()
Dim arr As Variant
Dim itm As Variant arr = Range("A1:C2").Value
For Each itm In arr
MsgBox itm
Next itm
End Sub
Dim arr As Variant
Dim itm As Variant arr = Range("A1:C2").Value
For Each itm In arr
MsgBox itm
Next itm
End Sub
こちらは、小文字の「m」を書くのと同じような順番にメッセージが表示されます。
[スポンサードリンク]
Home » エクセルマクロ・Excel VBAの使い方 » 配列 » Rangeと2次元配列のFor Each~Nextループの順番