即効テクニック |
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コードも短いですし、実行速度も高速です。