Excel一覧 Excel操作・関数 データ操作 重複データの削除・強調

【Excel】重複データの中から最新日付のレコードだけを残す方法|関数・Power Query・VBAで実現する実務的アプローチ

Excelでデータを扱う場面において、「同じ顧客が複数行存在し、最新の取引日だけを残したい」「社員の勤怠記録から最終出社日を一覧化したい」など、重複を排除しつつ、特定の条件で最新情報だけを抽出したいというニーズは非常に多くあります。

このような処理を正しく行うには、単に「重複の削除」をするだけでは不十分で、最新の日付を条件として「最も新しい1件」を残すという処理が必要です。

この記事では、「重複削除+最新日付だけを残す」処理をExcelで実現する方法を、以下の3つのアプローチで詳しく解説します。

  • 関数(MAXIFS / FILTERなど)

  • Power Queryによる自動化

  • VBAによる一括処理

どのような場面で役立つのか?

以下のような実務シーンで非常に重宝される処理です。

シーン内容
顧客の最新購入履歴抽出同一顧客の中で最も新しい注文日だけを残す
勤怠管理社員ごとの最終出勤日を一覧化
システムログ集計ユーザーごとの最新ログイン履歴を取得

サンプルデータと目的

まず、以下のような表があるとします:

氏名日付ステータス
山田2024/04/01出勤
佐藤2024/04/02出勤
山田2024/04/05有給
佐藤2024/04/01欠勤

この中から、「名前ごとに最新の日付のレコードだけを残す」というのが目的です。

【Excel】重複削除を正しく行う方法|関数・フィルター・Power Queryを使いこなす実践ガイド

✅ 関数で最新レコードだけを抽出する方法(Excel 365対応)

使用関数:FILTER + MAXIFS

=FILTER(A2:C5, B2:B5 = MAXIFS(B2:B5, A2:A5, A2:A5))

この式は、A列(氏名)が同じ中で、B列(日付)が最大(最新)である行だけを抽出します。

注意点

  • Excel 365 / Excel 2021 以降で対応

  • 名前の並び順が関係するため、ソートをしておくとより確実です

  • 同名で同一日付のデータが複数あれば、すべて返されます(最新が重複している場合)

【Excel】削除せずに最新データだけを別シートへ出力する方法|関数・Power Query・VBAによる自動抽出テクニック

Power Queryで「重複削除+最新日付」処理を自動化する方法

Power Queryを使えば、ノーコードで再利用可能な最新抽出処理が可能です。

手順

  1. データを範囲選択 →「データ」タブ →「テーブルまたは範囲から」

  2. Power Queryエディタが開く

  3. 「ホーム」タブ →「並べ替え」で「日付」を降順にソート

  4. 「名前」列を選択 →「上位の行を保持」→「グループごとに1件保持」

  5. 「閉じて読み込む」で出力

メリット

  • 自動更新に対応(元データが更新されてもワンクリックで再処理)

  • 複数条件(例:部署×社員)でも処理可能

  • 繰り返し処理に強い

【Excel】重複を色付けして視覚的にわかりやすくする方法|条件付き書式・関数・応用設定まで徹底解説

VBAで一括処理する方法(高度な業務自動化)

Excel VBAを使えば、大量のデータに対して高速に処理できます。

サンプルコード(氏名ごとに最新日付のレコードだけを残す)

Sub 最新日付のみ抽出()

Dim dict As Object
Dim lastRow As Long, i As Long
Dim name As String, dateVal As Date
Dim ws As Worksheet, resultWs As Worksheet
Dim outRow As Long

Set dict = CreateObject("Scripting.Dictionary")
Set ws = ActiveSheet
Set resultWs = Worksheets.Add
resultWs.Name = "最新レコード"

lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
outRow = 2

' データスキャン
For i = 2 To lastRow

name = ws.Cells(i, 1).Value
dateVal = ws.Cells(i, 2).Value

If Not dict.exists(name) Then

dict.Add name, i

Else

If ws.Cells(dict(name), 2).Value < dateVal Then

dict(name) = i

End If

End If

Next i

' ヘッダーコピー
ws.Range("A1:C1").Copy resultWs.Range("A1")

' 最新行だけを転記
For Each name In dict.Keys

ws.Range("A" & dict(name) & ":C" & dict(name)).Copy resultWs.Range("A" & outRow)
outRow = outRow + 1

Next name

MsgBox "最新日付のみ抽出が完了しました。", vbInformation

End Sub

特徴

  • 任意のシートを対象にできる

  • 日付が最新の行だけを新しいシートにコピー

  • 1000件以上のデータでも数秒で処理可能

・実務でありがちな「落とし穴」と対策

落とし穴対策方法
日付の形式が文字列になっているセルの書式を「日付」に統一
同じ名前で同一日付の行が複数ある場合FILTER関数やVBAでは全件残る。Power Queryで1件指定が有効
スペース違いなどで「別名」と判定されるTRIM関数やCLEAN関数で前処理を行う

・ 重複削除と最新レコード抽出の違い

処理内容結果
単純な重複削除(同一行)同じ内容の行は1件だけ残す(完全一致のみ)
重複キー+最新日付のレコード抽出指定キー(例:氏名)で最新の日付行を1件残す

・まとめ:重複削除+最新日付抽出をマスターすればExcel処理の幅が大きく広がる!

Excelでの「重複削除+最新日付だけを残す」処理は、単なるデータ整理にとどまらず、最新情報の抽出・履歴の管理・営業活動の効率化など、さまざまな実務に活用できます。

方法特徴
関数(MAXIFS/FILTER)Excel 365以降向け。関数のみで完結。
Power Query再利用可能な自動処理に最適。複数条件にも強い。
VBAマクロ高速かつ大量データ向け。手動操作も最小限に抑えられる

ぜひ目的や利用環境に応じて最適な方法を選び、Excelの可能性を最大限に活用してみてください!

-Excel一覧, Excel操作・関数, データ操作, 重複データの削除・強調