データの重複を削除する
やりたいこと
ここにとある猫カフェのとある月の日毎の出勤表があります。(※仮想データです)
この月に出勤したネコの一覧を出力して、ついでに出勤回数も出してみます。
※出勤回数は元の表を数式を使って集計してもいいですが、過去の出勤日は頻繁に変わらないとの想定で値にしています。

以下の記事の中でVBAを使える設定、コードを貼り付ける手順を動画付きで解説しています。
初心者の方はこちらをお先にご覧ください。

VBAで複数セルで改行を一括で入れる
手順の1〜4でVBAを使える準備を記載しています。
こちらからEXCELファイルをダウンロードできます。
ダウンロード手順

1
まずEXCELを新規作成して左の構成でシートを作成してください。
シートの名前は「出勤表」としてください。

2
開発タブの一番左の「Visual Basic」をクリック

3
「Visual Basic Editor」が表示されました。
「プロジェクト-VBAProject」の何もない白い部分を右クリック。
「挿入」-「標準モジュール」をクリック。


5
ここに以下の内容をコピペします。(クリックでコピーできます)
1Private Sub 名簿一覧()
2 '「名簿一覧」シートがない場合、作成する
3 For Each myWs In Sheets
4 If myWs.Name = "名簿一覧" Then
5 'シートが存在する場合はsheetExitラベルにスキップ
6 GoTo sheetExit
7 End If
8 Next
9
10 'シートが存在しない場合は、新しく作成する
11 Worksheets.Add after:=Worksheets(1)
12 ActiveSheet.Name = "名簿一覧"
13
14'シートが存在する場合はここにスキップ
15sheetExit:
16
17 With Sheets("名簿一覧")
18 'オートフィルタを解除する
19 .AutoFilterMode = False
20
21 '名簿一覧シートの内容をクリアする
22 .Range("A1").CurrentRegion.ClearContents
23
24 '出勤表シートの内容を名簿一覧シートにコピーする
25 Sheets("出勤表").Range("B:E").Copy .Range("A1")
26
27 '出勤回数の数式を入れる
28 .Range("E2") = "=COUNTIF(A:A,A2)"
29 '重複計算用の列を作成する
30 .Range("F2") = "=COUNTIF($A$2:A2,A2)"
31
32 'オートフィル機能を使って出勤回数と重複計算用の数式をコピーする
33 .Range("E2").AutoFill Destination:=.Range("E2:E" & .Cells(Rows.Count, 1).End(xlUp).Row), Type:=xlFillSeries
34 .Range("E2:E" & .Cells(Rows.Count, 1).End(xlUp).Row).Calculate
35 .Range("F2").AutoFill Destination:=.Range("F2:F" & .Cells(Rows.Count, 1).End(xlUp).Row), Type:=xlFillSeries
36 .Range("F2:F" & .Cells(Rows.Count, 1).End(xlUp).Row).Calculate
37
38 '数式を値に変換する
39 .Range("E2:E" & .Cells(Rows.Count, 1).End(xlUp).Row).Value = .Range("E2:E" & .Cells(Rows.Count, 1).End(xlUp).Row).Value
40
41 .Range("E1") = "出勤回数"
42
43 '重複回数が1回以上の行をフィルターする
44 With .Range("A1").CurrentRegion
45 .AutoFilter field:=6, Criteria1:=">1"
46 .Offset(1, 0).EntireRow.Delete
47 .AutoFilter
48 End With
49
50 '重複チェックに使った列を削除する
51 .Range("F:F").ClearContents
52
53 'A列の書式のみをE列にコピーする
54 .Range("A1:A" & .Cells(Rows.Count, 1).End(xlUp).Row).Copy
55 .Range("E1:E" & .Cells(Rows.Count, 1).End(xlUp).Row).PasteSpecial Paste:=xlPasteFormats
56
57 'コピー解除
58 Application.CutCopyMode = False
59
60 End With
61
62End Sub
63

6
①先ほどのVisual Basic Editorに戻り、貼り付けたテキストの中のどこでもいいので、 クリック。
(ここでは真ん中らへんをクリック)
②画面上部の実行マーク(
)をクリック。

7
「名簿一覧」シートが作成され、一覧が作成されました。
※
このEXCELを保存するときに、ファイル名.xlsxだと、左のメッセージが表示されます。
「はい」をクリックすると、先ほど作成したVBAは破棄され保存されます。特にVBAが必要なければこちらで。
もし、VBAを保存したい場合は、「いいえ」をクリックして、ファイル名.xlsmとして保存してください。

動作環境について
本サンプルコードは、特定のExcelバージョンで動作確認を行っています。他の環境では動作を保証できません。
バックアップを推奨
実行前に必ずデータのバックアップを行ってください。予期しない不具合やデータ損失が発生する可能性があります。
セキュリティについて
マクロの実行にはセキュリティリスクが伴います。信頼できる環境でのみ使用し、不審なコードの混在に注意してください。
改変・再利用について
本コードの改変・再利用は自由ですが、自己責任でお願いします。改変後の動作保証はできません。
免責事項
本コードの利用によるいかなる損害や不具合についても、一切の責任を負いかねます。