A列に、たくさんの名前が入力されているとします。
のような感じです。
入力されている範囲は、そうですね、セルA1:A1000としましょうか。
この中から「重複している名前」をチェックするにはどうしたらいいでしょうか。
上の例では、
ということです。さて、どうしましょう。
For Nextを二重にして、1行目のデータがその下に存在するかを確認してはどうでしょう。
たとえば、次のように。
Sub Sample1()
Dim i As Long, j As Long
For i = 1 To 1000
For j = i + 1 To 1000
If Cells(i, 1) = Cells(j, 1) Then
Cells(i, 1).Font.ColorIndex = 3
Exit For
End If
Next j
Next i
End Sub
それとも、Collectionを使って連想配列を作りましょうか。
Collectionのオブジェクトには同じデータを登録できませんから重複しないリストを作るときなどに便利です。
こんなときは、発想を変えてみましょう。
「田中」が重複しているということは、セル範囲A1:A1000に「田中」が"2個以上"存在するということです。
つまり、セル範囲A1:A1000の中で「田中」の個数を数えればいいです。
セル範囲A1:A1000の中に「田中」がいくつあるかは、ワークシート関数を使えば簡単に調べられます。
そう、COUNTIF関数です。
このCOUNTIF関数をVBAから呼び出してやれば、簡単にチェックできますね。
Sub Sample2()
Dim i As Long
For i = 1 To 1000
If WorksheetFunction.CountIf(Range("A1:A1000"), Cells(i, 1)) > 1 Then
Cells(i, 1).Font.ColorIndex = 3
End If
Next i
End Sub
コードも短いですし、実行速度も高速です。