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

こんばんは。
いつも勉強させてもらっています。
ご教授ください。

セル範囲A1:B3に適当な値を入れ
下記のコードを実行してみました。

-----------------------------------------------
Sub Test()

  Dim Rng As Range
  Dim myRange As Range

  Set myRange = Range("A1").CurrentRegion
    For Each Rng In myRange
      Debug.Print "Collection: " & Rng.Value
    Next Rng


  Dim Ary
  Dim myArray
  
  myArray = Range("A1").CurrentRegion.Value
    For Each Ary In myArray
      Debug.Print "Array: " & Ary
    Next Ary

End Sub
-----------------------------------------------

その結果、

Collectionの場合は、 A1>B1 >A2>B2 >A3>B3

Arrayの場合は、   A1>A2>A3 >B1>B2>B3

の順で呼び出されました。
なぜこのような違いがでるのか分かりません。
教えてください。
宜しくお願いします。
  

A 回答 (2件)

StudyVBA 様、こんばんは。



私は、そのどちらも、VBAのきまりのようなものだから、そう覚えるしかないのではないか、と思っています。

たぶん、データの格納の仕方だと思いますが、実際、配列の場合、For Each ~ In で使うというのは、1次元以外では、滅多に使わないのではないでしょうか?今回のような二次元の多段階配列では、確実に、For i ~ To * で、押さえていかないと、何がなんだかわからなくなってしまいます。

それ以外では、配列の形を崩さないままで、ワークシート上に貼り付けをしてしまうか、どちらかですね。

それから、今回のような最初のデータは、たぶん、Rangeオブジェクトには違いないと思います。Collection のサンプルを作りました。1次元に格納されます。

Sub Test2()
 Dim Rng As Range
 Dim myRange As Range
 Dim MyCollection As Collection
 Dim i As Long
 Set MyCollection = New Collection
 Set myRange = Range("A1").CurrentRegion
 i = 1
 For Each Rng In myRange
  MyCollection.Add Rng.Value
  Debug.Print MyCollection(i)
  i = i + 1
 Next Rng
End Sub

何の回答にもなっていませんね。すみません。
    • good
    • 0
この回答へのお礼

こんにちは。
Wendy02さん、いつも丁寧、かつ的を射た回答ありがとうございます。
それにサンプルまで。

やはり質問の件は仕様なのでしょうね。Wendy02さんもそう思われるということですので安心しました。

また、
>For Each ~ In で使うというのは、1次元以外では、滅多に使わないのではないでしょうか?今回のような二次元の多段階配列では、確実に、For i ~ To * で、押さえていかないと、何がなんだかわからなくなってしまいます。

これは仰るとおりだと思います。
ただ今回の件はたまたまFor Eachのヘルプを見てまして、今までは専らCollectionでしか使ったことありませんでしたので、配列ではどうなるかと試したところ結果が違いましたので質問させていただきました。

それから今朝、今度は二次元配列を宣言し、値をコードでセットし、それをFor Eachで試したところ結果は同じでした。
For Eachで配列を呼び出すと次元の高い方から呼び出される、ということが分かっただけで収穫でした。

Wendy02さん、またアホウな質問をするとは思いますが今まで同様、宜しくお願いいたします。
今回も貴重な時間を割いて頂きありがとうございました。
 

お礼日時:2005/05/03 12:23

訂正します。


>たぶん、Rangeオブジェクトには違いないと思います。
オブジェクト・コレクション(Object Collection)と呼ぶそうですね。失礼しました。訂正しておきます。
    • good
    • 0
この回答へのお礼

わざわさ、ありがとうございます。
これからも宜しくお願いいたします。

お礼日時:2005/05/03 12:24

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