ロゴ
ロゴ
トップ
サービス
実績紹介お知らせブログ資料ダウンロードお問い合わせ
この記事はVBAを使ったことない、初心者向けにVBAの使い方を画像を多めに解説します。
中身を知らなくてもコピペで使える様にしています。
※Microsoft® Excel for Mac バージョン16.93.1です。

データの重複を削除する

やりたいこと

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

以下の記事の中でVBAを使える設定、コードを貼り付ける手順を動画付きで解説しています。
初心者の方はこちらをお先にご覧ください。VBA
VBAで複数セルで改行を一括で入れる
手順の1〜4でVBAを使える準備を記載しています。
こちらからEXCELファイルをダウンロードできます。ダウンロード

手順

VBA
1
まずEXCELを新規作成して左の構成でシートを作成してください。
シートの名前は「出勤表」としてください。
VBA
2
開発タブの一番左の「Visual Basic」をクリック
VBA
3
「Visual Basic Editor」が表示されました。
「プロジェクト-VBAProject」の何もない白い部分を右クリック。
「挿入」-「標準モジュール」をクリック。
VBA
4
「標準モジュール」が追加されました。
VBA
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
説明を表示する
VBA
6
①先ほどのVisual Basic Editorに戻り、貼り付けたテキストの中のどこでもいいので、 クリック。
(ここでは真ん中らへんをクリック)
②画面上部の実行マーク()をクリック。
VBA
7
「名簿一覧」シートが作成され、一覧が作成されました。
VBA
※
このEXCELを保存するときに、ファイル名.xlsxだと、左のメッセージが表示されます。
「はい」をクリックすると、先ほど作成したVBAは破棄され保存されます。特にVBAが必要なければこちらで。
もし、VBAを保存したい場合は、「いいえ」をクリックして、ファイル名.xlsmとして保存してください。VBA
戻る
この作業、生成AIエージェントなら“コピペすら不要”です
フォルダ整理・請求書の読み取り・グラフ作成といった毎回やる面倒な作業は、 いまはコードを書かなくても「日本語でお願いするだけ」でAIが代わりにやってくれます。 実際の画面つきで解説した記事をぜひご覧ください。
AIエージェントの実演記事を読む →
いのうえ
Webエンジニア歴18年。
React|Next.js|TailwindCSS|Java|VBA|PHP
読書好き・猫好き
ご利用にあたっての注意事項
動作環境について
本サンプルコードは、特定のExcelバージョンで動作確認を行っています。他の環境では動作を保証できません。
バックアップを推奨
実行前に必ずデータのバックアップを行ってください。予期しない不具合やデータ損失が発生する可能性があります。
セキュリティについて
マクロの実行にはセキュリティリスクが伴います。信頼できる環境でのみ使用し、不審なコードの混在に注意してください。
改変・再利用について
本コードの改変・再利用は自由ですが、自己責任でお願いします。改変後の動作保証はできません。
免責事項
本コードの利用によるいかなる損害や不具合についても、一切の責任を負いかねます。
MIMUMIMU
株式会社mimu
代表
森田幸輔
設立
2023年3月
事業
ソフトウェア事業
トップサービス実績紹介お知らせブログ資料ダウンロードお問い合わせ
Copyright @mimu. Inc All rights reserved.
プライバシーポリシー
特定商取引法に基づく表記