HOME > 即効テクニック > Excel VBA > データベース関連のテクニック > 重複しているかどうか判定する

即効テクニック

データベース関連のテクニック

重複しているかどうか判定する

(Excel 97/2000/2002/2003/2007)
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   
コードも短いですし、実行速度も高速です。