はじめに:VLOOKUPで降順データを検索すると何が起きるか?
Excelで検索といえば「VLOOKUP」が定番ですが、データが降順(大きい順・新しい順)に並んでいる場合、VLOOKUPは誤った値を返すことがあります。
たとえば昇順前提で設計されたVLOOKUPに降順データを渡すと、本来ヒットすべき行をスキップして別の行を拾ってしまうことがあります。気づかずに使い続けると、評価ミスや集計エラーの原因になりかねません。
この記事では、INDEX・MATCHの組み合わせを使って降順データを正確に検索する2つのテクニックを解説します。
この記事を読み終えると、次の2つが自分でできるようになります。
- 降順の評価テーブルから近似一致で正しい区分を取り出せる
- 日付が新しい順に並んだ履歴データから最新レコードを1つの数式で取得できる
INDEX・MATCHの基本構文
まず構文を確認します。
=INDEX(返す範囲, MATCH(検索値, 検索範囲, 照合の種類))
| 引数 | 説明 |
|---|---|
| 返す範囲 | 値を取り出したい列・行 |
| 検索値 | 探したい値 |
| 検索範囲 | 検索する列・行 |
| 照合の種類 | 0:完全一致 / 1:昇順近似 / -1:降順近似 |
降順検索では、この「照合の種類」の使い分けがすべての起点になります。次のセクションで2パターンを順番に解説します。
降順検索には2種類ある
降順データに対してINDEX・MATCHを使う場面は、大きく次の2つに分かれます。
- ❶ 近似一致(
-1):降順の評価テーブルから区分・ランクを割り当てる - ❷ 完全一致(
0):降順の履歴データから最新のレコードを取り出す
それぞれ具体例で見ていきましょう。
❶ 近似一致(-1):降順の評価テーブルから区分を取り出す
なぜ -1 が必要なのか
MATCHの照合の種類1は昇順を前提とした近似一致です。降順データに1を使うと誤った行を拾ってしまいます。降順データには必ず-1を使ってください。
-1を指定すると、MATCHは検索値以上の値の中で最小のものがある行を返します。
具体例:売上評価テーブルから評価を取り出す
以下のような降順に並んだ評価テーブルがあるとします(B2:C6)。
| 売上(万円)以上 | 評価 |
|---|---|
| 1000 | A評価 |
| 800 | B評価 |
| 600 | C評価 |
| 400 | D評価 |
| 0 | E評価 |
社員の売上が「750万円」の場合、正しい評価は何でしょうか?
750万円は「600万円以上800万円未満」に該当するため、C評価が正解です。
=INDEX(C2:C6, MATCH(750, B2:B6, -1))
-1を指定すると、MATCHは「750以上の値の中で最小のもの=600」がある行(3行目)を返し、結果としてC評価が取得されます。
⚠️ 注意:
-1を使う場合、検索範囲は必ず降順に並んでいなければなりません。昇順データに使うと誤った結果になります。
エラーが発生するケースと対処法
-1を使った近似一致では、検索値が範囲内の最小値(この例では0)より小さい場合に#N/Aエラーが発生します。マイナスの売上など想定外の入力に備えるにはIFERRORで囲みます。
=IFERROR(INDEX(C2:C6, MATCH(A2, B2:B6, -1)), "対象外")
さらに堅牢にしたい場合は、MAX関数で検索値の下限を保証する方法もあります。
=IFERROR(INDEX(C2:C6, MATCH(MAX(A2, 0), B2:B6, -1)), "対象外")
MAX(A2, 0)とすることで、A2がマイナス値でも0として検索し、E評価(最低区分)を返すことができます。入力値の性質に合わせて使い分けてください。
❷ 完全一致(0):降順の履歴データから最新レコードを取り出す
なぜ完全一致でも降順が活きるのか
MATCHは完全一致(0)の場合、検索範囲の先頭から順に走査し、最初にヒットした行を返します。 データが日付の新しい順(降順)に並んでいれば、最初にヒットするのは自動的に最新のレコードです。
この動作を利用することで、複雑な集計関数を使わずに最新データを取り出せます。
具体例:顧客ごとの最新受注金額を取得する
| 日付 | 顧客名 | 受注金額 |
|---|---|---|
| 2024/06/01 | 山田商事 | 500,000 |
| 2024/05/15 | 田中工業 | 300,000 |
| 2024/04/20 | 山田商事 | 200,000 |
| 2024/03/10 | 田中工業 | 450,000 |
日付が新しい順に並んでいるこのデータで、「山田商事」の最新受注金額を取り出す数式はこうなります。
=INDEX(C2:C5, MATCH("山田商事", B2:B5, 0))
MATCHが先頭から走査するため、山田商事の最初のヒットは1行目(2024/06/01)の500,000円です。降順に並んでいることで、意図せずとも最新データが取得できます。
VLOOKUPでも同様の動作をしますが、INDEX・MATCHなら返す列を自由に指定できるため、顧客名の左側にある日付列を取り出す、といった応用も容易です。
XLOOKUPとの比較:どちらを選ぶべきか
Excel 2021以降やMicrosoft 365ではXLOOKUPが利用できます。
| 機能 | INDEX・MATCH | XLOOKUP |
|---|---|---|
| 降順近似一致 | -1を指定 |
search_mode=-1で末尾から検索 |
| 古いExcelでの互換性 | ◎ | △(2019以前は非対応) |
| 記述のわかりやすさ | △ | ◎ |
| 複数列の返し方 | 工夫が必要 | 直感的 |
ファイルを社内外で共有する場合や、相手のExcelバージョンが不明な場合はINDEX・MATCHの方が安全です。逆に自分専用のファイルでMicrosoft 365を使っているなら、XLOOKUPの方が記述がシンプルです。
まとめ:降順検索のポイント5選
- 降順の近似一致には
MATCHの第3引数を-1にする -1使用時は検索範囲が必ず降順に並んでいることを確認する-1は「検索値以上の最小値」にヒットする。評価・ランク割り当てに最適- 完全一致(
0)は先頭から走査するため、降順データで自動的に最新レコードを取得できる - エラー対策は
IFERROR+必要に応じてMAXで下限を補正する
降順データは売上ランキング・受注履歴・評価テーブルなど、日常業務で頻繁に登場します。今回解説した2つのパターンを手元のExcelで試して、ぜひ実務に役立ててください。
【Lookupシリーズ】では、VLOOKUP・HLOOKUP・INDEX・MATCH・XLOOKUPなど検索関数を体系的に解説しています。他の記事もあわせてご覧ください。