回答編集履歴
4
「代入するデータの型が String 型である場合」に補足を加えました。
answer
CHANGED
|
@@ -69,6 +69,8 @@
|
|
|
69
69
|
|
|
70
70
|
- 代入時点におけるセルの表示形式が「時刻のみを表示する形式」であり、かつ代入される文字列が「数値データに変換可能なパターン」に該当し、かつその文字列に通貨記号(通常は `"$"` )が含まれている場合、代入後のセルの表示形式は「通貨」に変更され、代入後のセルのデータ型は `Currency` 型となる(特殊ケース)。
|
|
71
71
|
|
|
72
|
+
- 代入時点におけるセルの表示形式が「文字列」( `@` )ではなく、かつ代入される文字列が「 Excel の数式として解釈し、計算を実行することが可能な文字列」であった場合は、暗黙的にそのセルの Formula プロパティの設定が行われ、その数式の計算結果が Value プロパティから取得可能となる。代入後のセルの表示形式とデータ型は、代入前の表示形式と数式の戻り値によって異なる。
|
|
73
|
+
|
|
72
74
|
### 代入するデータの型が `Boolean` 型である場合
|
|
73
75
|
|
|
74
76
|
- 代入後のセルのデータ型は全て `Boolean` 型となる。代入前の表示形式の影響を受けず、また代入後に表示形式を変更しない。
|
3
より詳細に検証した結果を踏まえた内容に整理しました。
answer
CHANGED
|
@@ -17,43 +17,71 @@
|
|
|
17
17
|
|
|
18
18
|
以下、上記 2 の操作に限った一般的な動作について列挙します。
|
|
19
19
|
|
|
20
|
-
### 代入するデータの型が
|
|
20
|
+
### 代入するデータの型が `Integer`, `Long`, `Single`, `Double` のいずれかである場合
|
|
21
21
|
|
|
22
|
-
- 代入時点におけるセルの表示形式が「日
|
|
22
|
+
- 代入時点におけるセルの表示形式が「日時また日付のみを表示する形式」( `yyyy/mm/dd hh:mm:ss`, `yyyy/mm/dd` など)であった場合、代入後のセルのデータ型は基本的には `Date` 型となる。
|
|
23
23
|
|
|
24
|
-
- 代入時点におけるセルの表示形式が「
|
|
24
|
+
- 代入時点におけるセルの表示形式が「時刻のみを表示する形式」( `h:mm:ss` など)である場合、代入後のセルのデータ型は `Double` 型となる。
|
|
25
25
|
|
|
26
|
+
- 代入時点におけるセルの表示形式が「通貨を表示する形式」だった場合、代入後のセルのデータ型は `Currency` 型に変換される。
|
|
27
|
+
|
|
28
|
+
- 代入時点におけるセルの表示形式が上記以外のものであった場合(「文字列」を含む)、代入後のセルのデータ型は原則的に `Double` 型となる( `Integer`, `Long`, `Single` のいずれかの型として格納されることはない)。
|
|
29
|
+
|
|
30
|
+
### 代入するデータの型が `Currency` 型である場合
|
|
31
|
+
|
|
32
|
+
- 代入時点におけるセルの表示形式が「通貨を表示する形式」であった場合、代入後のセルのデータ型は `Currency` 型のままである。
|
|
33
|
+
|
|
34
|
+
- 代入時点におけるセルの表示形式が「数値を表示する形式」であった場合、代入後のセルのデータ型は `Double` 型となる。
|
|
35
|
+
|
|
36
|
+
- 代入時点におけるセルの表示形式が「日時または日付のみを表示する形式」であった場合、代入後のセルのデータ型は基本的に `Date` 型となる。
|
|
37
|
+
|
|
38
|
+
- 代入時点におけるセルの表示形式が「時刻のみを表示する形式」である場合、代入後のセルの表示形式は「通貨」に変更され、代入後のセルのデータ型は `Currency` 型となる。
|
|
39
|
+
|
|
40
|
+
- 代入時点におけるセルの表示形式が「文字列」( `@` )であった場合、代入後のセルの表示形式は「通貨」に変更され、代入後のセルのデータ型は**何故か `String` 型に変換される**(特殊ケース)。
|
|
41
|
+
|
|
26
42
|
### 代入するデータの型が `Date` 型である場合
|
|
27
43
|
|
|
28
|
-
- 代入時点におけるセルの表示形式が「日付/時刻を表示する
|
|
44
|
+
- 代入時点におけるセルの表示形式が「日付/時刻を表示する形式」であった場合、代入後のセルのデータ型は基本的に `Date` 型となる。
|
|
29
45
|
|
|
30
|
-
- 代入時点におけるセルの表示形式が「
|
|
46
|
+
- 代入時点におけるセルの表示形式が「時刻のみを表示する形式」であり、かつ代入する値が時刻成分のみを持つ場合、代入後のセルのデータ型は `Double` 型となる。
|
|
31
47
|
|
|
32
|
-
- 代入時点におけるセルの表示形式が「
|
|
48
|
+
- 代入時点におけるセルの表示形式が「通貨を表示する形式」であり、かつ代入する値が日付成分と時刻成分の両方を含む場合、代入後のセルの表示形式は「日時を表示する形式」に変更され、代入後のセルのデータ型は `Date` 型となる。
|
|
33
49
|
|
|
34
|
-
|
|
50
|
+
- 代入時点におけるセルの表示形式が「通貨を表示する形式」であり、かつ代入する値が日付成分のみを含む場合、代入後のセルの表示形式は「日付のみを表示する形式」に変更され、代入後のセルのデータ型は `Date` 型となる。
|
|
35
51
|
|
|
36
|
-
- 代入時点におけるセルの表示形式が「
|
|
52
|
+
- 代入時点におけるセルの表示形式が「通貨を表示する形式」であり、かつ代入する値が時刻成分のみを含む場合、代入後のセルの表示形式は「時刻のみを表示する形式」に変更され、代入後のセルのデータ型は `Double` 型となる。
|
|
37
53
|
|
|
38
|
-
-
|
|
54
|
+
- 以上の動作は、代入する Date 型データの日付/時刻が Excel ワークシート上で扱うことの出来る日付範囲に含まれる場合のみ有効である。
|
|
39
55
|
|
|
56
|
+
- 代入時点におけるセルの表示形式が「数値を表示する形式」であった場合、代入後のセルのデータ型は `Double` 型となる。
|
|
57
|
+
|
|
40
58
|
- 代入時点におけるセルの表示形式が「文字列」( `@` )であった場合、代入後のセルのデータ型は `String` 型となる。
|
|
41
59
|
|
|
42
|
-
|
|
60
|
+
### 代入するデータの型が `String` 型である場合
|
|
43
61
|
|
|
62
|
+
- 代入時点におけるセルの表示形式が「文字列」( `@` )であった場合、代入後のセルのデータ型は必ず `String` 型となる。
|
|
63
|
+
|
|
64
|
+
- 代入時点におけるセルの表示形式が「数値を表示する形式」であり、かつ代入される文字列が「数値データまたは日時データに変換可能なパターン」であった場合、代入後のセルのデータ型は基本的に `Double` 型となる。
|
|
65
|
+
|
|
66
|
+
- 代入時点におけるセルの表示形式が「日時または日付のみを表示する形式」であり、かつ代入される文字列が「数値データまたは日時データに変換可能なパターン」に該当する場合、代入後のセルのデータ型は基本的に `Date` 型となる。
|
|
67
|
+
|
|
68
|
+
- 代入時点におけるセルの表示形式が「時刻のみを表示する形式」であり、かつ代入される文字列が「数値データまたは日時データに変換可能なパターン」に該当する場合、代入後のセルのデータ型は基本的に `Double` 型となる。
|
|
69
|
+
|
|
70
|
+
- 代入時点におけるセルの表示形式が「時刻のみを表示する形式」であり、かつ代入される文字列が「数値データに変換可能なパターン」に該当し、かつその文字列に通貨記号(通常は `"$"` )が含まれている場合、代入後のセルの表示形式は「通貨」に変更され、代入後のセルのデータ型は `Currency` 型となる(特殊ケース)。
|
|
71
|
+
|
|
44
72
|
### 代入するデータの型が `Boolean` 型である場合
|
|
45
73
|
|
|
46
74
|
- 代入後のセルのデータ型は全て `Boolean` 型となる。代入前の表示形式の影響を受けず、また代入後に表示形式を変更しない。
|
|
47
75
|
|
|
48
76
|
### 代入時点におけるセルの表示形式が「標準」であった場合
|
|
49
77
|
|
|
50
|
-
- 代入するデータが「 Excel の数式として解釈可能な文字列」であった場合、暗黙的に Formula プロパティの設定が行われ、代入後のセルの表示形式はその数式の戻り値のデータ型に沿った形式に変換される(本来は Value プロパティではなく Formula プロパティを直接設定すべきである)。
|
|
78
|
+
- 代入するデータが「 Excel の数式として解釈し、計算を実行することが可能な文字列」であった場合、暗黙的に Formula プロパティの設定が行われ、代入後のセルの表示形式はその数式の戻り値のデータ型や値に沿った形式に変換される(本来は Value プロパティではなく Formula プロパティを直接設定すべきである。また、代入する式の構文に問題がある場合は実行時エラーが発生する)。
|
|
51
79
|
|
|
52
|
-
- 代入するデータが数値データまたは「数値データに変換可能な文字列( `"5E04"` のような指数形式なども含む)」であった場合、代入後のセルの表示形式はそのパターンに沿った
|
|
80
|
+
- 代入するデータが数値データまたは「数値データに変換可能な文字列( `"5E04"` のような指数形式なども含む)」であった場合、代入後のセルの表示形式は必要に応じてその文字列パターンに沿った形式に変更され(必要がなければ「標準」のままとし)、代入後のセルのデータ型は基本的に `Double` 型となる。また、その文字列に通貨記号が含まれていることによって `Currency` 型となる場合もある。
|
|
53
81
|
|
|
54
|
-
- 代入するデータが日時データまたは「日時データに変換可能な文字列」であった場合、代入後のセルの表示形式はそのパターンに沿った「日付/時刻を表示する
|
|
82
|
+
- 代入するデータが日時データまたは「日時データに変換可能な文字列」であった場合、代入後のセルの表示形式は基本的にその文字列パターンに沿った「日時/日付/時刻を表示する形式」に変換され、代入後のセルのデータ型は `Date` 型(日時または日付)と `Double` 型(時刻)のいずれかとなる。
|
|
55
83
|
|
|
56
|
-
- 代入するデータが `Currency` 型である場合、代入後のセルの表示形式は「通貨」に変
|
|
84
|
+
- 代入するデータが `Currency` 型である場合、代入後のセルの表示形式は「通貨」に変更され、代入後のセルのデータ型は `Currency` 型のままとなる。
|
|
57
85
|
|
|
58
86
|
- 代入するデータが上記のいずれのケースにも該当しない文字列である( `String` 以外の型への変換が不可能である)場合、代入後のセルの表示形式は「標準」のまま、代入後のセルのデータ型は `String` 型となる。
|
|
59
87
|
|
|
@@ -85,11 +113,11 @@
|
|
|
85
113
|
|
|
86
114
|
Dim aryValues As Variant
|
|
87
115
|
|
|
88
|
-
aryValues = Array(#11/4/2025#, #12:00:00 PM#, "2025/11/04", "
|
|
116
|
+
aryValues = Array(#11/4/2025 12:00:00 PM#, #11/4/2025#, #12:00:00 PM#, "2025/11/04 ", "1-1", "12:00", 0, 0.5, 100, "100", 45965, "45965", CSng(1000.5), CDbl(1000.5), CCur(0), CCur(0.5), CCur(1000), CCur(1000.5), CDec(1000.5), "1000.5", "01234", "5E04", "$1000", "$1,000", "ABC", True, "=NOW()", "=TODAY()", "=TIME(HOUR(NOW()),MINUTE(NOW()),SECOND(NOW()))", "=ROW()")
|
|
89
117
|
|
|
90
118
|
Dim aryFormats As Variant
|
|
91
119
|
|
|
92
|
-
aryFormats = Array("yyyy/mm/dd hh:mm:ss", "0", "#,##0.00", "$#,##0.00_);($#,##0.00)", "0.E+00", "@", "General")
|
|
120
|
+
aryFormats = Array("yyyy/m/d", "h:mm:ss", "yyyy/mm/dd hh:mm:ss", "0", "#,##0.00", "$#,##0.00_);($#,##0.00)", "0.E+00", "@", "General")
|
|
93
121
|
|
|
94
122
|
Dim varValue As Variant
|
|
95
123
|
Dim varFormat As Variant
|
|
@@ -120,12 +148,13 @@
|
|
|
120
148
|
.NumberFormat = "@"
|
|
121
149
|
.Columns(3).NumberFormat = NumberFormat
|
|
122
150
|
|
|
123
|
-
.Columns(1).Value = Value
|
|
151
|
+
.Columns(1).Value = CStr(Value)
|
|
124
152
|
.Columns(2).Value = TypeName(Value)
|
|
125
153
|
.Columns(4).Value = .Columns(3).NumberFormat
|
|
126
154
|
.Columns(5).Value = .Columns(3).NumberFormatLocal
|
|
127
155
|
|
|
128
156
|
.Columns(3).Value = Value
|
|
157
|
+
Application.Calculate
|
|
129
158
|
.Columns(6).Value = .Columns(3).NumberFormat
|
|
130
159
|
.Columns(7).Value = .Columns(3).NumberFormatLocal
|
|
131
160
|
.Columns(8).Value = TypeName(.Columns(3).Value)
|
|
@@ -135,4 +164,4 @@
|
|
|
135
164
|
End Sub
|
|
136
165
|
```
|
|
137
166
|
|
|
138
|
-
今回の場合はあまり関係がないでしょうが、代入時点でのセルの表示形式を「通貨」にした場合はやや結果が読みづらい挙動となります。
|
|
167
|
+
今回の場合はあまり関係がないでしょうが、代入時点でのセルの表示形式を「通貨を表示する形式」や「時刻のみを表示する形式」にした場合はやや結果が読みづらい挙動となります。
|
2
検証パターンを若干増やしました。
answer
CHANGED
|
@@ -85,11 +85,11 @@
|
|
|
85
85
|
|
|
86
86
|
Dim aryValues As Variant
|
|
87
87
|
|
|
88
|
-
aryValues = Array(#11/4/2025#, "2025/11/04", "2025-11-04", 100, "100", 45965, "45965", CSng(1000.5), CDbl(1000.5), CCur(1000.5), CDec(1000.5), "1000.5", "01234", "5E04", "ABC", True, "=NOW()", "=ROW()")
|
|
88
|
+
aryValues = Array(#11/4/2025#, #12:00:00 PM#, "2025/11/04", "2025-11-04", 100, "100", 45965, "45965", CSng(1000.5), CDbl(1000.5), CCur(1000.5), CDec(1000.5), "1000.5", "01234", "5E04", "ABC", True, "=NOW()", "=ROW()")
|
|
89
89
|
|
|
90
90
|
Dim aryFormats As Variant
|
|
91
91
|
|
|
92
|
-
aryFormats = Array("yyyy/mm/dd hh:mm:ss", "0", "#,##0.00", "0.E+00", "@", "General")
|
|
92
|
+
aryFormats = Array("yyyy/mm/dd hh:mm:ss", "0", "#,##0.00", "$#,##0.00_);($#,##0.00)", "0.E+00", "@", "General")
|
|
93
93
|
|
|
94
94
|
Dim varValue As Variant
|
|
95
95
|
Dim varFormat As Variant
|
|
@@ -134,3 +134,5 @@
|
|
|
134
134
|
|
|
135
135
|
End Sub
|
|
136
136
|
```
|
|
137
|
+
|
|
138
|
+
今回の場合はあまり関係がないでしょうが、代入時点でのセルの表示形式を「通貨」にした場合はやや結果が読みづらい挙動となります。
|
1
「暗黙的に Formula プロパティの設定が行われ、」を追記。
answer
CHANGED
|
@@ -47,7 +47,7 @@
|
|
|
47
47
|
|
|
48
48
|
### 代入時点におけるセルの表示形式が「標準」であった場合
|
|
49
49
|
|
|
50
|
-
- 代入するデータが「 Excel の数式として解釈可能な文字列」であった場合、代入後のセルの表示形式はその数式の戻り値のデータ型に沿った形式に変換される(本来は Value プロパティではなく Formula プロパティを設定すべきである)。
|
|
50
|
+
- 代入するデータが「 Excel の数式として解釈可能な文字列」であった場合、暗黙的に Formula プロパティの設定が行われ、代入後のセルの表示形式はその数式の戻り値のデータ型に沿った形式に変換される(本来は Value プロパティではなく Formula プロパティを直接設定すべきである)。
|
|
51
51
|
|
|
52
52
|
- 代入するデータが数値データまたは「数値データに変換可能な文字列( `"5E04"` のような指数形式なども含む)」であった場合、代入後のセルの表示形式はそのパターンに沿った「数値を表示するための形式」に変換され、代入後のセルのデータ型は `Double` 型となる。
|
|
53
53
|
|