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

回答編集履歴

3

追記

2021/06/09 06:20

投稿

YAmaGNZ
YAmaGNZ

スコア10663

answer CHANGED
@@ -24,4 +24,40 @@
24
24
 
25
25
 
26
26
 
27
- 例でいいので入力データと出力データがあったほうが意図が伝わりやすいかと思います。
27
+ 例でいいので入力データと出力データがあったほうが意図が伝わりやすいかと思います。
28
+
29
+
30
+ ### 追記
31
+
32
+ > areaName.Add extractedData
33
+ が行われていない為、空白になりえませんか。
34
+
35
+ Dictionaryについて勘違いされているようです。
36
+
37
+ 上記のように
38
+ A,1
39
+ B,2
40
+ C,3
41
+ A,2
42
+ とデータがあった場合、areaNameは
43
+ A,1
44
+ B,2
45
+ C,3
46
+ とAddされたデータしか格納されていませんのでk=4の時に何もAddしていない場合はareaNameは3件と変化しません。
47
+ なので空白データは存在しません。
48
+ 重複したデータをただ処理したくないだけであれば
49
+ ```VBA
50
+ For j = 1 To lineNum
51
+
52
+ 'キーがまだ存在してないのなら値を配列に追加/常にキー列(A列)を取得するので列固定
53
+ If Not areaName.Exists(extractedData(k, 1)) Then
54
+ 'A列を配列に追加
55
+ '値が重複→その時のindexNumberのitemは空のままだから重複回数分をマイナス
56
+ areaName.Add extractedData(k , 1), k
57
+
58
+ End If
59
+ k = k + 1
60
+ Next
61
+ ```
62
+ といった感じで処理しなければいいだけです。
63
+ (他の部分の処理に関しては見ていません)

2

誤字修正

2021/06/09 06:20

投稿

YAmaGNZ
YAmaGNZ

スコア10663

answer CHANGED
@@ -7,7 +7,7 @@
7
7
  D,4
8
8
  とデータがあった場合、`D,4`のデータを処理する時(k=5)
9
9
  `extractedData(k, 1)`は`D`なのでDictionaryにはキーが存在しないことになります。
10
- `A`が重複しているので`d`は加算され`1`となっているはずです。
10
+ `A`が重複しているので`d`は加算され`1`となっているはずです。
11
11
  そしてAddする時に`d`を引き算すると`k - d = 4`となり`A`をAddしようとします。
12
12
  そうするとすでにDictionaryにはAのキーが存在しますから「このキーは既にこのコレクションの要素に割り当てられています」とエラーになります。
13
13
  なぜAddする時にextractedData(k - d, 1)と重複した回数を引いているのでしょうか?

1

修正

2021/06/09 05:44

投稿

YAmaGNZ
YAmaGNZ

スコア10663

answer CHANGED
@@ -7,8 +7,8 @@
7
7
  D,4
8
8
  とデータがあった場合、`D,4`のデータを処理する時(k=5)
9
9
  `extractedData(k, 1)`は`D`なのでDictionaryにはキーが存在しないことになります。
10
- そしてAddする時に`A`が重複しているたので`d`は加算され`1`となっているはずです。
10
+ `A`が重複しているたので`d`は加算され`1`となっているはずです。
11
- こで`d`を引き算すると`k - d = 4`となり`A`をAddしようとします。
11
+ してAddする時に`d`を引き算すると`k - d = 4`となり`A`をAddしようとします。
12
12
  そうするとすでにDictionaryにはAのキーが存在しますから「このキーは既にこのコレクションの要素に割り当てられています」とエラーになります。
13
13
  なぜAddする時にextractedData(k - d, 1)と重複した回数を引いているのでしょうか?
14
14