回答編集履歴
3
コード修正
test
CHANGED
@@ -1,4 +1,5 @@
|
|
1
|
-
仕様があいまいな部分がありますが、とりあえず、下記で希望の結果になると思います。
|
1
|
+
~~仕様があいまいな部分がありますが、とりあえず、下記で希望の結果になると思います。~~
|
2
|
+
質問が修正されて仕様が明確になったので、それにあわせてコードを修正しました。
|
2
3
|
|
3
4
|
```vba
|
4
5
|
Public Sub Sample()
|
@@ -17,7 +18,7 @@
|
|
17
18
|
Dim i As Long, key As String
|
18
19
|
For i = 2 To rngSaki.Rows.Count
|
19
20
|
key = Join(WorksheetFunction.Index(rngSaki.Rows(i).Value, 1, 0))
|
20
|
-
dicSaki(key) = 1
|
21
|
+
dicSaki(key) = dicSaki(key) + 1 'アイテムには件数を格納
|
21
22
|
Next
|
22
23
|
|
23
24
|
shtSabun.Cells.Clear
|
@@ -27,11 +28,12 @@
|
|
27
28
|
r = 2
|
28
29
|
For i = 2 To rngMoto.Rows.Count
|
29
30
|
key = Join(WorksheetFunction.Index(rngMoto.Rows(i).Value, 1, 0))
|
30
|
-
If
|
31
|
+
If dicSaki.Exists(key) Then
|
32
|
+
dicSaki(key) = dicSaki(key) - 1 '一致したら件数を減らす
|
33
|
+
If dicSaki(key) = 0 Then dicSaki.Remove key '0件になったら削除する
|
34
|
+
Else
|
31
35
|
rngMoto.Rows(i).Copy shtSabun.Cells(r, 1)
|
32
36
|
r = r + 1
|
33
|
-
Else
|
34
|
-
dicSaki.Remove (key)
|
35
37
|
End If
|
36
38
|
Next
|
37
39
|
End Sub
|
@@ -39,7 +41,7 @@
|
|
39
41
|
|
40
42
|
存在チェック(一致するものの検索)は、Dictionaryを使うのが高速というのが定番なので、それを使いました。
|
41
43
|
|
42
|
-
比較先のデータを連結して、Dictionaryにキーとして登録します。
|
44
|
+
比較先のデータを連結して、Dictionaryにキーとして登録します。アイテムには件数を格納します。
|
43
45
|
比較元のデータを連結したものが、Dictionaryのキーに存在するかチェックして、存在しなければ、差分シートに出力。
|
44
|
-
存在した場合は、Dictionary
|
46
|
+
存在した場合は、Dictionaryのアイテムの件数を減数して、0件になったら削除します。
|
45
47
|
これをループ処理すれば希望の結果になります。
|
2
コード改善
test
CHANGED
@@ -16,9 +16,7 @@
|
|
16
16
|
|
17
17
|
Dim i As Long, key As String
|
18
18
|
For i = 2 To rngSaki.Rows.Count
|
19
|
-
With rngSaki
|
20
|
-
|
19
|
+
key = Join(WorksheetFunction.Index(rngSaki.Rows(i).Value, 1, 0))
|
21
|
-
End With
|
22
20
|
dicSaki(key) = 1
|
23
21
|
Next
|
24
22
|
|
@@ -28,14 +26,12 @@
|
|
28
26
|
Dim r As Long
|
29
27
|
r = 2
|
30
28
|
For i = 2 To rngMoto.Rows.Count
|
31
|
-
With rngMoto
|
32
|
-
|
29
|
+
key = Join(WorksheetFunction.Index(rngMoto.Rows(i).Value, 1, 0))
|
33
|
-
End With
|
34
30
|
If Not dicSaki.Exists(key) Then
|
35
31
|
rngMoto.Rows(i).Copy shtSabun.Cells(r, 1)
|
36
32
|
r = r + 1
|
37
33
|
Else
|
38
|
-
dicSaki.Remove key
|
34
|
+
dicSaki.Remove (key)
|
39
35
|
End If
|
40
36
|
Next
|
41
37
|
End Sub
|
@@ -43,7 +39,7 @@
|
|
43
39
|
|
44
40
|
存在チェック(一致するものの検索)は、Dictionaryを使うのが高速というのが定番なので、それを使いました。
|
45
41
|
|
46
|
-
比較先のデータをDictionaryにキーとして登録します。
|
42
|
+
比較先のデータを連結して、Dictionaryにキーとして登録します。
|
47
|
-
比較元のデータをDictionaryのキーに存在するかチェックして、存在しなければ、差分シートに出力。
|
43
|
+
比較元のデータを連結したものが、Dictionaryのキーに存在するかチェックして、存在しなければ、差分シートに出力。
|
48
44
|
存在した場合は、Dictionaryからキーを削除します。
|
49
45
|
これをループ処理すれば希望の結果になります。
|
1
コード微修正
test
CHANGED
@@ -35,7 +35,7 @@
|
|
35
35
|
rngMoto.Rows(i).Copy shtSabun.Cells(r, 1)
|
36
36
|
r = r + 1
|
37
37
|
Else
|
38
|
-
dicSaki.Remove
|
38
|
+
dicSaki.Remove key
|
39
39
|
End If
|
40
40
|
Next
|
41
41
|
End Sub
|