- ベストアンサー
CollectionとArrayの呼び出し順
- CollectionとArrayの呼び出し順について質問です。
- 実行結果を見ると、Collectionの場合とArrayの場合で呼び出し順が異なることが分かります。
- なぜこのような違いが生じるのか教えていただけませんか?
- みんなの回答 (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 何の回答にもなっていませんね。すみません。
その他の回答 (1)
- Wendy02
- ベストアンサー率57% (3570/6232)
訂正します。 >たぶん、Rangeオブジェクトには違いないと思います。 オブジェクト・コレクション(Object Collection)と呼ぶそうですね。失礼しました。訂正しておきます。
お礼
わざわさ、ありがとうございます。 これからも宜しくお願いいたします。
お礼
こんにちは。 Wendy02さん、いつも丁寧、かつ的を射た回答ありがとうございます。 それにサンプルまで。 やはり質問の件は仕様なのでしょうね。Wendy02さんもそう思われるということですので安心しました。 また、 >For Each ~ In で使うというのは、1次元以外では、滅多に使わないのではないでしょうか?今回のような二次元の多段階配列では、確実に、For i ~ To * で、押さえていかないと、何がなんだかわからなくなってしまいます。 これは仰るとおりだと思います。 ただ今回の件はたまたまFor Eachのヘルプを見てまして、今までは専らCollectionでしか使ったことありませんでしたので、配列ではどうなるかと試したところ結果が違いましたので質問させていただきました。 それから今朝、今度は二次元配列を宣言し、値をコードでセットし、それをFor Eachで試したところ結果は同じでした。 For Eachで配列を呼び出すと次元の高い方から呼び出される、ということが分かっただけで収穫でした。 Wendy02さん、またアホウな質問をするとは思いますが今まで同様、宜しくお願いいたします。 今回も貴重な時間を割いて頂きありがとうございました。