Home » ExcelVBA Rangeオブジェクト » 重複データを削除し重複のないリストを作成するマクロ−AdvancedFilterメソッド

重複データを削除し重複のないリストを作成するマクロ−AdvancedFilterメソッド

対象:Excel2002, Excel2003, Excel2007, Excel2010

「エクセル 重複データ削除 マクロ」
「Excel 重複しないリスト作成 マクロ」
といった検索が、このサイト・インストラクターのネタ帳で行われているのを見かけることがあります。

重複データを削除するマクロ、元データから重複しないデータだけのリストを作成するマクロを探している方の検索です。

Excelではフィルタ機能を使って重複データの削除、重複しないリストの作成ができます。

2003までのExcelならメニュー[データ]−[フィルタ]−[フィルタオプションの設定]から、Excel 2007・2010なら[データ]タブ−[データツール]グループ−[重複の削除]ボタンから操作することで重複データを削除できます。

[スポンサードリンク]
これらの機能を呼ぶマクロをVBA(Visutal Basic for Applications)で作れば、重複しないリストを作成するマクロを作ることもできます。
Sub 重複しないリストを作成する()
 On Error Resume Next
 Selection.AdvancedFilter _
  Action:=xlFilterCopy, _
  CopyToRange:=Application.InputBox(Prompt:="重複しないリストを作成するセルを選択してください。", Type:=8), _
  Unique:=True
End Sub

重複データを削除するマクロ、重複しないリストを作成するマクロといったときに、詳細な仕様はいろいろ考えられます。

例えば、元データを削除して重複しないリストを作成したいというケース、元データはそのままで新規ワークシートに重複しないリストを作成したいというケースなど。

いろいろな仕様が考えられるので、ここではコードがあまり長くならない形で、応用の効きそうなマクロをご紹介しておきます。

重複データの含まれているセル範囲を選択しておいて、上記のマクロを実行すると、リストを作成する先を指定するダイアログが表示されますから、出力先セルを指定すると、重複しないリストが作成されます。

RangeオブジェクトのAdvancedFilterメソッドでフィルタをかけることができ、引数で具体的にどのようにフィルタするのかを指定してします。

元データはそのままで、別のセルにデータをコピーして重複しないリストを作成するために、引数ActionにxlFilterCopyを指定して、引数UniqueをTrueとしています。

どこに作成するかを指定する引数CopyToRangeでは、InputBoxメソッドを使ってダイアログボックスを表示しています。

Excelの標準の機能を呼んでいるだけのマクロですから、仕様はExcelのフィルタ機能に準じています。

元データの1行目は必ず見出し項目として認識されます。

エラーも、フィルタ機能で発生するエラーはそのまま発生します。例えば、セルが一つしか選択されていない状態や、連続していない複数のセルを選択して上記のマクロを実行するとエラーとなります。

またInputBoxで[キャンセル]ボタンをクリックしたときもエラーとなります。

こういったエラーをここではとりあえず全部無視してしまおうと
  On Error Resume Next
を入れてあります。

[スポンサードリンク]

Home » ExcelVBA Rangeオブジェクト » 重複データを削除し重複のないリストを作成するマクロ−AdvancedFilterメソッド

「ExcelVBA Rangeオブジェクト」の記事一覧

検索


Copyright © インストラクターのネタ帳 All Rights Reserved.

.