業務効率化

VLOOKUPの近似一致(TRUE)で金額帯から送料・等級を自動判定する|階段状の判定表

ExcelMate編集部6分

この記事の要点

  • 「○○円以上は送料いくら」のような階段状の判定は、VLOOKUPの第4引数を TRUE(近似一致)にすると自動化できる
  • 数式は =VLOOKUP(値, しきい値表, 列, TRUE)。しきい値表は必ず昇順(小さい順)に並べる
  • 近似一致は「その値を超えない最大のしきい値」の行を返す。完全一致のFALSEとは挙動が根本的に違う

「3,000円以上は送料500円、5,000円以上は送料無料」のような金額帯ごとの判定を、IFを何重にも重ねて書いていませんか。点数からA・B・Cの評価を出す、売上から歩合率を決める——いずれも同じ「階段状の判定」です。

こうした範囲判定は、VLOOKUP の近似一致(第4引数 TRUE)を使うと、しきい値表を1つ用意するだけで自動化できます。条件が増えてもIFのネストになりません。実際の画面で見ていきましょう。

完成イメージ

左のしきい値表(下限金額→送料)をもとに、右の購入金額から送料を自動判定しています。4,800円は「3,000以上5,000未満」なので500円、7,000円は5,000以上なので無料です。

VLOOKUPの近似一致で購入金額から送料を階段状に判定したExcel画面。D2セルに第4引数をTRUEにしたVLOOKUPを入力し、7000円の購入が送料無料と判定されている
D2 に入力した数式と結果(しきい値表から購入金額に応じた送料を自動判定)

数式の意味

送料のセルに入れているのは、次の数式です。

=VLOOKUP(C2, $A$2:$B$4, 2, TRUE)

引数は通常のVLOOKUPと同じ4つですが、最後を TRUE にしているのがポイントです。

  1. 検索値(C2)… 判定したい購入金額
  2. 範囲($A$2:$B$4)… しきい値表(下限金額と送料)。昇順に並べる
  3. 列番号(2)… 返したい列。ここでは送料
  4. 検索方法(TRUE)… 近似一致。「検索値を超えない最大のしきい値」の行を返す

TRUE のとき、VLOOKUP は「ぴったり一致」ではなく「その値以下で一番近いしきい値」の行を選びます。これが階段状の判定の正体です。

つまずきやすいポイント①:しきい値表は必ず昇順

近似一致は、しきい値表が小さい順(昇順)に並んでいる前提で動きます。順番がばらばらだと、正しい行ではなく途中で見つかった行を返し、誤った送料になります。下限金額を必ず小さい順に並べてください。

つまずきやすいポイント②:「未満」は書かない

「3,000以上5,000未満」の未満側は指定しません。次のしきい値が自動的に上限の役割をします。0・3,000・5,000と並べれば、3,000の行は自動的に「3,000以上5,000未満」を担当し、5,000以上は次の行が拾います。境界値(3,000ちょうど)はその行に含まれます。

よくあるエラーと対処

  • 一番小さい値より下が #N/A … しきい値表の先頭に 0 など最小の下限を入れておくと、すべての値が判定できます。
  • 判定が1段ずれる … 昇順になっていないか、しきい値の数字自体を見直します。境界の考え方(以上・未満)も確認します。
  • コード検索なのに変な値が返る … それは近似一致を使うべきでない場面です。商品コードや名前で引くときは完全一致(FALSE)を使います。

まとめ

VLOOKUP の第4引数を TRUE にすれば、金額帯や点数帯の階段判定が、しきい値表1つで自動化できます。コツは「表を昇順に並べる」「未満は書かない」の2つだけです。IFのネストから解放されます。

「料金表・送料表・等級表をシステム化したい」「判定ルールが複雑で関数では限界」という場合は、ExcelMate のチャット相談でそのままご相談いただけます。料金・相場のページもあわせてご覧ください。

よくある質問

VLOOKUPの近似一致(TRUE)と完全一致(FALSE)の違いは?
FALSEは検索値とぴったり同じ値だけを探し、無ければエラーになります。TRUEは「検索値を超えない最大のしきい値」の行を返すため、金額帯や点数帯のような範囲判定に使えます。コードや名前で正確に引くならFALSE、範囲で区分するならTRUEです。
しきい値表を昇順にしないとどうなる?
近似一致は表が昇順(小さい順)に並んでいる前提で動きます。昇順になっていないと、正しい行ではなく途中で見つかった行を返し、誤った送料や等級になります。しきい値表は必ず小さい順に並べます。
「○以上△未満」の未満側はどう指定する?
未満側は指定しません。次のしきい値が自動的に上限になります。たとえば0・3000・5000と並べれば、3000の行は『3000以上5000未満』を意味し、5000以上は次の行が拾います。境界値(3000ちょうど)はその行に含まれます。
一番小さい値より下が #N/A になる
しきい値表の先頭(最小値)より小さい検索値は対応する行が無く #N/A になります。先頭に0など最小の下限を入れておくと、すべての値が判定できます。

監修・運営者

株式会社KOPS 代表取締役 馬込 浩

馬込 浩株式会社KOPS 代表取締役

業務システムの要件定義〜設計〜実装を一気通貫で手がけ、経営者として自社のバックオフィスも運営。Excel・VBA・Power Query/スプレッドシート自動化の実務経験にもとづき、ExcelMateの記事を監修しています。

運営者情報・監修者プロフィールを見る