重複データを非表示するマクロ

重複データを非表示

3行マクロ 18回

重複データを非表示するマクロ

Excel 2013 基本技44回 重複データを非表示にする」で重複データを非表示する方法を紹介しましたが、非表示するだけで、重複データを削除したわけではありません。今回は、マクロの記録によって、重複データを非表示にしてから、別シートに結果のコピーを貼り付けるまでのマクロを作成します。
(サンプルファイルは、こちらから 3行マクロ18回サンプルデータ
Excelバージョン:Excel2016201320102007

マクロの記録でフィルタオプションの設定を

まず表全体を範囲選択してから、マクロの記録を開始します。
マクロの記録
マクロの名前をつけ、保存先を個人用マクロブックにします。
個人用マクロブック
Excel 2013 基本技44回 重複データを非表示にするの手順でデータタブをクリックして、並べ替えとフィルタグループにある、詳細設定をクリックします。
フィルタオプションの設定ダイアログボックスが表示されたら、重複するレコードは無視するにチェックを入れてOKをクリックします。
重複するレコードは無視する
重複が非表示になった表をコピーして
重複データが非表示に
シートを追加して、貼り付けます。
新規シートに貼り付け
貼り付けたら、マクロの記録は終了します。
マクロの記録終了
では、次に出来上がったコードを見てみましょう。

マクロの記録でフィルタオプションの設定

コードを見てみましょう
VBA
コードを見ると、マクロの記録で選択した範囲Range("B2:E26")を選択していますが、汎用的に使うために、Selectionに変更しましょう。
コード修正
範囲をSelectionに変更して、もう1回範囲を選択している重複コードを削除しました。
Selection
マクロのコードです。
 Sub 重複削除()
    Selection.AdvancedFilter Action:=xlFilterInPlace, Unique:=True
    Selection.Copy
    Sheets.Add After:=ActiveSheet
    ActiveSheet.Paste
End Sub
 
コードを修正していますので、使用する時は、予め表全体を選択しておいてから、マクロを実行してください。
次は、重複行は、不要と判断して行ごと削除してしまいます。

重複行を削除する

ここまでは、重複行を非表示にして、重複しない行だけを別シートにコピーするというマクロのコードを作成しました。
複数列からなる1行のデータ のすべてが一致した場合には、その行は不要であるとし削除します。

重複を削除するには

この場合は、データタブから、データツールグループにある、重複の削除をクリックします。
重複行を削除するマクロ1
すると、重複の削除ダイアログが表示されるので、重複が含まれる列を選択します。今回は、列4つとも選択しています。
重複行を削除するマクロ2
OKをクリックすると、重複行が削除されます。
重複行を削除するマクロ3

マクロのコードは

この手順をマクロで記録します。コードは以下のようになりました。
Sub Macro2()
    Selection.CurrentRegion.Select
    ActiveSheet.Range("$B$2:$E$26").RemoveDuplicates Columns:=Array(1, 2, 3, 4), _
        Header:=xlYes
End Sub
重複行を削除するマクロ4
このコードを汎用性の高いものにするために、以下のように修正します。列全体を選択することで、行数を意識しないで済みます。使うときは、そのデータの列をRangeで指定し、Arrayでどの列に重複があるのか指定してやります。
Sub 重複削除()
    ActiveSheet.Range("B:E").RemoveDuplicates Columns:=Array(1, 2, 3, 4), Header:=xlYes
End Sub
動画で詳しく解説しています。