回答編集履歴

3

補足の追加

2018/01/30 02:08

投稿

hatena19
hatena19

スコア33722

test CHANGED
@@ -62,6 +62,10 @@
62
62
 
63
63
  ```
64
64
 
65
+ ---
66
+
67
+ **補足**
68
+
65
69
  配列に代入した値をコピーするには、コピー先のValueに代入します。
66
70
 
67
71
  ```vba
@@ -75,3 +79,23 @@
75
79
  Range("A11:D15").Value = testRange
76
80
 
77
81
  ```
82
+
83
+ 上記のコードを下記のように記述しても同じ結果になります。
84
+
85
+ ```vba
86
+
87
+ Dim testRange As Variant
88
+
89
+ testRange = Range("A1:D5")
90
+
91
+
92
+
93
+ Range("A11:D15") = testRange
94
+
95
+ ```
96
+
97
+ 既定のプロパティとしての `.Value` が自動的に使用されているのですが、
98
+
99
+ 値の退避という目的を明確にするには、省略しない書き方のほうがいいでしょう。
100
+
101
+ また、`Dim testRange As Variant` は、バリアント変数の中に、バリアント配列が格納されるという2重構造になりますので、`Dim testRange() As Variant` と直接バリアント配列に格納したほうが無駄がないでしょう。

2

コードのコメント修正

2018/01/30 02:08

投稿

hatena19
hatena19

スコア33722

test CHANGED
@@ -52,7 +52,7 @@
52
52
 
53
53
  Range("A1") = "!"
54
54
 
55
- '手でシートのA1のコンテンツを削除します
55
+ 'シートのA1のコンテンツを編集
56
56
 
57
57
  Debug.Print "2", testRange(1, 1)
58
58
 

1

説明の修正、追加

2018/01/30 00:28

投稿

hatena19
hatena19

スコア33722

test CHANGED
@@ -1,4 +1,4 @@
1
- Variant型では、Rangeとして代入されますので、Rangeとして宣言した場合と同じ結果になります。
1
+ Variant型にSetすると、Rangeとして参照されますので、Rangeとして宣言した場合と同じ結果になります。
2
2
 
3
3
 
4
4
 
@@ -30,7 +30,7 @@
30
30
 
31
31
 
32
32
 
33
- 値を配列に格納するには、Variant の動的配列に代入します。
33
+ 値を配列に格納するには、Value を Variantの動的配列に代入します。
34
34
 
35
35
 
36
36
 
@@ -61,3 +61,17 @@
61
61
  End Sub
62
62
 
63
63
  ```
64
+
65
+ 配列に代入した値をコピーするには、コピー先のValueに代入します。
66
+
67
+ ```vba
68
+
69
+ Dim testRange() As Variant
70
+
71
+ testRange = Range("A1:D5").Value
72
+
73
+
74
+
75
+ Range("A11:D15").Value = testRange
76
+
77
+ ```