大体でIT

-ちょっと使えるネタを紹介-

大体でIT

Excel VBAで、重複したデータを削除する方法について、ご紹介します。重複の削除ができると、重複しないリストを選択用のプルダウンとして使ったり、データ解析として使用したりできます。具体的なVBAコードを使って、解説していきます。

はじめに

この記事では、重複したデータを削除する方法について、ご紹介します。

重複データの削除は、エクセルの機能で「重複の削除」を使うと簡単です。

VBAコードで「重複の削除」機能を使うには、「RemoveDuplicates」を使います。

重複の削除は、選択用のプルダウンに使ったり、データ解析に使ったり便利です。

では、重複の削除について、具体的なVBAコードを使って解説していきます。

この記事で紹介すること

  • 重複データを削除する方法

目次から見たい項目へ移動すると便利ですよ。

目次

ポイントとなるVBAコード

初めに、重複の削除について、ポイントとなるVBAコードをまとめておきます。

VBAコードだけ確認したい場合に、ご活用ください。

'重複を削除
ActiveSheet.Range("A1").CurrentRegion.RemoveDuplicates Columns:=1, Header:=xlYes

では、解説していきます。

VBAで重複したデータを削除

重複したデータを削除する方法について、解説します。

重複したデータの削除は、エクセルの機能で、「重複の削除」を使うと簡単にできます。

この「重複の削除」機能を、エクセル使う場合と、VBAコードを記載する場合について解説します。

エクセルの機能で「重複の削除」を使う

重複したデータの削除は、「重複の削除」機能を使うとできます。

では、エクセルの機能「重複の削除」で重複データを削除してみます。

重複したデータを用意しました。

重複したデータ

重複したデータを用意

まず、この表全体を選択します。

表全体を選択

重複を削除したい表全体を選択

タブの「データ」→「重複の削除」を選択します。

重複の削除をクリック

重複の削除をクリック

「重複の削除」という画面が出てきます。

「重複の削除」の画面

重複の削除という画面が出てくる

この画面で、「先頭行をデータの見出しとして使用する」にチェックを入れます。

先頭行をデータの見出しとして使用

先頭行をデータの見出しとして使用するにチェックを入れる

「OK」をクリックします。

この操作で、重複したデータを削除して、重複しないリストを作成することができます。

重複したデータを削除

重複しないリストが抽出される

重複したデータを削除できました。

重複しないリストが作成されています。

かなり便利です。

RemoveDuplicatesを使う

つづいて、この「重複の削除」をVBAコードを使って実行してみます。

「重複の削除」は、「RemoveDuplicates」を使います。

VBAコードはこのような感じになります。

Sub TEST1()
    
    '重複を削除
    ActiveSheet.Range("A1").CurrentRegion.RemoveDuplicates Columns:=1, Header:=xlYes
    
End Sub

入力は、「範囲.RemoveDuplicates Columns:=行数, Header:=xlYes」という形です。

では、先ほどと同じ重複したデータを用意しました。

重複したデータ

重複したデータ

この表で、VBAコードを実行して、重複したデータを削除してみます。

重複したデータを削除

RemoveDuplicatesを使って、重複したデータを削除した結果

重複したデータが削除されました。

VBAコードも1行で書けるので、かなり簡単です。

複数列でRemoveDuplicatesを使う

複数列で、「重複の削除」をしてみます。

複数列のデータがすべて一致するものが、重複データとなります。

なので、複数列のデータがすべて一致したデータを削除します。

2列で「重複の削除」をするVBAコードは、次のようになります。

Sub TEST2()
    
    '2列分のデータで重複を削除
    ActiveSheet.Range("A1").CurrentRegion.RemoveDuplicates Columns:=Array(1, 2), Header:=xlYes
    
End Sub

1列目と2列目のデータで、「重複の削除」をしたいので、「Columns:=Array(1, 2)」と入力しています。

「Columns:=Array(1列目, 2列目)」という感じですね。

では、2列のデータで、重複したデータを用意しました。

2列の重複したデータ

2列のデータで重複したデータ

2列目と6列目の「佐藤」と「一郎」が重複しています。

では、2列で「重複の削除」をしてみます。

2列のデータで重複したデータの削除

2列のデータで重複したデータを削除した結果

2列のデータで重複したデータを削除できました。

もちろん、3列でも4列でもできます。

5列の表で、2列目と4列目のデータの中で、重複したデータを削除する、というのもできます。

自由自在です。

ForとIfの方法と比較

「ForとIfで重複データを削除する方法」と、「RemoveDuplicates」とで、実行速度を比較してみます。

10,001行まで重複したデータを入力した表を用意しました。

10,001行の重複データを用意

10001行まで重複した表を用意

ForとIfで重複したデータを削除するVBAコードです。

ForとIfを使って重複データを削除

Sub TEST3()
    
    With ActiveSheet
        
        '最終行を取得
        Dim LastRow
        LastRow = .Cells(Rows.Count, "A").End(xlUp).Row
        
        '最終行から2行目までループ
        For i = LastRow To 2 Step -1
            '2行目から最終行までループ
            For j = 2 To LastRow
                '自分の行以外で、同じデータの場合
                If i <> j And .Cells(i, "A") = .Cells(j, "A") Then
                    '行を削除
                    .Rows(i).Delete
                    Exit For 'ループを終了
                End If
            Next
        Next
        
    End With
    
End Sub

実行してみます。

ForとIfで重複したデータを削除した結果

重複したデータを削除することができました。

かかった時間は、「35.9 秒」となりました。

つづいて、「RemoveDuplicates」を使って重複データを削除してみます。

「RemoveDuplicates」で重複データを削除

「RemoveDuplicates」で、重複データを削除するVBAコードです。

Sub TEST4()
    
    '重複を削除
    ActiveSheet.Range("A1").CurrentRegion.RemoveDuplicates Columns:=1, Header:=xlYes
    
End Sub

では、実行します。

RemoveDuplicatesで重複データを削除した結果

重複データを削除できました。

かかった時間は、「0.0156 秒」です。

速すぎる。

ということで、重複データの削除をする場合は、「RemoveDuplicates」を使った方が簡単で、かなり速いです。

重複データの削除は作業用シートを使うと便利

重複したデータの削除は、作業用シートを使うと便利です。

重複したデータの削除は、インデックスリストみたいな感じで、別の表として使うことが多いです。

なので、作業用シートで重複を削除すると、元の表を変更することがないので便利です。

作業用シートを使う

作業用シートは、元のシートをコピーして作成します。

元のシートの前に、作業用のシートを作成するVBAコードです。

Sub TEST5()
    
    '左の方に、シートをコピー
    ActiveSheet.Copy before:=ActiveSheet
    
End Sub

実行します。

作業用シートを作成

元のシートの前に作業用のシートを作成した結果

元のシートSheet1の前に、「Sheet1 (2)」を作成できました。

作業用シートから元のシートを参照する場合は、「Next」を使います。

Sub TEST6()
    
    '右のシート名を表示
    MsgBox ActiveSheet.Next.Name
    
End Sub

元シートの名前を取得してみます。

Nextで元シートを参照

Nextで元シートの名前を取得

元シートの名前「Sheet1」を取得できました。

という感じで、作業用シートを使うことができます。

作業用シートを使って重複の削除

作業用シートを使って、重複を削除してみます。

手順としては、

  • ①作業用シートにデータをコピー
  • ②作業用シートで重複を削除
  • ③元のシートに重複削除したデータを貼り付け
  • ④作業用シートを削除

という流れです。

作業用シートを使って、重複を削除するVBAコードです。

Sub TEST7()
    
    '前の方に、シートをコピー
    ActiveSheet.Copy before:=ActiveSheet
        
    With ActiveSheet
        '重複を削除
        .Range("A1").CurrentRegion.RemoveDuplicates Columns:=1, Header:=xlYes
        '重複しないリストを、元のシートに貼り付け
        .Range("A1").CurrentRegion.Copy .Next.Range("C1")
    End With
    
    Application.DisplayAlerts = False
    '作業用のシートを削除
    ActiveSheet.Delete
    
End Sub

重複したデータを用意しました。

重複したデータ

重複したデータ

では、VBAコードを実行します。

作業用シートにデータをコピーして、重複したデータを削除します。

作業用シートで重複したデータを削除

作業用シートで重複したデータを削除

作業用シートで、重複したデータを削除できました。

あとは、元の使用していたシートに、重複を削除したデータを貼り付けて、作業用シートを削除します。

元のシートにデータを貼り付け

元のシートに重複しないリストを貼り付けて、作業用シートを削除

元の表は、そのままで、重複を削除したリストを作成することができました。

あとは、重複を削除したリストを使って、プルダウンを作ったりいろいろできます。

こんな感じで、「重複の削除」はかなり使えます。

おわりに

この記事では、重複したデータを削除する方法について、ご紹介しました。

重複したデータの削除は、「RemoveDuplicates」を使うとできます。

この「RemoveDuplicates」は、エクセルの機能で、「重複の削除」を使っています。

VBAコードもシンプルで、実行速度も速いので、重複データの削除をしたい場合は、「RemoveDuplicates」が便利です。

参考になればと思います。最後までご覧くださいまして、ありがとうございました。

関連する記事から探す

カテゴリから探す

カテゴリから見たい項目を探すと便利ですよ。

アーカイブから探す