Variant型にSetすると、Rangeとして参照されますので、Rangeとして宣言した場合と同じ結果になります。
vba
1Public Sub test1()
2 Dim testRange As Variant
3 Range("A1") = "a"
4 Set testRange = Range("A1:A2")
5 Debug.Print "1", testRange.Cells(1, 1)
6 'ここではもちろん"a"が出力。
7
8 Range("A1") = "!" 'A1のコンテンツを編集
9 Debug.Print "2", testRange.Cells(1, 1)
10 'ここでは"!"が出力。
11End Sub
値を配列に格納するには、Value を Variantの動的配列に代入します。
vba
1Public Sub test2()
2 Dim testRange() As Variant
3 Range("A1") = "a"
4 testRange = Range("A1:A2").Value
5 Debug.Print "1", testRange(1, 1)
6 'ここではもちろん"a"が出力。
7
8 Range("A1") = "!"
9 'シートのA1のコンテンツを編集。
10 Debug.Print "2", testRange(1, 1)
11 'ここでは"a"が出力。
12End Sub
補足
配列に代入した値をコピーするには、コピー先のValueに代入します。
vba
1 Dim testRange() As Variant
2 testRange = Range("A1:D5").Value
3
4 Range("A11:D15").Value = testRange
上記のコードを下記のように記述しても同じ結果になります。
vba
1 Dim testRange As Variant
2 testRange = Range("A1:D5")
3
4 Range("A11:D15") = testRange
既定のプロパティとしての .Value
が自動的に使用されているのですが、
値の退避という目的を明確にするには、省略しない書き方のほうがいいでしょう。
また、Dim testRange As Variant
は、バリアント変数の中に、バリアント配列が格納されるという2重構造になりますので、Dim testRange() As Variant
と直接バリアント配列に格納したほうが無駄がないでしょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/01/29 08:27
2018/01/29 10:15
2018/01/30 01:34
2018/01/30 01:44