回答編集履歴
3
追記しました。
test
CHANGED
@@ -130,8 +130,6 @@
|
|
130
130
|
|
131
131
|
Cells(wrow, "E").Interior.Color = RGB(255, 0, 0) 'E列の該当セルは背景を赤色
|
132
132
|
|
133
|
-
|
134
|
-
|
135
133
|
End If
|
136
134
|
|
137
135
|
Next
|
2
dictionary版を追記しました
test
CHANGED
@@ -81,3 +81,63 @@
|
|
81
81
|
|
82
82
|
|
83
83
|
```
|
84
|
+
|
85
|
+
|
86
|
+
|
87
|
+
ちなみに、キー(社員番号等)の重複チェックをするような場合は、Scripting.Dictionaryを使うと
|
88
|
+
|
89
|
+
簡単にかつ高速に処理が行えます。
|
90
|
+
|
91
|
+
上のマクロは2重のfor文なので、行数が10000行程度になると劇的に遅くなります。
|
92
|
+
|
93
|
+
Scripting.Dictionaryを使った場合は、1重のfor文で済むので、それほど遅くなりません。
|
94
|
+
|
95
|
+
10000行以上で試してみると違いが体感できるかと。
|
96
|
+
|
97
|
+
```VBA
|
98
|
+
|
99
|
+
'Scripting.Dictionary版
|
100
|
+
|
101
|
+
Sub 回答者の重複は色付け2()
|
102
|
+
|
103
|
+
Dim sh1 As Worksheet
|
104
|
+
|
105
|
+
Dim maxrow As Long
|
106
|
+
|
107
|
+
Dim wrow As Long
|
108
|
+
|
109
|
+
Dim dicT As Object
|
110
|
+
|
111
|
+
Dim key As String
|
112
|
+
|
113
|
+
Set dicT = CreateObject("Scripting.Dictionary")
|
114
|
+
|
115
|
+
Set sh1 = Worksheets("Sheet1")
|
116
|
+
|
117
|
+
maxrow = sh1.Cells(Rows.Count, "E").End(xlUp).row 'Sheet1 E列最大行
|
118
|
+
|
119
|
+
sh1.Range("E2:E" & maxrow).Interior.Pattern = xlNone
|
120
|
+
|
121
|
+
For wrow = 2 To maxrow
|
122
|
+
|
123
|
+
key = sh1.Cells(wrow, "E").Value
|
124
|
+
|
125
|
+
If dicT.exists(key) = False Then
|
126
|
+
|
127
|
+
dicT(key) = True
|
128
|
+
|
129
|
+
Else
|
130
|
+
|
131
|
+
Cells(wrow, "E").Interior.Color = RGB(255, 0, 0) 'E列の該当セルは背景を赤色
|
132
|
+
|
133
|
+
|
134
|
+
|
135
|
+
End If
|
136
|
+
|
137
|
+
Next
|
138
|
+
|
139
|
+
End Sub
|
140
|
+
|
141
|
+
|
142
|
+
|
143
|
+
```
|
1
追記しました
test
CHANGED
@@ -37,3 +37,47 @@
|
|
37
37
|
![Sheet1](7d7c3f2b9483ee96d091faeb25f63592.png)
|
38
38
|
|
39
39
|
![Sheet2](37a1639b7b50212dc5500c1c7a846cad.png)
|
40
|
+
|
41
|
+
|
42
|
+
|
43
|
+
```VBA
|
44
|
+
|
45
|
+
Sub 回答者の重複は色付け()
|
46
|
+
|
47
|
+
Dim i As Long, j As Long, x As Long
|
48
|
+
|
49
|
+
|
50
|
+
|
51
|
+
With Sheets("Sheet1")
|
52
|
+
|
53
|
+
x = .Cells(Rows.Count, 5).End(xlUp).Row 'Sheet1 E列最大行
|
54
|
+
|
55
|
+
.Range("E2:E" & x).Interior.Pattern = xlNone
|
56
|
+
|
57
|
+
For i = x To 2 Step -1 '最終行から2行目まで
|
58
|
+
|
59
|
+
For j = i - 1 To 2 Step -1 'iの前のから2行目まで
|
60
|
+
|
61
|
+
If Cells(i, 5) = Cells(j, 5) Then
|
62
|
+
|
63
|
+
Cells(i, 5).Interior.Color = RGB(255, 0, 0) 'E列の該当セルは背景を赤色
|
64
|
+
|
65
|
+
Exit For
|
66
|
+
|
67
|
+
End If
|
68
|
+
|
69
|
+
Next j
|
70
|
+
|
71
|
+
Next i
|
72
|
+
|
73
|
+
|
74
|
+
|
75
|
+
End With
|
76
|
+
|
77
|
+
End Sub
|
78
|
+
|
79
|
+
|
80
|
+
|
81
|
+
|
82
|
+
|
83
|
+
```
|