質問するログイン新規登録

回答編集履歴

3

補足の追加

2018/01/30 02:08

投稿

hatena19
hatena19

スコア34367

answer CHANGED
@@ -30,10 +30,22 @@
30
30
  'ここでは"a"が出力。
31
31
  End Sub
32
32
  ```
33
+ ---
34
+ **補足**
33
35
  配列に代入した値をコピーするには、コピー先のValueに代入します。
34
36
  ```vba
35
37
  Dim testRange() As Variant
36
38
  testRange = Range("A1:D5").Value
37
39
 
38
40
  Range("A11:D15").Value = testRange
39
- ```
41
+ ```
42
+ 上記のコードを下記のように記述しても同じ結果になります。
43
+ ```vba
44
+ Dim testRange As Variant
45
+ testRange = Range("A1:D5")
46
+
47
+ Range("A11:D15") = testRange
48
+ ```
49
+ 既定のプロパティとしての `.Value` が自動的に使用されているのですが、
50
+ 値の退避という目的を明確にするには、省略しない書き方のほうがいいでしょう。
51
+ また、`Dim testRange As Variant` は、バリアント変数の中に、バリアント配列が格納されるという2重構造になりますので、`Dim testRange() As Variant` と直接バリアント配列に格納したほうが無駄がないでしょう。

2

コードのコメント修正

2018/01/30 02:08

投稿

hatena19
hatena19

スコア34367

answer CHANGED
@@ -25,7 +25,7 @@
25
25
  'ここではもちろん"a"が出力。
26
26
 
27
27
  Range("A1") = "!"
28
- '手でシートのA1のコンテンツを削除します
28
+ 'シートのA1のコンテンツを編集
29
29
  Debug.Print "2", testRange(1, 1)
30
30
  'ここでは"a"が出力。
31
31
  End Sub

1

説明の修正、追加

2018/01/30 00:28

投稿

hatena19
hatena19

スコア34367

answer CHANGED
@@ -1,4 +1,4 @@
1
- Variant型では、Rangeとして代入されますので、Rangeとして宣言した場合と同じ結果になります。
1
+ Variant型にSetすると、Rangeとして参照されますので、Rangeとして宣言した場合と同じ結果になります。
2
2
 
3
3
  ```vba
4
4
  Public Sub test1()
@@ -14,7 +14,7 @@
14
14
  End Sub
15
15
  ```
16
16
 
17
- 値を配列に格納するには、Variant の動的配列に代入します。
17
+ 値を配列に格納するには、Value を Variantの動的配列に代入します。
18
18
 
19
19
  ```vba
20
20
  Public Sub test2()
@@ -29,4 +29,11 @@
29
29
  Debug.Print "2", testRange(1, 1)
30
30
  'ここでは"a"が出力。
31
31
  End Sub
32
+ ```
33
+ 配列に代入した値をコピーするには、コピー先のValueに代入します。
34
+ ```vba
35
+ Dim testRange() As Variant
36
+ testRange = Range("A1:D5").Value
37
+
38
+ Range("A11:D15").Value = testRange
32
39
  ```