つらつら Excel VBA

私の備忘録です。

For Eachの処理順番

順番は保証されてない模様。以下、確認用コード。

Set セル範囲 = Range("A1:E2")

For Each v In セル範囲
    Debug.Print v
Next

二次元配列 = セル範囲

For Each d In 二次元配列
    Debug.Print d
Next


テスト表

ABCDE
112345
2678910


実行結果
セル範囲の出力結果 1,2,3,4,5,6,7,8,9,10
二次元配列の出力結果 1,6,2,7,3,8,4,9,5,10


For Eachでセル範囲と配列をブン回してみると、セル範囲は行単位で処理され、配列は列単位で処理されている。ここでは細かい挙動の確認は行わない。扱うものによって処理順番が変わることだけ分かればヨシ。


処理される順番が変わるのが嫌ならば、以下の様に組めばガチガチ安心。

Dim i As Long, j As Long
For i = LBound(二次元配列, 1) To UBound(二次元配列, 1)
    For j = LBound(二次元配列, 2) To UBound(二次元配列, 2)
        Debug.Print 二次元配列(i, j)
    Next
Next

以上。