質問編集履歴

11

変更

2021/06/09 08:12

投稿

退会済みユーザー
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

変更

2021/06/09 08:12

投稿

退会済みユーザー
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 - d, 1), k - d
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 = 2 To 12
229
+ For a = 1 To 12
232
230
 
233
231
  'a = 2のとき、合算しないが重複データは削除
234
232
 
235
- If a = 2 Then
233
+ If a = 1 Then
236
-
234
+
237
- feeValue(k, a) = extractedData(k, a)
235
+ feeValue(areaName.Count, a) = extractedData(k, a + 1)
238
236
 
239
237
  Else
240
238
 
241
239
  '元の位置にあるデータ+重複している行の列の値。
242
240
 
243
- feeValue(k - 1, a) = extractedData(k - 1, a) + extractedData(k, a)
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(areaNameKey)
271
+ For j = 1 To UBound(areaName.keys)
282
272
 
283
273
  For i = 1 To 14
284
274
 
285
- NewWorkSheet.Cells(j + 3, i).Value = areaNameKey(i)
275
+ NewWorkSheet.Cells(j + 4, i).Value = areaName.Item(i)
286
-
276
+
287
- NewWorkSheet.Cells(j + 3, i + 1).Value = feeValue(j, i)
277
+ NewWorkSheet.Cells(j + 4, i + 1).Value = feeValue(j, i)
288
278
 
289
279
  Next
290
280
 

9

文章間違い

2021/06/09 08:00

投稿

退会済みユーザー
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 = areaNameItem(i)
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

かみ砕いた説明を記載

2021/06/09 06:14

投稿

退会済みユーザー
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
- For文で事前にextractedDataの値が、
83
+ areaName.Add extractedData
52
-
53
- areaNameに存在するかどうか重複チェックを行い、
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

文章間違い

2021/06/09 06:08

投稿

退会済みユーザー
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

かみ砕いた説明を記載

2021/06/09 05:57

投稿

退会済みユーザー
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

文章間違い

2021/06/09 05:56

投稿

退会済みユーザー
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

文章間違い

2021/06/09 05:47

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -36,7 +36,7 @@
36
36
 
37
37
  エラー内容   :このキーは既にこのコレクションの要素に割り当てられています
38
38
 
39
- エラー対象行  :If Not areaName.Exists(extractedData(k, 1)) Then
39
+ エラー対象行  :areaName.Add extractedData(k - d, 1), k - d
40
40
 
41
41
  エラー時の変数値:k=4,d=1,j=4
42
42
 

3

文章間違い

2021/06/09 05:11

投稿

退会済みユーザー
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

文章間違い

2021/06/09 05:05

投稿

退会済みユーザー
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

文章間違い

2021/06/09 04:20

投稿

退会済みユーザー
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
  しかし、重複しない時は、