ExcelのXLOOKUPは既定では最初に見つかった一致行を返します。同じ取引先が何度も記録されている場合、最初の一致は最新の取引を意味しません。必要なのはまず「最新」の定義です。日付が最も新しい行なのか、同じ日の中で登録時刻が遅い行なのかを確定し、それに合った式を使います。
同じキーが複数ある場合の取得結果
例としてA列が取引先、B列が受付番号、C列が日付、D列が担当者の一覧を考えます。A2:A5に「A社、B社、A社、A社」、C2:C5に「4月10日、4月12日、4月15日、4月14日」が入っているとします。
=XLOOKUP("A社",A2:A5,D2:D5,"該当なし")
この式が返すのはA社の最初の一致行の担当者です。最後の一致を探すなら検索モード-1を指定できますが、物理的に最後の行=最も新しい日付とは限りません。上の例なら4月14日より前の行に4月15日があっても、逆方向検索では4月14日を選びかねません。
日付と一意キーで最新行を定義する
- C列がExcelの日付シリアル値になっているか確認します。文字列の日付が混じると最大日付の判定に影響します。
- 取引先をG2へ入力し、H2で最大の日付を求めます。
=MAXIFS(C2:C100,A2:A100,G2)
- 同じ取引先・日付の行を抽出します。Microsoft 365/対応する動的配列版なら次を使えます。
=FILTER(A2:D100,(A2:A100=G2)*(C2:C100=H2),"該当なし")
FILTERが複数行を返す場合、最新日付が同じレコードが複数あるということです。勝手に最上行を「真の最新」としないでください。受付時刻列や連番列を別途持ち、同日内の優先順位を定義します。
並べ替え・FILTERなどの方法を比較
| 方法 | 向いている条件 | 注意点 |
|---|---|---|
| XLOOKUP・既定 | 最初に見つかった一致が欲しい | 日付順は保証しない |
XLOOKUP・検索モード-1 |
行の下ほど新しいと明確に管理している | 並べ替え・挿入で順序が変わる |
| MAXIFS+FILTER | 最新の日付に該当する全行を確認したい | FILTER等の対応版が必要、同日複数行を処理 |
| 日付降順に整えた作業用の表 | 入力元を編集せず最新順に確認したい | 表全体で並び替え、日付型を確認 |
「日付の降順に並べてXLOOKUPで先頭を取る」という方法も、入力元の順序を無断変更すると業務上の記録と衝突することがあります。集計用の複製表で試します。
同日複数行があるときの判定ルール
同じ日にA社から2件の注文があれば、日付だけでは一意に決まりません。例えば「登録日時の最大を優先、同時なら受付番号の大きい方」のような事業上のルールを先に決めます。連番が時刻順に採番される保証がないなら、番号の大小も最新の証拠にはなりません。
検算では、対象取引先の全レコード数、最大日付、同日該当件数、採用した一意キーを記録します。元データから選んだ行と抽出結果が一致すれば、単にXLOOKUPの検索方向を変えるより説明可能な「最新」の定義になります。
