簡単な重複削除

中級VBA

マクロの記録を料理する4

はじめに

 Excelでは、「重複の削除」というコマンドがメニューにあります。
 これを利用すればシートにあるリストから重複を削除する事ができます。
 
 マクロの記録を使えば、VBAで利用するのも簡単です。

マクロの記録で実行

 まず、適当な重複のあるリストをシート上に用意します。この時、一列に並べるようにしましょう。

 ・メニューの「開発」タブから「マクロの記録」を実行します。
 ・A1~A13を選択して、「データ」から「重複の削除」を実行します。
 ・色々とダイアログが出ますがOKで抜けます。
 ・最後に、マクロの記録を終了します。(「記録終了」)
 
 以下のようなコードが作られたと思います。

Sub Macro1()
'
' Macro1 Macro
'

    Range("A1:A13").Select
    ActiveSheet.Range("$A$1:$A$13").RemoveDuplicates Columns:=1, Header:=xlYes
End Sub

 RemoveDuplicatesが重複削除のコマンドになります。
 オプションのColumnsは列数。
 Headerは、先頭行を見出しとするかを示しています。
 
 今回は、これを汎用的な関数にしてみたいと思います。

自作の重複削除関数

 重複削除のコマンドのRemoveDuplicatesは、Range オブジェクトのメソッドなので、Rangeを引数とするプロシージャを作れば良いでしょう。
 今回は、一列でヘッダー見出しは無しにして作ります。

Sub myRemoveDuplicates(rng As Range)
    rng.RemoveDuplicates Columns:=1, Header:=xlNo
End Sub

 では、このプロシージャ(関数)を使ってみましょう。
 先頭の見出し以外をC列にコピーしておいて、実行してみます。

Sub testCode()
    myRemoveDuplicates Range("C2:C13")
End Sub

 重複削除されたリストを得る事が出来ました。

まとめ

 リストの重複削除を行う方法は、いくつかあります。
 ・配列とアルゴリズムで作る
 ・辞書を使って作る
 
 ただ、どれも以外に面倒で初心者にはつらい所です。
 今回のようにマクロの記録からRemoveDuplicatesを見つければ簡単に重複の無いリストを作ることができます。

 ただし、対象のRangeが1行だとエラーとなりますので注意してください。
  ActiveSheet.Range(“$A$1:$A$1”).RemoveDuplicates Columns:=1, Header:=xlNo ’Error

 プログラミングで配列や辞書を使って作ることもできますが、Excelではシートを配列のように使用する事ができるので一時的に利用するのも悪くないでしょう。
 
 その他にフィルター機能を使ってソートする方法などもありますので、試してみると良いでしょう。

タイトルとURLをコピーしました