順番は保証されてない模様。以下、確認用コード。
Set セル範囲 = Range("A1:E2") For Each v In セル範囲 Debug.Print v Next 二次元配列 = セル範囲 For Each d In 二次元配列 Debug.Print d Next
テスト表
\ | A | B | C | D | E |
---|---|---|---|---|---|
1 | 1 | 2 | 3 | 4 | 5 |
2 | 6 | 7 | 8 | 9 | 10 |
実行結果
セル範囲の出力結果 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
以上。