|
kawataさん、こんにちは
>ReDim bbb(1 to UBound(aaa), 1 to 1)
>及び
>Option Base 1
>とする理由
ですが、詳細はお調べいただくこととして、簡単に解説を・・
配列は特に指定しないと、添字が「0」から始まります。
ReDim bbb(UBound(aaa), 1) としてUBound(aaa)が 20 だった場合は
bbb(0,0)からbbb(20,1)までの器ができることになります。
一方、エクセルの範囲を配列を宣言せずに使用して格納する場合、変数(1,1)から格納されます。
kawataさんのコードではaaa(1,1)〜aaa(20,1)に格納されることになります。
コードから、bbbも、bbb(1,1)〜bbb(20,1)に値が格納されています。
これをセル範囲に書き戻す場合、添字を指定せずに、一括書き込みする場合、
(.Value = bbb のような指定)一番低い次元から書き込みされます。
この場合は、bbb(0,0)〜bbb(19,0)が書き戻されることになりますのでなにも表示されなくなります。
>ReDim bbb(1 to UBound(aaa), 1 to 1)
または
>Option Base 1
とすることにより、bbbのベースを1とする(bbb(1,1)からbbb(20,1)を作成)ことによりコードの矛盾を回避できます。
ちなみに、下記のコードを実行すると感覚がつかめるかも・・
Sub test2()
Dim aaa() As Variant
Dim bbb() As Variant
With Sheets("sheet1").Range("a1:a20")
aaa = .Value
ReDim bbb(UBound(aaa), 1)
For i = 1 To UBound(aaa)
bbb(i, 1) = "済" & aaa(i, 1)
Next
Sheets("sheet1").Range("a1:b20").Value = bbb
End With
End Sub
|
|