最新の日付そのものは =MAX(A2:A10)。最新日付の行のデータを取り出すには =XLOOKUP(MAX(A2:A10), A2:A10, B2:B10)(VLOOKUPなら =VLOOKUP(MAX(A2:A10), A2:B10, 2, FALSE))。「商品ごとの最新」など条件付きは MAXIFS と組み合わせます。
入力履歴や更新記録のように日付が積み重なっていく表から、「一番新しい日付のデータだけ」を取り出したい——実務で非常によくある処理ですが、VLOOKUP単体ではうまくいかず悩みがちです。この記事では、MAX関数で最新日付を求めて検索関数に渡すという基本パターンから、条件付きの最新データ抽出まで解説します。
今回のゴール:入荷履歴から最新の入荷数を取り出す
以下のサンプルデータをExcelシートにコピーしてください。A列の日付は昇順とは限らない前提です。
練習用のExcelファイルはこちらからダウンロードできます:
Excel-latest-date-lookup-1.xlsx(ダウンロード)
| A | B | C | |
|---|---|---|---|
| 1 | 日付 | 商品 | 入荷数 |
| 2 | 4/1 | りんご | 50 |
| 3 | 4/3 | みかん | 30 |
| 4 | 4/5 | りんご | 80 |
| 5 | 4/2 | バナナ | 60 |
| 6 | 4/6 | みかん | 40 |

手順1:最新の日付を求める(MAX関数)
日付はExcel内部では数値(シリアル値)なので、最大値=最新の日付です。
=MAX(A2:A6) → 4/6
手順2:最新日付の行のデータを取り出す
XLOOKUPを使う場合(推奨)
=XLOOKUP(MAX(A2:A6), A2:A6, C2:C6) → 40(4/6の入荷数)
MAXが返した「最新の日付」を検索値にして、同じ行の入荷数を返しています。商品名を取りたければ戻り範囲を B2:B6 に変えるだけです。
VLOOKUPを使う場合
=VLOOKUP(MAX(A2:A6), A2:C6, 3, FALSE) → 40
VLOOKUPでは日付列(検索値を探す列)が範囲の左端にある必要があります。日付が左端にない表では、XLOOKUPを使うのが簡単です。
応用:「商品ごとの最新」を取り出す(MAXIFS)
「りんごの最新入荷数」のように条件付きの最新日付は、MAXIFS関数で求めます。
=MAXIFS(A2:A6, B2:B6, "りんご") → 4/5(りんごの最新日付)
この結果を検索値にして、複数条件のXLOOKUPで該当行を特定します。
=XLOOKUP(MAXIFS(A2:A6, B2:B6, "りんご") & "りんご", A2:A6 & B2:B6, C2:C6) → 80
「日付&商品名」を連結して検索することで、同じ日付に複数の商品がある場合でも正しい行を取り出せます。
注意点:同じ最新日付が複数行ある場合
最新の日付が2行以上あるとき、上の数式は最初に見つかった行を返します。「最後に入力された行」を取りたい場合は、XLOOKUPの検索モード(第6引数)を -1(末尾から検索)にします。
=XLOOKUP(MAX(A2:A6), A2:A6, C2:C6, , 0, -1)
まとめ
最新日付のデータ抽出は「MAX(またはMAXIFS)で日付を求めて、XLOOKUP/VLOOKUPに渡す」の2段構えが基本です。条件付きならMAXIFS+複数条件XLOOKUPの組み合わせを覚えておくと、履歴管理の表で幅広く応用できます。
▶ こんな場合はこちら:XLOOKUPの複数条件検索の基本/XLOOKUPで「以上・以下」の範囲検索をする/日付を和暦に変換する

コメント