2/14/2022

Excel。VBA。読み込んだデータから重複データを削除した一覧を作りたい【Duplicate deletion】

Excel。VBA。読み込んだデータから重複データを削除した一覧を作りたい

<Excel VBA>

読み込んでみたデータを見たら、重複していることがわかりました。

例えば、次のような表。


 

B列のデータが重複しているわけですね。

このデータから、重複していないデータをF列に抽出したのが、この表です。


確かに、Excelの機能のデータタブにある、「重複の削除」をつかえば、簡単に重複を削除することができます。


ただ、データを読み込ませたあとに、抽出されるようになっていると、より作業効率がいいわけです。


そこで、Excel VBAでマクロをつくってみることにします。


さて、重複はどのようにしたら、いいのでしょうか。


1件目のデータが残りのデータに含まれいないか、確認して、2件目があったら…ということを考えると、プログラムにするのには、とても大変な感じがします。


ところが、RemoveDuplicatesメソッドをつかうことで、簡単に、重複データを削除し抽出することができるのです。


では、次のようなプログラムをつくってみます。


Sub 重複除外リスト()

    Dim i As Long

    Dim lastrow

    lastrow = Cells(Rows.Count, "b").End(xlUp).Row

    

    For i = 2 To lastrow

        Cells(i, "f") = Cells(i, "b")

    Next

    

   Range("f1").CurrentRegion.RemoveDuplicates Columns:=1, Header:=xlYes

End Sub


これを実行した結果が、F列です。


プログラム文を確認しておきましょう。


お馴染みの宣言文です。

Dim i As Long

Dim lastrow


lastrow = Cells(Rows.Count, "b").End(xlUp).Row

この行は、データの最終行の行番号を取得しています。


For i = 2 To lastrow ~ Next

で、見出し行を除いたデータ数分繰り返し処理をしています。

なにを、繰り返しているのかというと、


Cells(i, "f") = Cells(i, "b")

B列のデータをF列にコピーしています。

ここは、色々な書き方がありますので、元データを取っておきたかったための処理です。

Range("f1").CurrentRegion.RemoveDuplicates Columns:=1, Header:=xlYes


Range("f1").CurrentRegion は、F1を起点とした表を対象としています。


RemoveDuplicates は、Columns:=1、つまり、範囲の1列目のデータで重複なものを削除することが出来るメソッドです。

なお、Header:=xlYesとすることで、1行目を見出し行として除外することができます。


RemoveDuplicatesメソッドを知っていることだけで、とても簡単に重複を除くことができます。

データを読み込んで削除する必要がある場合には、Excel VBAでマクロをつくってみてもいいかもしれませんね。