コンテンツにスキップ

Excel VBA 複合キーの重複行をチェックしてメッセージを表示する

Excel VBA で表にある複数列からなるキー項目に、重複チェックをする方法

Dictionary

データを「キー・アイテム」のペアで格納できるオブジェクト

他言語でいうところの、KeyValueで格納できる連想配列

DictionaryのメソッドであるExistsメソッドで重複をチェックに利用する

Usage

Sub sample_Duplicate_2()

    Dim ws As Worksheet
    Set ws = Sheets("Sheet5")

    ' 参照設定 → microsoft scripting runtime を有効にしておく
    Dim checkDic   As Dictionary
    Set checkDic = New Dictionary

    Dim key As String
    Dim i As Long

    For i = 2 To 6

        ' 複合キー
        key = ws.Cells(i, 1) & ws.Cells(i, 2)

        If checkDic. Exists(key) Then
            MsgBox "KEY項目が重複しています。"
        Else
            checkDic.Add key, 0
        End If

    Next

End Sub

Dictionaryを使用するには、参照設定でMicrosoft Scripting runtimeを有効にする必要がある

reference

メニューの参照設定からMicrosoft Scripting runtimeを選択

sheet

サンプルでは、4行目と5行目が重複している

sheet

ループのなかでDictionaryKeyとして値が順番に格納されていることがウォッチから確認できる

sheet

同じkeyが存在した時点で、エラーメッセージが表示される

Reference

Dictionary オブジェクト
Exists メソッド
オブジェクト (Visual Basic for Applications)