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でマクロをつくってみてもいいかもしれませんね。