VLOOKUP関数の近似一致(TRUE)とは?近似一致で9つの方法

VLOOKUP関数の近似一致(TRUE)とは?近似一致で9つの方法 Excel

はじめに:VLOOKUPの引数、お決まりのように「FALSE」と入力していませんか?

「Excelで検索といえば、VLOOKUP関数でしょ?」

そう思ったあなた、大正解!

VLOOKUP関数は私たちの強力な味方です。

でも、ちょっと待ってください!
VLOOKUP関数の数式を組むとき、最後の引数(検索方法)、お決まりのように「FALSE」と入力していませんか?

「え、FALSE以外に何かあるの? TRUEって見たことあるけど、使ったことない…」

そんな、多くの人が見過ごしてきた、しかし実はとてつもなく強力な「TRUE(近似一致)」が、今回の主役です!

今回の記事では、このVLOOKUP(…, TRUE)が最高に輝く「運賃表」を舞台に、その本当の使い方と実力に迫ります。

そして、もちろん、そこは「Excelで暇つぶし」。

王道の解説だけでは終わりません!

同じ問題を解決するための、実用的な代替案から、関数好きの心をくすぐるマニアックな数式パズルまで、合計9つものアプローチで「近似一致」のロジックを徹底的に解き明かしていきますよ!

あなたのVLOOKUPへの理解が、新しい次元へと進化しているかもしれません!

本記事では、無料のWeb版Excelを使用して検証および画像の作成を行っています。Windowsはもちろん、MacやLinuxの方もブラウザさえあれば挑戦できます!

ステップ1:冒険の準備 – 舞台と武器を整える

何事も、まずは準備から。今回の冒険の舞台となる「運賃表」と、検索値を入力するセルを用意しましょう。

1-1. 運賃表の作成

まず、まっさらなシートのA1:B8に、以下のような運賃表を作成してください。

Excel説明画像

この表のポイントは、A列の「距離」が「0, 3, 7, …」と、昇順(小さい順)に並んでいることです。後で詳しく説明しますが、これが近似一致を成功させるための、絶対的なルールになります。

または、以下の数式を任意のセルに貼り付けてください。

={"距離(〜km以上)","運賃(円)";0,210;3,250;7,290;12,330;18,380;25,430;33,490}

1-2. 「名前ボックス」で、検索値に名前をつける

次に、A10セルに「検索値」、B10セルに検索したい距離(例えば「32」)を入力します。

Excel説明画像

ここで一つ、便利な小ワザを紹介しましょう!

B10セルを選択した状態で、数式バーの左側にある「名前ボックス」に、直接「検索値」と入力してEnterキーを押してください。

Excel説明画像

たったこれだけで、B10セルに「検索値」という名前をつけることができました!

ネームマネージャーを開くより、ずっと速くて簡単ですよね?

Excel説明画像

9つのアプローチで、「近似一致」を完全攻略!

準備は整いました!B10セル(名前:検索値)に入力された距離から、正しい運賃をD列に表示させる数式を組み立てていきましょう!

アプローチ1:VLOOKUP(…, TRUE) – 今日の主役!

考えかた

いよいよ主役の登場です。

探したいのは、「32km」に「完全に一致する」行ではありません。

「32km」が含まれる「25km以上33km未満」という範囲に対応する運賃です。

このような「○以上△未満」の検索こそ、VLOOKUPの「近似一致TRUE)」が最も輝く瞬間なのです!

数式と解説

=VLOOKUP(検索値,A2:B8,2,TRUE)

VLOOKUP(検索値, A2:B8, 2, ...): まず、基本的な引数です。

「検索値」(B10セル)を、「A2:B8」の範囲から探し、見つかった行の「2」列目の値を返します。

Excel説明画像

..., TRUE): ここが最大のポイント!検索方法をTRUEにすると、VLOOKUPの動きが「完全一致」から「近似一致」に変わります。

具体的には、「検索値以下の、最も大きい値」を探しにいくのです。

例えば、「32」を探すと、VLOOKUPはA列を上から見ていき…「25」は32以下だな、OK。

「33」は32を超えてしまった、NG!じゃあ、一つ手前の「25」の行が正解だな!と判断し、その行の2列目にある「430」を返してくれるのです。

Excel説明画像

【最重要ルール】
このTRUEを使う場合、検索対象となる列(今回はA列)は、必ず昇順(小さい順)に並べておく必要があります。
これがバラバラだと、VLOOKUPは正しい答えを返せなくなってしまうので、絶対に忘れないでください!

ちなみに、第4引数を省略して =VLOOKUP(検索値,A2:B8,2) と書いた場合も、デフォルトでTRUEとして扱われますよ。

アプローチ2:XLOOKUP (VLOOKUPの正統後継者)

考えかた

VLOOKUPの後継として登場した、より高機能で柔軟なXLOOKUP関数でも、もちろん同じことができます。

数式と解説

=XLOOKUP(検索値,A2:A8,B2:B8,,-1)

XLOOKUP(検索値, A2:A8, B2:B8, ...): XLOOKUPの基本形です。「検索値」を「A2:A8」から探し、対応する値を「B2:B8」から返します。

VLOOKUPと違って、検索範囲と戻り範囲を別々に指定できるのが便利ですね。

Excel説明画像

..., ,-1): 4番目の引数(見つからない場合の値)を省略し、5番目の引数「検索モード」に「-1」を指定します。

これが「検索値以下の、最も大きい項目」を意味し、VLOOKUPTRUEと全く同じ動きをします。

Excel説明画像

【XLOOKUPの検索モード】
XLOOKUPの第5引数は、VLOOKUPよりも多彩です!
・0: 完全一致(デフォルト)
・-1: 近似一致(検索値以下の最大値)今回使用
・1: 近似一致(検索値以上の最小値)
・2: ワイルドカードを使った部分一致

アプローチ3:LOOKUP – 近似一致の元祖

考えかた

実は、VLOOKUPよりも古くから存在するLOOKUP関数は、この「近似一致」がデフォルトの動作なのです。まさに、こういう検索のために生まれてきたような関数です。

数式と解説

=LOOKUP(検索値,A2:A8,B2:B8)

引数はXLOOKUPと似ていますね。

「検索値」を「A2:A8」から探し、対応する値を「B2:B8」から返します。

VLOOKUPと違い、検索する範囲(A2:A8)と、対応する値を返す範囲(B2:B8)が離れていても使えるのが大きな特徴です。

Excel説明画像

この便利な概念は、後継者であるXLOOKUP関数にもしっかりと引き継がれています。

原始的なXLOOKUP、といった感じでしょうか。

アプローチ4:INDEX & MATCH – 汎用性の鬼

考えかた

どんな検索問題も解決してしまう、最強のコンビINDEX & MATCHでも、もちろん対応可能です。

数式と解説

=INDEX(B2:B8,MATCH(検索値,A2:A8,1))

MATCH(検索値,A2:A8,1): ここでもMATCH関数の第3引数「照合の種類」が重要です。

【MATCHの照合の種類】
・1 (または省略): 近似一致(検索値以下の最大値)。検索範囲は昇順である必要があります。今回使用
・0: 完全一致。並べ替えは不要です。 ← 普段よく使うもの
・-1: 近似一致(検索値以上の最小値)。検索範囲は降順である必要があります。

今回は「1」を指定しているので、検索値「32」の場合、A列の6番目にある「25」が該当し、「6」という位置を返します。

Excel説明画像

INDEX(B2:B8, 6): 最後に、INDEX関数が、運賃が並ぶB列の中から「6」番目の値である「430」を取り出します。

Excel説明画像

汎用性、可読性、互換性、どれをとっても最強の組み合わせですね。


…さて、実用的な方法はここまでです。

でも、ここからが「暇つぶし」の本番!
もし、今紹介したLOOKUP系の関数とMATCH関数が、すべて使用禁止になったとしたら…?

あなたなら、どうやってこの問題を解決しますか?


アプローチ5:MAX – 配列計算でロジックを再現

考えかた

配列計算の考え方を使えば、近似一致のロジックを自作できます。

「検索値以下の距離に対応する運賃」だけを残し、その中で「最大値」を取れば、それが求める答えになるはずです!

数式と解説

=MAX((A2:A8<=検索値)*B2:B8)

(A2:A8<=検索値): 距離の列(A2:A8)が「検索値」以下かどうかを判定し、{TRUE;TRUE;...;TRUE;FALSE}のようなTRUE/FALSEの配列を作ります。

Excel説明画像

... * B2:B8: この配列(TRUE=1, FALSE=0)に、運賃の列(B2:B8)を掛け合わせます。すると、条件がTRUEの運賃だけが残り、FALSEの運賃は0になります。{210;250;290;330;380;430;0}のような配列が生まれます。

Excel説明画像

MAX(...): 最後に、この配列の中からMAX関数で最大値を探せば、目的の「430」が見つかる、というわけです!

Excel説明画像

ちなみに、MAXが禁止されても、
=-MIN(-(A2:A8<=検索値)*B2:B8)
のように、負の符号とMIN関数を組み合わせれば、同じことができますよ。

アプローチ6:OFFSET & COUNTIF – 意外なカウンター

考えかた

なんと、COUNTIF関数も近似一致の代わりになります。「検索値以下の距離が、表の中に何個あるか」を数えれば、それがそのまま目的の行の位置になる、という驚きのロジックです。

数式と解説

=OFFSET(B1,COUNTIF(A2:A8,"<="&検索値),0)

COUNTIF(A2:A8,"<="&検索値): 距離の列(A2:A8)の中から、「検索値」(32)以下のセルの個数を数えます。該当するのは「0, 3, 7, 12, 18, 25」の6個なので、結果は「6」になります。

Excel説明画像

OFFSET(B1, 6, 0): OFFSET関数が、B1セル(「運賃」ヘッダー)を基準に、「6」行下に移動した場所にあるセル、つまりB7セルの「430」を返します。

Excel説明画像

アプローチ7:TAKE & FILTER – 新関数の合わせ技

考えかた

最新の動的配列関数を使えば、もっと直感的にできます。

まず「検索値以下の距離」に該当する運賃をすべてFILTERで抽出し、そのリストの一番最後の値をTAKEで取り出す、という考え方です。

数式と解説

=TAKE(FILTER(B2:B8,A2:A8<=検索値),-1)

FILTER(B2:B8,A2:A8<=検索値): まず、FILTER関数が、運賃の列(B2:B8)を、距離が「検索値」以下であるという条件で絞り込みます。

結果として、{210;250;290;330;380;430}という配列が返されます。

Excel説明画像

TAKE(..., -1): 次に、TAKE関数が、この絞り込まれた配列の中から、末尾(-1)の1行だけを取り出します。つまり、一番最後の「430」が答えとなります。

Excel説明画像

アプローチ8:SUM & ROW – 古典的配列計算

考えかた

これも配列計算のロジックを応用した、クラシックな方法です。

まず、検索値が何番目の範囲に属するかを特定し、その「番目」と行番号が一致する場所の運賃だけを合計(抽出)します。

数式と解説

=SUM((SUM((A2:A8<=検索値)*1)=(ROW(A2:A8)-ROW(A1)))*B2:B8)

SUM((A2:A8<=検索値)*1): これはアプローチ5でも使ったテクニックですね。検索値「32」が、リストの「6」番目の範囲に属することを計算します。

Excel説明画像

ROW(A2:A8)-ROW(A1): {2;3;...;8} - 1 という計算で、{1;2;...;7} という、範囲内の相対的な行番号リストを作ります。

Excel説明画像

(6 = {1;2;...;7}): 「6」と、この相対行番号リストを比較し、6番目の場所だけがTRUEになる条件配列 {FALSE;...;TRUE;...} を作ります。

Excel説明画像

... * B2:B8: この条件配列と運賃の列を掛け合わせ、6番目の運賃「430」だけを残します。

Excel説明画像

SUM(...): 最後に合計して、答えを導き出します。

Excel説明画像

アプローチ9:FREQUENCY – 統計関数の逆襲

考えかた

最後は、統計関数であるFREQUENCYを使った、マニアックな方法です。

FREQUENCYは、データがどの階級(ビン)に含まれるかの度数を集計する関数ですが、これを逆用します。

以下の記事でもFREQUENCY関数を紹介しています。

数式と解説

=SUM(FREQUENCY(検索値+10^-10,A3:A8)*B2:B8)

検索値+10^-10: ここが最大のトリックです!

10^-10とは、0.0000000001という、とてつもなく小さな小数です。なぜこんな数を足すのでしょうか?

Excel説明画像

FREQUENCY関数は、区間配列の値を「○以下」としてデータを分類します。しかし、欲しいのは「○以上」の動きです。

そこで、検索値「32」にこのごく僅かな数を足して「32.0000000001」にすることで、FREQUENCYが「32」を次の区間ではなく、手前の区間に正しく分類してくれるようになります。

実務上の数値でこの微差が問題になることはまずない、非常に巧妙なテクニックです。

FREQUENCY(...,A3:A8): これにより、検索値がどの区間に属するかが「1」で示された配列 {0;0;0;0;0;1;0} が返されます。(区間配列がA3から始まっている点もミソです)

Excel説明画像

... * B2:B8: この度数配列と、運賃の列を掛け合わせ、該当する運賃「430」だけを残して合計します。

Excel説明画像
Excel説明画像

まとめ:TRUEを制する者は、VLOOKUPを制す!

普段、お決まりのように「FALSE」と入力していたVLOOKUPの最後の引数。

しかし、「TRUE」には、こんなにも実用的で輝かしい活躍の舞台があったのです。

そして、その「近似一致」という考え方が、いかに多くの関数で、多様なロジックで表現できるか、その奥深さも感じていただけたのではないでしょうか。

実務で使うなら、アプローチ1から4のいずれかでしょう。しかし、アプローチ5以降の関数パズルは、「配列脳」を確実に鍛え、Excelの新しい可能性の扉を開いてくれたはずです。

これからは、「とりあえずFALSE」から卒業し、状況に応じて「TRUE」という最強の武器を使いこなせる、真のVLOOKUPマスターを目指してくださいね!

タイトルとURLをコピーしました