EXCEL VBA 配列のIndex番号書きかわり
こんばんは。
EXCEL VBA で困っております。
シートから配列にコピーさせると、ReDimで設定してあったIndex番号が
なぜか替ってしまうらしいのです。
いろいろと検索してみましたが、どうしても見つからず、ここで質問させていただくことにしました。
下記のコードで確認してみてください。
Sub test()
Dim A As Variant
ReDim A(1 To 1, 0 To 4)
For j = 0 To 4
A(1, j) = j
Next j
Range("A1:E1") = A
MsgBox A(1, 0) 'ちゃんと機能して(1, 0)の位置で[0]と表示
'MsgBox A(1, 5) '←インデックスが有効範囲にありません
A = Range("A1:E1")
Range("A2:E2") = A
'MsgBox A(1, 0) 'さっき機能したのに今度はエラー
MsgBox A(1, 1) '(1, 1)はセルでは2列目の[2]が取得されない
MsgBox A(1, 5) 'さっきエラーになった(1, 5)は今度はエラーにならない
End Sub
なぜ、A(1 to 1, 0 to 4) が A(1 to 1, 1 to 5) と替ってしまうのか?
シート範囲全体をいっぺんに配列に格納するとこういうことが起こるのが仕様なのか??
自分の推測では、配列は[0]から始めることができますが、
シート上では[0]という開始位置を認識できないため、
Variant変数型のなかで自動的に書き換えちゃってくれてるのかな?
なんて思ったりしました。
理由がわかる方、おりましたらご教授くださいませ。
また、どうしても、この2次元配列で、
てっとり早いこのコピーコードを使いセル範囲から配列へコピーさせて、
列方向へのIndexを (0 to 4)とさせたいのですが、
何かよい方法はありますでしょうか??
For文やEach文でひとつずつセルから配列へ格納という方法もあるかもしれませんが、
実際に打ち込んでいるコードは、行列ともかなり範囲が広いために、
処理時間を気にしてしまいます。
そこそこ使い慣れてきたのに、よもやこんなところで、躓くの!?といった心境です。
ご指南のほど、どうぞよろしくお願いいたします。
お礼
ありがとうございます。 実は私の手元に2007はなく 知人でこの現象が起こったので 私が確認することが困難なのです・・・ おっしゃるとおり確認できたらよいのですが・・・ でも微妙に変わることがわかったので もう少し調べてみます。 ありがとうございます。