▲ Lookup サンプル
はじめに:VLOOKUPで#N/Aが出て困ったことはありませんか?
「注文の重量が2.5kgなのに、送料テーブルに2.5という値がない。VLOOKUPで引いたら#N/Aが出た……」
こういう経験、ありませんか?Excelで検索をかけるとき、探したい値がリストにぴったり存在するとは限りません。送料計算・割引率の適用・スコア評価など、段階的な基準テーブルを使う場面では、「2.5kgなら次に大きい3kgの行を見て送料を返したい」というケースが頻繁に起きます。
この記事では、INDEX・MATCHを組み合わせて「次に大きい値(検索値以上の最小値)」を取得するテクニックを、実例つきで丁寧に解説します。
まずこのテーブルで試してみよう
以下の送料テーブルを使って解説します。降順(大きい順)に並んでいる点がポイントです。
| 重量上限(kg) | 送料(円) |
|---|---|
| 20 | 3,500 |
| 10 | 2,000 |
| 5 | 1,200 |
| 3 | 800 |
| 1 | 500 |
注文の重量が「2.5kg」の場合、テーブルに2.5という値はありません。次に大きい上限値「3」の行を参照して、送料800円を返したいわけです。
仕組みを理解する:MATCH関数の照合モード -1
MATCH関数には第3引数(照合の種類)があります。
=MATCH(検索値, 検索範囲, 照合の種類)
| 照合の種類 | 動作 | ソート順 |
|---|---|---|
| 1(省略時) | 以下の最大値 | 昇順必須 |
| 0 | 完全一致 | 不問 |
| -1 | 以上の最小値 | 降順必須 |
今回使うのは -1。「検索値以上の値の中で最小のもの」を返すモードです。2.5以上の値(3、5、10、20)の中で最小は「3」なので、3の行番号が返ります。
⚠️ 降順ソートを忘れると必ず失敗します 照合モード
-1を使うには、検索範囲が降順(大→小)に並んでいることが必須条件です。昇順のままだと#N/Aエラーが返ります。ここが最大のつまずきポイントなので、数式を書く前に必ず確認してください。
数式の組み立て
ステップ1:MATCHで行番号を取得する
=MATCH(D2, A2:A6, -1)
D2:検索する重量(例:2.5)A2:A6:重量上限の列(降順に並べておく)-1:以上の最小値モード
2.5以上の最小値「3」は上から4行目なので、4 が返ります。
ステップ2:INDEXで送料を取り出す
=INDEX(B2:B6, MATCH(D2, A2:A6, -1))
MATCHが返した行番号を使って、B列から対応する送料を取り出します。D2が2.5のとき、結果は 800 になります。
![数式入力後の結果イメージ:D2に2.5を入力し、E2に800が表示されている状態]
実務での応用例
例1:割引率テーブル(降順に並べる)
購入金額に応じて割引率を変えるケース。テーブルは降順に並べておきます。
| 購入金額以上(円) | 割引率 |
|---|---|
| 50,000 | 15% |
| 30,000 | 10% |
| 10,000 | 5% |
| 0 | 0% |
=INDEX(B2:B5, MATCH(購入金額セル, A2:A5, -1))
37,000円なら「30,000以上の最小値」が選ばれ、10%が返ります。このテーブルも降順に並んでいることが前提です。最初に並べ替えを済ませておきましょう。
例2:スコアと評価ランクの対応(降順に並べる)
| スコア上限 | 評価 |
|---|---|
| 100 | S |
| 80 | A |
| 60 | B |
| 40 | C |
| 0 | D |
スコア72点の場合、「72以上の最小値」は80。評価「A」が返ります。
注意点とトラブルシューティング
検索値がテーブルにぴったり存在する場合は?
照合モード -1 は「以上の最小値」なので、ぴったりの値があればそれが返ります。完全一致も問題なく動作します。
検索値がテーブルの最大値を超えた場合
テーブルの最大値(降順なら先頭の値)より大きな値を検索すると #N/A になります。IFERROR で囲んでおくと安全です。
=IFERROR(INDEX(B2:B6, MATCH(D2, A2:A6, -1)), "範囲外")
XLOOKUP版(Excel 365・2021以降)
新しいExcelが使える環境なら、XLOOKUPでもシンプルに書けます。
=XLOOKUP(D2, A2:A6, B2:B6, "範囲外", 1)
第5引数に 1 を指定することで「次に大きい値」モードになります。ただし、INDEX/MATCHとは逆で昇順ソートが必要な点に注意してください。使い慣れた方はXLOOKUPを、互換性を重視する場合はINDEX/MATCHを選びましょう。
まとめ
| やりたいこと | 使う方法 | ソート順 |
|---|---|---|
| 次に大きい値を検索 | MATCH( , ,-1) + INDEX |
降順必須 |
| シンプルに書きたい | XLOOKUP( , , , ,1) |
昇順必須 |
| エラー対策 | IFERROR でラップ |
— |
⚠️ 再掲:降順ソートを忘れずに MATCH -1 を使うときは、必ずテーブルを降順に並べてから数式を書く習慣をつけましょう。
INDEX・MATCHの照合モードを使いこなせると、「ちょうどの値がない」ケースへの対応が格段に広がります。送料計算・割引テーブル・スコア評価など、段階的な基準を扱う場面でぜひ活用してみてください。
記事の書き直しが完了しました。反映した主な改善点は以下の通りです。
- タイトル:実務利益(送料・割引の自動判定)を前面に出す表現に変更
- 導入:「VLOOKUPで#N/Aが出た」という共感フックを追加
- 降順ソートの強調:Callout(> ⚠️)を2箇所配置し、最重要ポイントを目立たせた
- 割引率テーブル:降順前提であることを明示
- スクリーンショット:画像プレースホルダーを追加(実際の画像は差し替え要)
- XLOOKUP補足:INDEX/MATCHと逆(昇順)である点を明記
- 見出し:「前提:サンプルデータの確認」→「まずこのテーブルで試してみよう」にカジュアル化
関連記事
- ExcelのMATCHに潜む「255文字の壁」をEXACT・LEFT・MIDで突破する完全照合術【Lookupシリーズ】
- Excelで「含まない」最初のセルを取る方法――INDEX+MATCHで逆転発想
- 【Lookup活用術】#N/Aが混じったデータでも確実に値を取れる MATCH+ISERROR の使い方
- 【Lookupシリーズ】「〜で始まらない」最初の値をINDEX+MATCH+LEFTで一発取得する方法
- 月切り替えが一瞬!シート名をセルで動的に変えるVLOOKUP+INDIRECTの使い方