質問編集履歴
11
変更
test
CHANGED
@@ -1 +1 @@
|
|
1
|
-
|
1
|
+
出力時、新しいシートが追加されるがデータが出力されない
|
test
CHANGED
@@ -4,87 +4,7 @@
|
|
4
4
|
|
5
5
|
以下を実現するプログラムを作りたいと考えております。
|
6
6
|
|
7
|
-
しかし、表題
|
7
|
+
しかし、表題が原因で実現できずにいます。
|
8
|
-
|
9
|
-
また、
|
10
|
-
|
11
|
-
それとは別に空白だった値にデータを入れたいので
|
12
|
-
|
13
|
-
dという重複回数を示す変数を定義したものの、
|
14
|
-
|
15
|
-
2種類目の重複データに遭遇した時のdの値は2
|
16
|
-
|
17
|
-
k-dを行うと2個戻ってしまい、
|
18
|
-
|
19
|
-
値が入っていないキーへ入れられず、
|
20
|
-
|
21
|
-
何の意味も持たない変数になってしまいます。
|
22
|
-
|
23
|
-
どの様に実現すると良いでしょうか。
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
----【実現したい事】----
|
32
|
-
|
33
|
-
重複時に該当するキーには値を入れない
|
34
|
-
|
35
|
-
しかし、重複しない時は、
|
36
|
-
|
37
|
-
重複していたキーに値を入れないと空白のデータになる。
|
38
|
-
|
39
|
-
そこで、空白のキーに値を入れたい
|
40
|
-
|
41
|
-
------------------------
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
エラー内容 :このキーは既にこのコレクションの要素に割り当てられています
|
46
|
-
|
47
|
-
エラー対象行 :areaName.Add extractedData(k - d, 1), k - d
|
48
|
-
|
49
|
-
エラー時の変数値:k=4,d=1,j=4
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
----【具体例】----
|
56
|
-
|
57
|
-
例えば、k=3の時、
|
58
|
-
|
59
|
-
データが重複しており、
|
60
|
-
|
61
|
-
If Not areaName.Exists(extractedData(k, 1)) Then
|
62
|
-
|
63
|
-
の直下にある処理内容を通りません。
|
64
|
-
|
65
|
-
であれば、当然、
|
66
|
-
|
67
|
-
areaNameの連想配列にはk=3の時の値が入らない事になります。
|
68
|
-
|
69
|
-
そうなると、Else以下の文に通る事になります。
|
70
|
-
|
71
|
-
Else以下の文で重複している時の処理を終えると、
|
72
|
-
|
73
|
-
End Ifに辿り着き、kが加算されます。
|
74
|
-
|
75
|
-
この時のkの値はk=4です。
|
76
|
-
|
77
|
-
そして、重複チェックに戻ります。
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
すると、k=3の時、
|
82
|
-
|
83
|
-
areaName.Add extractedData
|
84
|
-
|
85
|
-
が行われていない為、空白になります。
|
86
|
-
|
87
|
-
------ --------- ---------
|
88
8
|
|
89
9
|
|
90
10
|
|
10
変更
test
CHANGED
File without changes
|
test
CHANGED
@@ -180,7 +180,7 @@
|
|
180
180
|
|
181
181
|
Dim feeValue() As Variant
|
182
182
|
|
183
|
-
|
183
|
+
|
184
184
|
|
185
185
|
'B列とD列~O列の動的配列の入れ物作成
|
186
186
|
|
@@ -188,15 +188,13 @@
|
|
188
188
|
|
189
189
|
|
190
190
|
|
191
|
-
|
191
|
+
|
192
192
|
|
193
193
|
k = 1 'kはキー変数
|
194
194
|
|
195
|
-
d = 0 'dは重複回数
|
196
|
-
|
197
195
|
For j = 1 To lineNum
|
198
196
|
|
199
|
-
|
197
|
+
|
200
198
|
|
201
199
|
'キーがまだ存在してないのなら値を配列に追加/常にキー列(A列)を取得するので列固定
|
202
200
|
|
@@ -206,9 +204,9 @@
|
|
206
204
|
|
207
205
|
'値が重複→その時のindexNumberのitemは空のままだから重複回数分をマイナス
|
208
206
|
|
209
|
-
areaName.Add extractedData(k
|
207
|
+
areaName.Add extractedData(k, 1), k
|
210
|
-
|
211
|
-
|
208
|
+
|
209
|
+
|
212
210
|
|
213
211
|
'B列追加、D列~O列追加
|
214
212
|
|
@@ -228,26 +226,24 @@
|
|
228
226
|
|
229
227
|
'売上を合算
|
230
228
|
|
231
|
-
For a =
|
229
|
+
For a = 1 To 12
|
232
230
|
|
233
231
|
'a = 2のとき、合算しないが重複データは削除
|
234
232
|
|
235
|
-
If a =
|
233
|
+
If a = 1 Then
|
236
|
-
|
234
|
+
|
237
|
-
feeValue(
|
235
|
+
feeValue(areaName.Count, a) = extractedData(k, a + 1)
|
238
236
|
|
239
237
|
Else
|
240
238
|
|
241
239
|
'元の位置にあるデータ+重複している行の列の値。
|
242
240
|
|
243
|
-
feeValue(
|
241
|
+
feeValue(areaName.Count, a + 1) = extractedData(areaName.Count, a + 1) + extractedData(k, a + 1)
|
244
242
|
|
245
243
|
End If
|
246
244
|
|
247
245
|
Next
|
248
246
|
|
249
|
-
d = d + 1 '重複カウント
|
250
|
-
|
251
247
|
End If
|
252
248
|
|
253
249
|
k = k + 1
|
@@ -256,12 +252,6 @@
|
|
256
252
|
|
257
253
|
|
258
254
|
|
259
|
-
areaNameKey = areaName.keys
|
260
|
-
|
261
|
-
areaNameItem = areaName.items
|
262
|
-
|
263
|
-
|
264
|
-
|
265
255
|
|
266
256
|
|
267
257
|
'新規シートを名前を変更してシートの最後尾に挿入
|
@@ -278,13 +268,13 @@
|
|
278
268
|
|
279
269
|
'リストを出力 areaNameの値とfeeValueの値をキーで対応させて出力する
|
280
270
|
|
281
|
-
For j = 1 To UBound(areaName
|
271
|
+
For j = 1 To UBound(areaName.keys)
|
282
272
|
|
283
273
|
For i = 1 To 14
|
284
274
|
|
285
|
-
NewWorkSheet.Cells(j +
|
275
|
+
NewWorkSheet.Cells(j + 4, i).Value = areaName.Item(i)
|
286
|
-
|
276
|
+
|
287
|
-
NewWorkSheet.Cells(j +
|
277
|
+
NewWorkSheet.Cells(j + 4, i + 1).Value = feeValue(j, i)
|
288
278
|
|
289
279
|
Next
|
290
280
|
|
9
文章間違い
test
CHANGED
File without changes
|
test
CHANGED
@@ -282,7 +282,7 @@
|
|
282
282
|
|
283
283
|
For i = 1 To 14
|
284
284
|
|
285
|
-
NewWorkSheet.Cells(j + 3, i).Value = areaName
|
285
|
+
NewWorkSheet.Cells(j + 3, i).Value = areaNameKey(i)
|
286
286
|
|
287
287
|
NewWorkSheet.Cells(j + 3, i + 1).Value = feeValue(j, i)
|
288
288
|
|
8
かみ砕いた説明を記載
test
CHANGED
File without changes
|
test
CHANGED
@@ -1,3 +1,7 @@
|
|
1
|
+
※サンプルデータとして画像を追加しました。
|
2
|
+
|
3
|
+
|
4
|
+
|
1
5
|
以下を実現するプログラムを作りたいと考えております。
|
2
6
|
|
3
7
|
しかし、表題のエラーが原因で実現できずにいます。
|
@@ -22,6 +26,8 @@
|
|
22
26
|
|
23
27
|
|
24
28
|
|
29
|
+
|
30
|
+
|
25
31
|
----【実現したい事】----
|
26
32
|
|
27
33
|
重複時に該当するキーには値を入れない
|
@@ -46,43 +52,37 @@
|
|
46
52
|
|
47
53
|
|
48
54
|
|
49
|
-
----【
|
55
|
+
----【具体例】----
|
56
|
+
|
50
|
-
|
57
|
+
例えば、k=3の時、
|
58
|
+
|
59
|
+
データが重複しており、
|
60
|
+
|
61
|
+
If Not areaName.Exists(extractedData(k, 1)) Then
|
62
|
+
|
63
|
+
の直下にある処理内容を通りません。
|
64
|
+
|
65
|
+
であれば、当然、
|
66
|
+
|
67
|
+
areaNameの連想配列にはk=3の時の値が入らない事になります。
|
68
|
+
|
69
|
+
そうなると、Else以下の文に通る事になります。
|
70
|
+
|
71
|
+
Else以下の文で重複している時の処理を終えると、
|
72
|
+
|
73
|
+
End Ifに辿り着き、kが加算されます。
|
74
|
+
|
75
|
+
この時のkの値はk=4です。
|
76
|
+
|
77
|
+
そして、重複チェックに戻ります。
|
78
|
+
|
79
|
+
|
80
|
+
|
81
|
+
すると、k=3の時、
|
82
|
+
|
51
|
-
|
83
|
+
areaName.Add extractedData
|
52
|
-
|
53
|
-
|
84
|
+
|
54
|
-
|
55
|
-
該当したらExitForで強制的に抜ける。
|
56
|
-
|
57
|
-
ただし、重複しなかった場合でもFor文は抜けてしまうので、
|
58
|
-
|
59
|
-
更に抜けた後にIf文を追加し、
|
60
|
-
|
61
|
-
z = Ubound(areaName.keys)
|
62
|
-
|
63
|
-
とすればいいのでは、と思いましたが
|
64
|
-
|
65
|
-
コードが増えすぎていきますし、
|
66
|
-
|
67
|
-
そもそもデータによっては
|
68
|
-
|
69
|
-
z = Ubound(areaName.keys)
|
70
|
-
|
71
|
-
|
85
|
+
が行われていない為、空白になります。
|
72
|
-
|
73
|
-
よって現実的ではないと判断し、やめました。
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
For z=1 To Ubound(areaName.keys)
|
78
|
-
|
79
|
-
If extractedData(k, 1) = areaName(a)
|
80
|
-
|
81
|
-
Exit For
|
82
|
-
|
83
|
-
End If
|
84
|
-
|
85
|
-
Next
|
86
86
|
|
87
87
|
------ --------- ---------
|
88
88
|
|
7
文章間違い
test
CHANGED
File without changes
|
test
CHANGED
@@ -104,7 +104,7 @@
|
|
104
104
|
|
105
105
|
|
106
106
|
|
107
|
-
|
107
|
+
【extractedDataのサンプルデータ】
|
108
108
|
|
109
109
|
![extractedDataのサンプルデータ](96854bf0017dbac649d5677ee5178776.png)
|
110
110
|
|
6
かみ砕いた説明を記載
test
CHANGED
File without changes
|
test
CHANGED
@@ -104,6 +104,14 @@
|
|
104
104
|
|
105
105
|
|
106
106
|
|
107
|
+
|
108
|
+
|
109
|
+
![extractedDataのサンプルデータ](96854bf0017dbac649d5677ee5178776.png)
|
110
|
+
|
111
|
+
|
112
|
+
|
113
|
+
|
114
|
+
|
107
115
|
【以下コード】
|
108
116
|
|
109
117
|
|
5
文章間違い
test
CHANGED
File without changes
|
test
CHANGED
@@ -8,9 +8,11 @@
|
|
8
8
|
|
9
9
|
dという重複回数を示す変数を定義したものの、
|
10
10
|
|
11
|
-
初期値は0なので、
|
12
|
-
|
13
|
-
|
11
|
+
2種類目の重複データに遭遇した時のdの値は2
|
12
|
+
|
13
|
+
k-dを行うと2個戻ってしまい、
|
14
|
+
|
15
|
+
値が入っていないキーへ入れられず、
|
14
16
|
|
15
17
|
何の意味も持たない変数になってしまいます。
|
16
18
|
|
4
文章間違い
test
CHANGED
File without changes
|
test
CHANGED
@@ -36,7 +36,7 @@
|
|
36
36
|
|
37
37
|
エラー内容 :このキーは既にこのコレクションの要素に割り当てられています
|
38
38
|
|
39
|
-
エラー対象行 :
|
39
|
+
エラー対象行 :areaName.Add extractedData(k - d, 1), k - d
|
40
40
|
|
41
41
|
エラー時の変数値:k=4,d=1,j=4
|
42
42
|
|
3
文章間違い
test
CHANGED
File without changes
|
test
CHANGED
@@ -2,6 +2,18 @@
|
|
2
2
|
|
3
3
|
しかし、表題のエラーが原因で実現できずにいます。
|
4
4
|
|
5
|
+
また、
|
6
|
+
|
7
|
+
それとは別に空白だった値にデータを入れたいので
|
8
|
+
|
9
|
+
dという重複回数を示す変数を定義したものの、
|
10
|
+
|
11
|
+
初期値は0なので、
|
12
|
+
|
13
|
+
初めて重複したデータに出会った時は、
|
14
|
+
|
15
|
+
何の意味も持たない変数になってしまいます。
|
16
|
+
|
5
17
|
どの様に実現すると良いでしょうか。
|
6
18
|
|
7
19
|
|
2
文章間違い
test
CHANGED
File without changes
|
test
CHANGED
@@ -70,7 +70,7 @@
|
|
70
70
|
|
71
71
|
Next
|
72
72
|
|
73
|
-
------------------------
|
73
|
+
------ --------- ---------
|
74
74
|
|
75
75
|
|
76
76
|
|
1
文章間違い
test
CHANGED
File without changes
|
test
CHANGED
@@ -10,10 +10,6 @@
|
|
10
10
|
|
11
11
|
----【実現したい事】----
|
12
12
|
|
13
|
-
If Not 取得してきたデータつまりextractedDataの値 = areaNameに存在する値
|
14
|
-
|
15
|
-
|
16
|
-
|
17
13
|
重複時に該当するキーには値を入れない
|
18
14
|
|
19
15
|
しかし、重複しない時は、
|