dポイントプレゼントキャンペーン実施中!

こんにちは。
VBAのFor Eachのexcelセル読み込み順番について
お伺いします。

for each MjObj in range("A1:D10")
**********
next

とした場合にセルはA1を先頭に左から右列へ、
上から下行へと順次読み込まれますが、
この順番を変更することは出来るのでしょうか。

また、運用で誤って変更される可能は
あるでしょうか。

以上、2点お伺い致します。
宜しくお願い致します。

A 回答 (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


>運用で誤って変更される可能はあるでしょうか。

ここでいう運用の意味がはっきりとは分りませんが、他の設定で影響されるかという意味だするなら、それは、ありません。そのようなオプションは存在しません。
    • good
    • 0
この回答へのお礼

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

お礼日時:2005/11/22 17:23

こんばんは。



無理やり順番を変えるとしたら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に慣れてから使った方がいいかもしれません。
以上です。
    • good
    • 0
この回答へのお礼

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

お礼日時:2005/11/22 17:14

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 の中を変えれば自由自在です。
    • good
    • 0
この回答へのお礼

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

お礼日時:2005/11/22 16:59

変更することはできないと思いますが、


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

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

お礼日時:2005/11/22 16:56

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!