大体で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
        '重複しないリストを、元のシートに貼り付け
        .Copy ActiveSheet.Next.Range("C1")
    End With
    
    Application.DisplayAlerts = False
    '作業用のシートを削除
    ActiveSheet.Delete
    
End Sub

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

重複したデータ

重複したデータ

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

作業用シートを作成して、データをコピーします。

作業用シートを作成

作業用シートを作成して、値をコピーします

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

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

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

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

重複を削除したデータを、元シートに貼り付けます。

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

重複しないリストを元シートに貼り付けます

あとは、作業用シートを削除します。

作業用シートを削除

作業用シートを削除します

作業用シートを削除できました。

これで、重複しないリストを作成することができます。

重複しないリストを作成できた

重複しないリストを作成できました

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

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

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

おわりに

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

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

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

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

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

関連する記事から探す

カテゴリから探す

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

サイト内を検索する

↓キーワードを入力する

アーカイブから探す