【Excel VBA マクロ】重複するデータをボタン1つで削除

Excel VBA 自作マクロその1「重複削除」- 重複するデータをボタン1つで削除

Excelでデータの重複を削除するには、通常、以下のような手順を踏まなければいけません。

  1. 重複する値を持つ範囲を選択する
  2. 「データ」タブ>「重複の削除」を選択する
  3. 重複する値を持つ列にチェックを入れ、「OK」を選択する

たまにしかしない場合はこの方法でもいいですが、頻繁にする場合はこの方法だと手順が多くて面倒です。

そこで今回は、重複するデータをボタン1つで削除するマクロをご紹介します。

このマクロを使えば、通常の手順を大幅に省略して重複削除を行うことができます。

なお、今回ご紹介するマクロでは、

選択中のシートの指定したテーブルの指定した列の中で重複をチェックし、重複があれば上の値を残し、下の値を削除する

といったことができます。

それでは、マクロのコードやマクロの使い方などをご紹介します。

重複するデータをボタン1つで削除するマクロのコード

今回ご紹介するマクロは、以下の2種類です。

メッセージなし 重複がなかった場合や重複削除完了後に何のメッセージも表示されず、ただ処理が実行される
メッセージあり 重複がなかった場合に「重複はありません」というメッセージが、重複削除完了後に「重複を削除しました」というメッセージが表示される

どちらもコピペOKですが、使用は自己責任でお願いします。

メッセージなし

メッセージなしverは以下のようなコードになります。メッセージありverより簡潔です。

Sub 重複削除()

    ActiveSheet.ListObjects(1).Range.RemoveDuplicates Columns:=1, Header:=xlYes

End Sub

対象のテーブルが選択中のシートの1つ目のテーブルじゃない場合は、「ActiveSheet.ListObjects(★)」の★を変更してください(例:2つ目のテーブルなら「2」)。

重複をチェックしたい列がテーブルの1列目じゃない場合は、「Columns:=★」の★を変更してください(例:3列目なら「3」)。

メッセージあり

メッセージありverは以下のようなコードになります。

Sub 重複削除()

    Dim myList   As ListObject
    Dim myNumber As Long
    Dim myRange  As Range 
    Dim i        As Long

    Set myList = ActiveSheet.ListObjects(1)
    myNumber = 1
    Set myRange = myList.ListColumns(myNumber).DataBodyRange
    For i = myList.ListRows(1).Range.Row To _
        myList.ListRows(myList.ListRows.Count).Range.Row
        If WorksheetFunction.CountIf(myRange, Cells(i, myRange.Column)) _
            > 1 Then
            myList.Range.RemoveDuplicates Columns:=myNumber, Header:=xlYes
            MsgBox "重複を削除しました。"
            Exit Sub
        End If
    Next i
    MsgBox "重複はありません。"
    
End Sub

対象のテーブルが選択中のシートの1つ目のテーブルじゃない場合は、「Set myList = ActiveSheet.ListObjects(★)」の★を変更してください(例:2つ目のテーブルなら「2」)。

重複をチェックしたい列がテーブルの1列目じゃない場合は、「myNumber = ★」の★を変更してください(例:3列目なら「3」)。

重複するデータをボタン1つで削除するマクロの使い方

マクロは以下のような手順で使用することができます。

  1. マクロを使用したいExcelファイルを開く
  2. [Alt]+[F11]でVBEを開く
  3. 「挿入」>「標準モジュール」を選択する
  4. 立ち上がったウィンドウにコードを貼り付ける

これでマクロを呼び出せるようになりました!

それでは次に、マクロを呼び出す実行ボタンを作りましょう。

Excelの画面に戻り、「開発」タブ>「挿入」>ボタン(フォームコントロール)を選択します。

Excel VBA 自作マクロその1「重複削除」- 重複するデータをボタン1つで削除

セル上をドラッグしてボタンを作ります。

Excel VBA 自作マクロその1「重複削除」- 重複するデータをボタン1つで削除

ボタンを作ったら「マクロの登録」ダイアログボックスが表示されるので、「重複削除」を選択し、「OK」を押します。

Excel VBA 自作マクロその1「重複削除」- 重複するデータをボタン1つで削除

ボタン上で右クリック>「テキストの編集」を選択し、ボタンの表示名を変更します。

Excel VBA 自作マクロその1「重複削除」- 重複するデータをボタン1つで削除

これで作業は終わりです。今後は「重複削除」ボタンを押すたび、選択中のシート>指定したテーブル>指定した列で重複の削除が行われます。

Excel VBA 自作マクロその1「重複削除」- 重複するデータをボタン1つで削除

「重複削除」ボタンを押す前

Excel VBA 自作マクロその1「重複削除」- 重複するデータをボタン1つで削除

「重複削除」ボタンを押した後

なお、元のファイル形式がxlsm形式じゃない場合は、「名前を付けて保存」からxlsm形式で保存する必要があります。

おわりに

いかがでしたか?

今回は、重複するデータをボタン1つで削除するマクロをご紹介しました。

頻繁にデータの重複チェックを行う方は、ぜひこのマクロをお役立てください。通常の手順で行うより短い時間で作業を終えることができますよ!