XLOOKUP関数はVLOOKUP関数より全般的に扱いやすいですが、この第5引数を指定しないとワイルドカードが使えない、といった点には注意が必要です。
省略または0を指定した場合(完全一致)
次の画像ではF3セルにXLOOKUP関数を入力し、E3セルの値(104)を表から検索して対応する値(かりんとう)を抽出しています。
F3セル
=XLOOKUP(E3,B3:B6,C3:C6)
ここでは一致モード(第5引数)を指定していません。第1引数(104=検索値)を第2引数の範囲(B3:B6=検索範囲)から検索し、見つかった位置に対応する第3引数(C3:C6=戻り範囲)内の値を抽出する、という最も基本的な使い方の例となっています。
次の画像ではE3セルの値を「105」に代えていますが、B3:B6の範囲にこの値はないので、結果はエラーとなります。
このように「検索値と全く同じものがなければ何も抽出されない(エラー)」というのが一致モードを省略した場合の効果です(完全一致検索)。
なお、一致モードとして「0」を指定しても全く同じです。
つまり既定値(デフォルト。指定を省略したときに適用される値)は0であるということです。
ちなみに次の画像では第6引数(検索モード)として「-1」を指定しています。
このような場合でも一致モードの値を指定せずカンマを連ねれば省略したことになり、上記例と同じく完全一致検索になります。
なお第6引数の「-1」は「第2引数の範囲(B2:B6)を下から順に検索する」という意味です。検索値の「105」は上から検索しようが下から検索しようが見つからないので結果は変わらずエラーとなっています。
-1の場合(完全一致またはより小さい直近の値を検索)
次の画像では一致モードを「-1」としています。
検索値である「88」はB3:B6の範囲にはありませんが、それよりやや小さい「80」に対応する「B」が抽出されているのがわかります。
F3セル
=XLOOKUP(E3,B3:B6,C3:C6,,-1)
一致モードを「-1」とすることで、完全一致する値が見つからない場合には検索値より小さい直近の値が検索されます。言い換えれば「検索値以下の値で最も大きいものを検索する」ということになります。
この例ではB列の値のうち検索値の「88」以下で最も大きいものは「80」なので、それに対応する「B」が抽出されています。
なお、一致モードの機能を踏まえて上記の表と関数による判定内容を整理すると次のようになります(最初に該当するものを優先)。
- 得点が90以上ならA
- 得点が80以上ならB
- 得点が60以上ならC
- 得点が0以上ならD
検索値がマイナスの値の場合は「検索値以下の値で最も大きいもの」が見つからないのでエラーとなります。
ちなみに次の画像のように表のデータを上下に並べ替えても一致モードの機能には影響せず、同じ結果となります。
もちろん、意味が分かりにくいのでソートしておくに越したことはありません。
1の場合(完全一致またはより大きい直近の値を検索)
次の画像では一致モードを「1」としています。
検索値である「47」はB3:B6の範囲にはありませんが、それよりやや大きい「60」に対応する「大破」が抽出されているのがわかります。
F3セル
=XLOOKUP(E3,B3:B7,C3:C7,,1)
一致モードを「1」とすることで、完全一致する値が見つからない場合には検索値より大きい直近の値が検索されます。言い換えれば「検索値以上の値で最も小さいものを検索する」ということになります。
この例ではB列の値のうち検索値の「47」以上で最も小さいものは「60」なので、それに対応する「大破」が抽出されています。
なお、上記の表と関数による判定内容を整理すると次のようになります(最初に該当するものを優先)。
- 被害率が5以下なら被害なし
- 被害率が20以下なら小破
- 被害率が40以下なら中破
- 被害率が60以下なら大破
- 被害率が100以下なら全壊
被害率(検索値)が100より大きい場合はエラーとなります。
2の場合(ワイルドカード)
次の画像では一致モードを「2」とし、E3セルの検索値を「*チャーハン*」としています。
「*」は「その位置に0文字以上の文字があること(0文字以上なのでなくてもよい)」を意味する文字です。これにより「『チャーハン』を含む文字列」が検索されます。結果的に「四川風チャーハン」という文字列が検索にマッチし、それに対応する「700」が抽出されています。
F3セル
=XLOOKUP(E3,B3:B6,C3:C6,,2)
一致モードを「2」とすることでワイルドカード(特殊な意味を持つ文字)を使った検索ができます。
ワイルドカードには次の3種類があります。
- 「*」…0文字以上の任意の文字列
- 「?」…1つの文字
- 「~」…「*」「?」「~」の前に置くことで、その文字がワイルドカードとみなされなくなる
例として「チャーハン*」は「チャーハンで始まる文字列」という意味になり、「???チャーハン」は「任意の3文字の後に『チャーハン』が続いて終わる文字列」という意味になります。
上記の例ではE3セル内にワイルドカードを入力させるようにしていましたが、こちらではXLOOKUP関数内(第1引数)にワイルドカードを組み込んでいます。
これにより「E3セルに入力された文字列を含む文字列」が検索されます。
F3セル
=XLOOKUP("*"&E3&"*",B3:B6,C3:C6,,2)