• ベストアンサー

VBAのFor Eachのセル読み込み順番について。

こんにちは。 VBAのFor Eachのexcelセル読み込み順番について お伺いします。 for each MjObj in range("A1:D10") ********** next とした場合にセルはA1を先頭に左から右列へ、 上から下行へと順次読み込まれますが、 この順番を変更することは出来るのでしょうか。 また、運用で誤って変更される可能は あるでしょうか。 以上、2点お伺い致します。 宜しくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.4

こんにちは。 私は、For Each ~ In を別の使い方を考えるのは、もう少し、勉強なさったほうがよいと思います。通常は、Cells(x,y) のx,y 値をそのまま行数・列数だけインクリメントするだけです。 Sub OrthodoxPrc() Dim rng As Range Dim x As Long '列 Dim y As Long '行 Dim a As Variant Set rng = Range("A1:D10") For y = 1 To rng.Columns.Count  For x = 1 To rng.Rows.Count  a = Cells(x, y).Value  'a = rng.Cells(x, y).Value ''こちらの方がベター  Next Next End Sub ただし、かなりイレギュラーな使い方ですが、配列を使った以下のような方法があります。いくつかのテクニックは、全体の理解が上がってから使ったほうがよいと思います。 Sub TestArray() Dim rngValue As Variant  '配列の確保 Dim v As Variant rngValue = Range("A1:D10").Value For Each v In rngValue    '処理 Next End Sub >運用で誤って変更される可能はあるでしょうか。 ここでいう運用の意味がはっきりとは分りませんが、他の設定で影響されるかという意味だするなら、それは、ありません。そのようなオプションは存在しません。

i_september
質問者

お礼

有難う御座います。 配列Range("A1:D10").Valueは 意外な使い方があるものですね。

その他の回答 (3)

  • taocat
  • ベストアンサー率61% (191/310)
回答No.3

こんばんは。 無理やり順番を変えるとしたらFor Eachをあとひとつ入れ子にして。 -------------------------------------------- Sub test()  Dim Cnt As Long  Dim Rng1 As Range  Dim Rng2 As Range  For Each Rng1 In Range("A1:D10").Columns    For Each Rng2 In Rng1.Cells      Cnt = Cnt + 1      Rng2.Value = Cnt    Next Rng2  Next Rng1 End Sub ------------------------------------------- 上記は実行してみれば分かると思いますが 読み込む順番は、A1->A10->B1->B10->C1->C10・・・となりセルA1:D10にその順番が入ります。 また質問のような場合でその読み込み順が関係あるときは、For Eachはちょと使いにくいので、も少しVBAに慣れてから使った方がいいかもしれません。 以上です。

i_september
質問者

お礼

ご回答有難う御座います。 Range("A1:D10").Columnsは 面白いですね。

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.2

For Each で処理されるのはセルのIndex値の順番と思います。 A1->B1->C1->・・・IV1 A2->b2->・・・ Sub test01() For i = 1 To 300 Cells(i) = i Next i End Sub これはエクセルの深いところの決め事だと思いますので、できないと思います。 やるならプログラムFor Eachにしないで Cells(i,J)を使えばどのようにでもできます。 Sub test02() x = Array(1, 3, 5) y = Array(3, 2, 4) For i = 0 To UBound(x) Cells(x(i), y(i)) = i Next i End Sub c1に0、B3に1、D5に2をこの順序でセットできます。Array の中を変えれば自由自在です。

i_september
質問者

お礼

ご回答有難う御座います。 Arrayの使い方は大変勉強になりました。

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

変更することはできないと思いますが、 for eachを使う場合、そういう順番に依存するような使い方をすべきではありません。 順番が重要になる場合は cells(x,y)みたいな感じで、x,yをforなどで(明示的に)制御してすべきだと思います。

i_september
質問者

お礼

ご回答有難う御座います。 参考にさせて頂きます。