![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
こんばんは。
いつも勉強させてもらっています。
ご教授ください。
セル範囲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
の順で呼び出されました。
なぜこのような違いがでるのか分かりません。
教えてください。
宜しくお願いします。
No.1ベストアンサー
- 回答日時:
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
何の回答にもなっていませんね。すみません。
こんにちは。
Wendy02さん、いつも丁寧、かつ的を射た回答ありがとうございます。
それにサンプルまで。
やはり質問の件は仕様なのでしょうね。Wendy02さんもそう思われるということですので安心しました。
また、
>For Each ~ In で使うというのは、1次元以外では、滅多に使わないのではないでしょうか?今回のような二次元の多段階配列では、確実に、For i ~ To * で、押さえていかないと、何がなんだかわからなくなってしまいます。
これは仰るとおりだと思います。
ただ今回の件はたまたまFor Eachのヘルプを見てまして、今までは専らCollectionでしか使ったことありませんでしたので、配列ではどうなるかと試したところ結果が違いましたので質問させていただきました。
それから今朝、今度は二次元配列を宣言し、値をコードでセットし、それをFor Eachで試したところ結果は同じでした。
For Eachで配列を呼び出すと次元の高い方から呼び出される、ということが分かっただけで収穫でした。
Wendy02さん、またアホウな質問をするとは思いますが今まで同様、宜しくお願いいたします。
今回も貴重な時間を割いて頂きありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) ExcelVBAに関する質問 3 2023/02/17 10:47
- Visual Basic(VBA) このVBAでExcelアプリケーションを作成は必要ですか? 3 2023/07/19 21:13
- Visual Basic(VBA) 【VBA】写真の貼り付けコードがうまく機能しません。 5 2022/09/01 18:43
- Excel(エクセル) VBA 1 2023/04/27 13:37
- Excel(エクセル) vbaで列幅について 1 2022/11/15 08:31
- Excel(エクセル) vba シート名の一覧を2列に分けるには 5 2023/04/24 08:56
- Visual Basic(VBA) Excel vbaについての質問 3 2023/04/18 16:14
- Visual Basic(VBA) 【VBAエラー】Nextに対するForがありません 対策について 5 2022/11/21 21:26
- Visual Basic(VBA) エクセルVBAのコードで質問です。 下のコードはJ16の文字列をB3を起点とする範囲から探して、見つ 5 2023/04/07 11:07
- Visual Basic(VBA) 前回ご教授いただいたコードに覚えたてのループ処理で品名りんごAから順に20回for nextでループ 7 2023/01/13 22:01
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
delete[]と、delete演算子の明...
-
[VB6/VBA] Variant型配列リテラ...
-
CollectionとArrayの呼び出し順
-
六角形のマスの作り方
-
CreateFile、CloseHandleの繰り...
-
JavaScriptでPhotoshopのアクシ...
-
for each for in
-
VBA ステータスバー DoEvents
-
Javascript 全角カナ+半角スペ...
-
毎日明け方4時にCGIを動かすJav...
-
VBSを学ぶ前に、、、
-
VBA SORT Applyでエラー
-
NNのonloadでは
-
confirm()をはい/いいえ に切...
-
if(1){...}とはどういうことで...
-
JavaScriptでIEのウィンドウを...
-
エクセル 半角英数6文字以上 ...
-
デザイン時のVisible=Falseは実...
-
エクセルVBA/ Formatで文字列が...
-
javascriptからサーバサイドの...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excel vba 配列内の最大値を求...
-
VBA 多次元配列のクイックソー...
-
delete[]と、delete演算子の明...
-
どんなオブジェクトでも表示で...
-
VBA セル範囲をVariant変数に代入
-
VB2008で数字の桁数を調べる...
-
JSPの処理の途中で、JavaScript...
-
Vba SelStart、SelLen教えてく...
-
VB.NET2003 テキストボックスに...
-
「終了していない文字列型の定...
-
JavaScriptで ブラウザの閉じる...
-
ASP(VBS) ←→ JavaScript の変数...
-
正整数の半角数字かどうか判定する
-
VBAによる第3、4水準文字の判定...
-
デザイン時のVisible=Falseは実...
-
フォルダを自動で開く
-
初心者です。gulpでコンパイル...
-
if(1){...}とはどういうことで...
-
gas 全角数字を半角数字に変換
-
javascript:void(0)とは何でし...
おすすめ情報