doodle-on-web

自分で調べたことや、仕事の中で質問されたことなどをまとめています。

送料・割引テーブルを自動判定!MATCH -1 で「次に大きい値」を取得するExcel技

スポンサーリンク


送料・割引テーブルを自動判定!MATCH -1 で「次に大きい値」を取得するExcel技のサンプル ▲ 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と逆(昇順)である点を明記
  • 見出し:「前提:サンプルデータの確認」→「まずこのテーブルで試してみよう」にカジュアル化

関連記事

あわせてチェック