目次
このチュートリアルでは、Excelの垂直・水平方向の検索を行う新しい関数、XLOOKUPを紹介します。 左検索、最後の一致、複数条件でのVlookupなど、これまでロケット科学の学位を取得しなければ実現できなかったことが、ABCと同じくらい簡単にできるようになりました。
Excelで検索を行う場合、どの関数を使用しますか? 基本的なVLOOKUPか、その横並びのHLOOKUPか? より複雑なケースでは、一般的なINDEX MATCHの組み合わせに頼るか、Power Queryに仕事を依頼するか? 良いニュースは、もう選ぶ必要はありません。これらの方法はすべて、より強力で汎用的な後継関数、XLOOKUPに道を譲ることになります。
XLOOKUPはどのように優れているのでしょうか? 多くの点で優れています!縦と横、左と上、複数の条件で検索でき、1つの値だけでなく、列や行全体のデータを返すこともできます。 Microsoftは30年以上かけて、VLOOKUPの多くの不満なエラーや弱点を克服した堅牢な機能を設計することに成功したのです。
XLOOKUP関数は、Excel for Microsoft 365、Excel 2021、およびExcel for Webでのみ使用できます。
Excel XLOOKUP関数 - 構文と使い方
ExcelのXLOOKUP関数は、範囲または配列から指定した値を検索し、別の列から関連する値を返します。 縦方向と横方向の両方を検索でき、完全一致(デフォルト)、近似(最も近い)一致、ワイルドカード(部分)一致を実行できます。
XLOOKUP関数の構文は次のとおりです。
XLOOKUP(lookup_value、lookup_array、return_array、 [if_not_found], [match_mode], [search_mode])最初の3つの引数は必須で、最後の3つはオプションである。
- ルックアップ値 - 検索する値。
- ルックアップ_配列 - 検索する範囲または配列。
- 戻り値_配列 - 値を返すための範囲または配列。
- 見つからなかった場合 [オプション] - 一致しない場合に返す値です。 省略した場合は、#N/Aエラーが返されます。
- マッチモード [オプション] - 実行するマッチの種類です。
- 0または省略(デフォルト) - 完全一致。 見つからない場合は、#N/Aエラーが返されます。
- -1 - 完全に一致するか、次に小さい値が返されます。 完全に一致しない場合は、次に小さい値が返されます。
- 1 - 完全に一致するか、次に大きな値が返されます。 完全に一致しない場合は、次に大きな値が返されます。
- 2 - ワイルドカード文字にマッチします。
- 検索モード [オプション] - 検索の方向です。
- 1 または省略(デフォルト) - 先頭から最後までを検索します。
- -1 - 逆順に検索します(最後から最初へ)。
- 2 - 昇順にソートされたデータに対するバイナリサーチ。
- -2 - 降順にソートされたデータに対するバイナリサーチ。
マイクロソフトによると バイナリサーチ バイナリサーチは、通常の検索よりはるかに高速ですが、ソートされたデータに対してのみ正しく機能します。
XLOOKUPの基本的な計算式
より深く理解するために、正確な検索を行うための最も単純な形のXlookup式を作ってみましょう。 この場合、最初の3つの引数だけが必要です。
地球上の5つの海洋に関する情報をまとめた表があったとする。 特定の海洋の面積をF1( ルックアップバリュー ) の海域名で、A2:A6 ( ルックアップ_アレイ )、C2:C6 の領域( return_array )の場合、次のような式になる。
=xlookup(f1, a2:a6, c2:c6)
わかりやすく訳すと、「A2:A6からF1の値を検索して、同じ行のC2:C6の値を返す」となります。 列のインデックス番号もソートも、Vlookupの他の馬鹿げた癖もありません!ただ、動くだけです :)
ExcelのXLOOKUPとVLOOKUPの比較
従来のVLOOKUPと比較して、XLOOKUPには多くの利点があります。 どのような点でVLOOKUPより優れているのでしょうか? ここでは、Excelの他のルックアップ関数を圧倒するベスト10の特徴を紹介します。
- 垂直・水平ルックアップ XLOOKUP関数の名前の由来は、縦にも横にも調べることができるためです。
- 右、左、下、上、どの方向も見ることができる VLOOKUPは左端の列、HLOOKUPは上端の行しか検索できませんが、XLOOKUPにはそのような制限はありません。 Excelの悪名高い左検索も、もう苦痛ではありません!
- デフォルトで完全一致 もちろん、必要に応じて、XLOOKUPに近似一致を実行させることもできます。
- ワイルドカードによる部分一致 ルックアップ値の全部でなく、一部しかわからない場合は、ワイルドカードマッチが便利です。
- 逆順で検索する 以前は、最後の出現を得るために、ソースデータの順序を逆にしなければなりませんでした。 サーチモード 引数を -1 にすると、Xlookup 数式の検索を後ろから行い、最後にマッチしたものを返すようになります。
- 複数の値を返す を使って操作することで return_array 引数を使用すると、ルックアップ値に関連するデータの行または列全体を取得することができます。
- 複数条件での検索 .Excel XLOOKUPはネイティブに配列を扱えるので、複数条件でのルックアップが可能です。
- エラー機能がある場合 従来は、#N/AエラーをトラップするためにIFNA関数を使用していたが、XLOOKUPはこの機能を if_not_found 引数は、有効なマッチが見つからなかった場合に、独自のテキストを出力することを可能にします。
- カラムの挿入/削除 VLOOKUPの最も厄介な問題の1つは、戻り値の列がインデックス番号で識別されるため、列を追加または削除すると数式が壊れることです。 XLOOKUPでは、番号ではなく範囲を指定するので、必要なだけ列を挿入したり削除しても何も壊れません。
- 性能向上 VLOOKUPは、テーブル全体を計算に含めるため、実際に必要なセルよりもはるかに多くのセルを処理することになり、ワークシートの速度が低下する可能性があります。 XLOOKUPは、本当に依存するルックアップと戻り配列のみを処理します。
ExcelでXLOOKUPを使う方法 - 計算式の例
以下の例では、XLOOKUPの最も便利な機能を実際に使用しています。 さらに、Excelのルックアップのスキルを新しいレベルに引き上げるような、自明ではない使用方法もいくつか発見できます。
縦と横を見上げる
Microsoft Excelでは、以前は、縦方向に列を検索するVLOOKUPと横方向に行を検索するHLOOKUPの2つの関数があり、それぞれ独自の構文と使用規則を持っていました。
XLOOKUP関数は、同じ構文でどちらも実行できます。 違いは、ルックアップ配列と戻り値の配列に何を指定するかということです。
v-lookupの場合、列を指定する。
=xlookup(e1, a2:a6, b2:b6)
h-lookupでは、列ではなく行を入力します。
=xlookup(i1, b1:f1, b2:f2)
左ルックアップをネイティブで実行
以前のバージョンのExcelでは、INDEX MATCH式が左または上を探す唯一の信頼できる方法でした。 今では、1つの関数で十分なところを2つの関数を組み合わせる必要はありません。 対象の検索配列を指定するだけで、XLOOKUPはその場所に関係なく問題なく処理します。
例として 順位 VLOOKUPは、ルックアップ列の右側の列からしか値を返せないので、ここでつまずく。 Xlookup式なら、簡単に対処できる。
=xlookup(f1, b2:b6, a2:a6)
同じように、行の中で水平方向に検索する場合は、上のように見ることができます。
完全一致と近似一致のXLOOKUP
という5番目の引数でマッチング動作を制御します。 match_mode デフォルトでは、完全一致が実行されます。
近似一致を選択した場合であっても、注意が必要です( match_mode を 1 あるいは -1 に設定した場合でも、この関数は最初に完全一致を検索します。 違いは、完全一致の検索値が見つからなかった場合に何を返すか、です。
Match_mode引数。
- 0 または省略した場合 - 完全一致、見つからなかった場合 - #N/A エラー。
- -1 - 完全一致、見つからなければ次の小さい項目。
- 1 - 完全一致; 見つからない場合 - 次の大きな項目。
完全一致 XLOOKUP
Excelで検索を行う場合、おそらく99%はこのオプションを使用します。 完全一致はXLOOKUPのデフォルトの動作なので、このオプションを省略することができます。 match_mode で、最初の3つの必要な引数のみを指定します。
典型的なシナリオは、ルックアップテーブルにすべての値が含まれているわけではなく、数量ベースの割引、売上ベースのコミッションなどの「マイルストーン」や「境界線」が含まれている場合です。
サンプルのルックアップテーブルは、試験のスコアと成績の相関を示します。 以下のスクリーンショットにあるように、完全一致は特定の学生のスコアがルックアップテーブルの値と完全に一致する場合のみ機能します (行 3 の Christian のように)。 その他の場合はすべて、#N/A エラーが返されます。
=xlookup(f2, $b$2:$b$6, $c$2:$c$6)
N/Aエラーではなく、成績を得るためには、次の例に示すように、近似的に一致するものを探す必要があります。
近似一致 XLOOKUP
近似的なルックアップを行うために match_mode 引数に -1 または 1 を指定します。これはデータがどのように構成されているかに依存します。
この場合、ルックアップテーブルには成績の下限が記載されています。 そこで、以下のように設定します。 match_mode を -1 に設定すると、完全に一致しない場合に次の小さい値を検索します。
=xlookup(f11, $b$11:$b$15, $c$11:$c$15, ,-1)
例えば、Brianのスコアは98(F2)です。 計算式はこのルックアップ値をB2:B6で検索しますが見つかりません。 次に小さい項目を検索すると、90(Aグレードに相当)が見つかります。
もし、ルックアップテーブルに成績の上限が含まれていたら、次のように設定します。 match_mode を 1 にすると、完全一致しない場合に次の大きな項目を検索します。
=xlookup(f2, $b$2:$b$6, $c$2:$c$6, ,1)
98を検索しても見つからず、次に大きな値を検索すると100となり、グレードAに対応する。
ヒント:Xlookup式を複数のセルにコピーする場合、ルックアップまたはリターン範囲を絶対セル参照($B$2:$B$6など)でロックし、変更されないようにします。
部分一致(ワイルドカード)でのXLOOKUP
部分一致の検索を行う場合は match_mode 引数を 2 に設定し、XLOOKUP 関数にワイルドカード文字を処理するように指示します。
- アスタリスク(*) - 任意の文字列を表します。
- クエスチョンマーク(?) - 任意の1文字を表します。
A列にスマートフォンの機種名、B列にバッテリー容量が書かれています。 あるスマートフォンのバッテリーが気になります。 問題は、A列に表示されている機種名をそのまま入力していいのかどうかです。文字をワイルドカードで指定します。
例えば、iPhone Xのバッテリーの情報を得るには、以下の計算式を使います。
=XLOOKUP("*iphone X*", A2:A8, B2:B8, ,2)
または、ルックアップ値の既知の部分をどこかのセルに入力し、そのセル参照とワイルドカード文字を連結する。
=XLOOKUP("*"&E1& "*", A2:A8, B2:B8, ,2)
XLOOKUPの逆順で最後に発生したものを取得する
テーブルの中にルックアップ値が複数回含まれている場合、ルックアップ値として 最後の勝負 .それを行うには、Xlookup式を逆順に検索するように設定します。
検索方向は、6番目の引数で指定します。 サーチモード :
- 1または省略(デフォルト) - 値の先頭から最後までを検索します。つまり、垂直方向の検索では上から下へ、水平方向の検索では左から右へ検索します。
- -1 - 最後の値から最初の値への逆順で検索します。
例えば、ある営業マンが最後に売った商品を返すとする。 そのために、最初の3つの必須引数(G1は ルックアップバリュー B2:B9の場合 ルックアップ_アレイ を、D2:D9を return_array ) の第5引数に -1 を入れてください。
=xlookup(g1, b2:b9, d2:d9, , ,-1)
素直で簡単でしょう?
複数の列や行を返すXLOOKUP
XLOOKUPのもう一つの驚くべき機能は、同じマッチに関連する複数の値を返すことができることです。 これらはすべて標準の構文で、余分な操作なしに行われます
下の表から、目的の営業担当者(F2)に関するすべての情報を取得したい場合、1列や1行ではなく、範囲を指定して return_array の議論になります。
=xlookup(f2, a2:a7, b2:d7)
結果範囲の左上のセルに数式を入力すると、Excel は自動的に隣接する空白セルに結果をこぼします。 この例では、戻り値の配列 (B2:D7) には 3 列の列 ( 日付 , 項目 と 金額 )であり,3つの値はすべてG2:I2の範囲に返される。
結果を縦に並べて列を作りたい場合は、XLOOKUPをTRANSPOSE関数にネストして、返される配列を反転させます。
=transpose(xlookup(g1, a2:a7, b2:d7))
同様の方法で、データの列全体を返すことができます。 金額 この場合、"Amount "を含むセルF1が使用されます。 ルックアップバリュー というカラムヘッダを含む範囲A1:D1。 ルックアップ_アレイ として、すべてのデータを含む範囲A2:D7を設定する。 return_array .
=xlookup(f1, a1:d1, a2:d7)
注意:複数の値が隣接するセルに入力されるため、右または下に十分な空白セルがあることを確認してください。 Excelが十分な空白セルを見つけられない場合、#SPILL!エラーが発生します。
ヒント:XLOOKUPは、複数の項目を返すだけでなく、指定した他の値に置き換えることもできます。 そのような一括置換の例は、こちら:XLOOKUPで複数の値を検索して置換する方法。
複数条件でのXLOOKUP
XLOOKUPのもう一つの大きな利点は、配列をネイティブに扱えることです。 この能力により、複数の条件を直接 ルックアップ_アレイ の議論になります。
XLOOKUP(1, ( criteria_range1 = クライテリア1 ) * ( criteria_range2 = クライテリア2 ) * (...), return_array )この式の仕組み 各基準のテスト結果は、TRUEとFALSEの配列になります。 この配列を掛け合わせると、TRUEとFALSEがそれぞれ1と0に変換され、最終的にルックアップ配列になります。 ご存知の通り、0を掛けると常に0になるので、ルックアップ配列ではすべての基準を満たしている項目だけが1で表されます。 そして、ルックアップ値が「1」なので、Excelでは最初の「1」である ルックアップ_アレイ (最初のマッチ)から値を返します。 return_array を同じ位置に配置しました。
計算式の動きを見るために、D2:D10 から金額を引き出してみましょう( return_array )を、以下の条件で設定した。
- 基準1(日付)=G1
- 基準2(販売員)=G2
- 基準3(項目)=G3
A2:A10に日付があるもの( criteria_range1 )、B2:B10 の販売員名( criteria_range2 )、C2:C10 の項目( criteria_range3 ) の場合、このような式になる。
=xlookup(1, (b2:b10=g1) * (a2:a10=g2) * (c2:c10=g3)), d2:d10)
ExcelのXLOOKUP関数は配列を処理しますが、通常の数式として動作し、通常のEnterキー操作で完了します。
XLOOKUP式で複数の条件を指定する場合は、「equal to」条件だけでなく、他の論理演算子も自由に使用できます。 例えば、G1以前の日付の注文を絞り込む場合は、最初の条件に「<=G1」と記述します。
=XLOOKUP(1, (A2:A10<=G1) * (B2:B10=G2) * (C2:C10=G3), D2:D10)
ダブルXLOOKUP
ある行と列の交点にある値を求めるには、いわゆる ダブルルックアップ または 行列ルックアップ ExcelのXLOOKUPでもそれが可能です。 関数の中に別の関数を入れ子にするだけです。
XLOOKUP( lookup_value1 , ルックアップ_アレイ1 , XLOOKUP( ルックアップバリュー2 , ルックアップ_アレイ2 , データ値 ))この式の仕組み この式は、XLOOKUPが行や列全体を返せることを利用しています。 内部関数がルックアップ値を検索して、関連するデータの列や行を返します。 その配列は、外部関数に return_array .
この例では、特定の営業担当者がある四半期にあげた売上を検索します。 このために、H1(営業担当者名)とH2(四半期)に検索値を入力し、次の式で二元的なXlookupを行います。
=xlookup(h1, a2:a6, xlookup(h2, b1:e1, b2:e6)))
あるいはその逆。
=xlookup(h2, b1:e1, xlookup(h1, a2:a6, b2:e6))
A2:A6は販売員名、B1:E1は四半期(列ヘッダ)、B2:E6はデータ値です。
双方向ルックアップは、INDEX Match式やその他のいくつかの方法でも実行できます。 詳細は、Excelの双方向ルックアップを参照してください。
If Error XLOOKUP
ルックアップ値が見つからない場合、Excel XLOOKUPは#N/Aエラーを返します。 熟練したユーザーにはよく知られており理解できますが、初心者にはやや分かりにくいかもしれません。 標準のエラー表記をユーザーフレンドリーなメッセージに置き換えるには、第4引数の名前に独自のテキストを入力します。 if_not_found .
このチュートリアルで説明した最初の例に戻ります。 誰かがE1に無効な海洋名を入力した場合、次の式で「一致するものはありません」と明示的に通知されます。
=XLOOKUP(E1, A2:A6, B2:B6, "No match is found")
注意事項
- があります。 if_not_found 引数は #N/A エラーのみを捕捉し、すべてのエラーを捕捉しません。
- #N/AエラーはIFNAやVLOOKUPでも処理できますが、構文が少し複雑になり、数式が長くなります。
大文字小文字を区別するXLOOKUP
XLOOKUP関数は、デフォルトでは小文字と大文字を同じ文字として扱います。 大文字と小文字を区別するには、EXACT関数を使用します。 ルックアップ_アレイ の議論になります。
xlookup(true, exact( ルックアップバリュー , ルックアップ_アレイ ), return_array )この式の仕組み EXACT 関数は,ルックアップ配列の各値を比較し,大文字小文字を含めて完全に一致すれば TRUE,そうでなければ FALSE を返します. この論理値の配列は,ルックアップ配列の各値に渡されます. ルックアップ_アレイ その結果、XLOOKUPは上記の配列からTRUE値を探し、戻り値の配列から一致するものを返します。
例えば、B2:B7から価格を取得する場合( return_array ) を、E1 の項目 ( lookup_value) の場合、E2の計算式は
=XLOOKUP(TRUE, EXACT(E1, A2:A7), B2:B7, "見つかりませんでした")
注)検索配列に全く同じ値が2つ以上ある場合(文字の大文字小文字を含む)、最初に見つかったマッチを返します。
Excel XLOOKUPが動作しない
数式が正しく動作しない、またはエラーになる場合、ほとんどの場合、以下の理由が考えられます。
私のExcelではXLOOKUPは使用できません。
XLOOKUP関数は後方互換性がなく、Excel for Microsoft 365とExcel 2021でのみ利用可能で、それ以前のバージョンでは表示されません。
XLOOKUPが間違った結果を返す
明らかに正しい Xlookup 数式が間違った値を返す場合、数式が下方または上方にコピーされたときに、ルックアップまたはリターン範囲が「シフト」した可能性があります。 これを防ぐには、必ず両方の範囲を絶対セル参照($A$2:$A$10 など)でロックしてください。
XLOOKUPが#N/Aエラーを返す
N/Aエラーは、ルックアップ値が見つからないことを意味します。 これを解決するには、近似的に一致するものを検索するか、一致するものがないことをユーザーに通知してください。
XLOOKUPが#VALUEを返すエラー
例えば、横型の配列で検索し、縦型の配列から値を返すことはできません。
XLOOKUPが#REFエラーを返す
2つのワークブック間で検索を行うと#REF! エラーが発生します。
このように、XLOOKUPには多くの素晴らしい機能があり、Excelのほとんどすべての検索に対応できる関数となっています。 読んでくださってありがとうございました!また来週のブログでお会いしましょう。
練習用ワークブック(ダウンロード
Excel XLOOKUP 計算式の例 (.xlsx ファイル)