← コード一覧へ戻る
実務セル・範囲

COUNTIF 関数で重複しているか判定する

COUNTIFでA2:A11内にA2の値が何件あるか数え、重複を判定します。

実行前に確認

  • COUNTIFは大文字と小文字を区別しません。この例は255文字以内の短い検索値向けです。

1サンプルコード

Sub Example1176()
    Dim ws As Worksheet
    Dim key As String
    Dim n As Long
    Set ws = ThisWorkbook.Worksheets("Sheet1")
    If IsError(ws.Range("A2").Value) Then Exit Sub
    key = CStr(ws.Range("A2").Value)
    If Len(key) = 0 Then
        MsgBox "A2に値を入れてください。"
        Exit Sub
    End If
    key = Replace(Replace(Replace(key, "~", "~~"), "*", "~*"), "?", "~?")
    n = Application.WorksheetFunction.CountIf(ws.Range("A2:A11"), "=" & key)
    MsgBox "一致数: " & n & vbCrLf & "重複あり: " & CStr(n > 1)
End Sub
表で見る処理のイメージ実行前・実行後のセルを見比べる

A2の「りんご」が、A2自身を含めて何件あるか調べます。

A・B・Cは列、1・2・3は行です。例えば「B2」はB列の2行目のセルです。この表は説明用のサンプルです。

実行前

実行前のサンプル。列記号と行番号でセルの位置を確認できます。
A
1商品
2りんご
3みかん
4りんご
5ぶどう
6りんご
7みかん
8桃
9ぶどう
10梨
11桃

実行後

実行後のサンプル。列記号と行番号でセルの位置を確認できます。
A
1商品
2りんご(注目セル)
3みかん
4りんご(注目セル)
5ぶどう
6りんご(注目セル)
7みかん
8桃
9ぶどう
10梨
11桃

色付きは注目する場所です。「—」は未入力、「(空文字)」は数式などが返す空の文字列を表します。

セルの値は変わりません。MsgBoxは「一致数: 3」と「重複あり: True」を改行して表示します。COUNTIFは通常、大文字・小文字を区別しません。

使い方・実行手順を確認する4つの手順で、コードの使い方を確認できます
  1. 1

    練習用のブックを.xlsm形式で保存し、Sheet1という名前のシートを用意します。A2:A11へ重複を含む短い商品名を入れます。

  2. 2

    Alt+F11でVBEを開き、[挿入]→[標準モジュール]へコードを貼り付けます。

  3. 3

    A2が判定する値です。*、?、~は文字そのものとして数えるよう置換しています。

  4. 4

    マクロ内にカーソルを置いてF5で実行します。同じ値が2件以上あればTrueになります。

使っている機能の公式ドキュメント(Microsoft Learn)