目次
ExcelのVLOOKUPで大文字と小文字を区別する方法を説明し、大文字と小文字を区別する他のいくつかの数式を実演し、各関数の長所と短所を指摘します。
Excelで縦書きのルックアップを行う関数は何か、Excelユーザーなら誰でも知っていると思います。 そう、VLOOKUPです。 しかし、ExcelのVLOOKUPが大文字小文字を区別せず、つまり小文字と大文字を同じ文字として扱うことを知っている人は少ないのではないでしょうか?
VLOOKUPが大文字小文字を区別できないことを示す簡単な例を示します。 セルA2に「bill」、A4に「Bill」があるとします。 以下の式は、ルックアップ配列の最初に来るので「bill」をキャッチし、B2からマッチする値を返します。
=VLOOKUP("ビル", A2:B4, 2, FALSE)
今回は、VLOOKUPの大文字と小文字を区別する方法を紹介します。 また、Excelで大文字と小文字を区別する他の関数もいくつか紹介します。
大文字小文字を区別するVLOOKUP式
前述のように、通常のVLOOKUP式は大文字と小文字を区別しませんが、以下の例のように、Excel VLOOKUPを大文字と小文字を区別する方法があります。
があるとします。 アイテムID 問題は、IDには小文字と大文字の両方が含まれることです。 たとえば、A4 (001Tvci3u) と A5 (001Tvci3U) の値は、最後の文字がそれぞれ "u" と "U" だけ異なっています。
001Tvci3 "を検索する場合 U "に関連する$90を出力します。 u "001Tvci3 "の前に来るからです。 U 「しかし、これでは意味がありませんよね?
=vlookup(f2, a2:c7, 2, false)
Excelで大文字小文字を区別して検索するには、VLOOKUP関数、CHOOSE関数、EXACT関数を組み合わせます。
vlookup(true, choose({1,2}, exact() ルックアップバリュー , ルックアップ_アレイ ), return_array ), 2, 0)この汎用式は、あらゆる場面で完璧に機能します。 また、調べることもできます。 右から左へ このシンプルでエレガントなソリューションを提案したPouriyaに敬意を表します。
我々の場合、実際の計算式は次のようになる。
F3で価格を引き出すこと。
=vlookup(true, choose({1,2}, exact(f2, a2:a7), b2:b7), 2, false)
コメントを取得する場合 F4:
=vlookup(true, choose({1,2}, exact(f2, a2:a7), c2:c7), 2, false)
注)Excel 365以外のExcelバージョンでは、配列式としてのみ機能するため、Ctrl + Shift + Enterを忘れずに押して正しく完了させてください。 Excel 365では、動的配列のサポートにより、通常の式としても機能します。
この処方の仕組み
その核となるのが、EXACTをネストしたCHOOSE式である。
choose({1,2}, exact(f2, a2:a7), c2:c7)
ここで,EXACT 関数は F2 の値と A2:A7 の各値を比較し,大文字小文字を含めて全く同じであれば TRUE,そうでなければ FALSE を返します.
{false;false;false;true;false;false}となります。
については インデックス・ナンバー CHOOSE の引数には,配列定数 {1,2} を使用します。 その結果,この関数は上の配列の論理値と C2:C7 の値を組み合わせて,次のような 2 次元配列を生成します.
{FALSE,155;FALSE,186;FALSE,90;TRUE,54;FALSE,159;FALSE,28}
VLOOKUP関数はそれを受けて、2次元配列の1列目(論理値で表される)からルックアップ値(TRUEである)を探し、2列目から一致するものを返し、それが探している価格となるのです。
vlookup(true, {false,155;false,186;false,90;true,54;false,159;false,28}、2、0)
大文字・小文字を区別するXLOOKUP式
Microsoft 365のユーザーは、もっと簡単な数式で大文字小文字を区別した検索をExcelで行うことができます。 お察しの通り、VLOOKUPの後継であるXLOOKUP関数について話しているのですが、これはより強力な関数です。
XLOOKUPは検索配列と戻り配列を別々に操作するので、前の例のような2次元配列のトリックは必要ありません。 単純に、EXACTを使用して ルックアップ_アレイ の議論になります。
xlookup(true, exact( ルックアップバリュー , ルックアップ_アレイ ), return_array , "Not found")最後の引数("Not found")は任意です。 これは、マッチするものが見つからなかった場合に返す値を定義するだけです。 これを省略すると、数式が何も見つからなかった場合に標準の#N/Aエラーが返されます。
このサンプル・テーブルでは、大文字と小文字を区別する XLOOKUP 式を使用します。
F3での価格を知るために
=XLOOKUP(TRUE, EXACT(F2, A2:A7), B2:B7, "見つかりませんでした")
コメントを抽出するには F4:
=XLOOKUP(TRUE, EXACT(F2, A2:A7), C2:C7, "見つかりませんでした")
この処方の仕組み
前の例と同様に、EXACTはTRUEとFALSEの値の配列を返し、TRUEは大文字小文字を区別したマッチを表します。 XLOOKUPは上記の配列からTRUE値を検索して、マッチしたものを返します。 return_array もし、ルックアップカラムにまったく同じ値が2つ以上ある場合(文字の大文字小文字を含む)、この式は最初に見つかったマッチを返しますので、ご注意ください。
XLOOKUPの制限 は、Excel 365とExcel 2021でのみ利用可能です。
SUMPRODUCT - 大文字小文字を区別して検索し、一致する数字を返す
見出しからおわかりのように、SUMPRODUCTは大文字小文字を区別して検索することができるExcelの別の関数ですが、返すことができるのは 数値 そうでない場合は、INDEX MATCH の例を参照してください。
ExcelのSUMPRODUCTは、指定した配列の成分を掛け合わせ、その積の合計を返します。 大文字と小文字を区別して検索したいので、EXACT関数を使って最初の配列を取得します。
=sumproduct((正確には(a2:a7,f2) * (b2:b7)))
残念なことに、SUMPRODUCT関数は、テキスト値を乗算できないため、テキストマッチを返すことができません。 この場合、以下のスクリーンショットのセルF4のように#VALUE!エラーが表示されます。
この処方の仕組み
VLOOKUP の例と同様に、EXACT 関数は F2 の値と A2:A7 のすべての値を照合し、大文字小文字を区別して一致した場合は TRUE、そうでない場合は FALSE を返します。
sumproduct(({false;false;true;false;false}*{155;186;90;54;159;28}))。
ほとんどの数式で、Excel は TRUE を 1 に、FALSE を 0 に評価します。したがって、SUMPRODUCT が 2 つの配列の要素を同じ位置で乗算すると、非マッチ (FALSE) はすべて 0 になります。
SUMPRODUCT({0;0;0;54;0;0})
その結果、この数式はA列の大文字と小文字の完全一致に対応する数値をB列から返します。
SUMPRODUCT 制限 : は数値のみを返すことができる。
INDEX MATCH - すべてのデータ型に対して大文字と小文字を区別して検索します。
ようやく、すべてのExcelのバージョンとすべてのデータセットで動作する、制限のない大文字小文字を区別する検索式の実現に近づきました。
この例が最後になるのは、ベストは最後に取っておくというだけでなく、これまでの例で得た知識によって、大文字小文字を区別するMATCH INDEX式をよりよく理解できるようになるかもしれないからです。
VLOOKUPの代わりにINDEXとMATCH関数の組み合わせは、より柔軟で汎用性の高いものとしてExcelでよく使われます。 次の記事は、この2つの関数がどのように一緒に機能するかをうまく説明しています(できれば :)- Using INDEX MATCH instead of VLOOKUP.
ここでは、そのポイントだけを再確認しておきましょう。
- MATCH 関数は、指定されたルックアップ配列からルックアップ値を検索し、その相対位置を返します。
- ルックアップ値の相対位置は、そのまま 行番号 の引数で、その行から値を返すように指示します。
テキストケースを認識する数式は、従来のINDEX MATCHの組み合わせにもう1つの関数を追加するだけです。 明らかに、EXACT関数が再び必要です。
INDEX( return_array , match(true, exact( ルックアップバリュー , ルックアップ_アレイ ), 0))F3での本当の計算式は
=index(b2:b7, match(true, exact(a2:a7, f2), 0))
F4では、こちらを使用しています。
=index(c2:c7, match(true, exact(a2:a7, f2), 0))
Excel 365以外のバージョンでは、配列の数式としてしか機能しないので、必ずCtrl + Shift + Enterキーを一緒に押して入力してください。 正しく実行されると、数式は以下のスクリーンショットに示すように中括弧で囲まれるようになります。
この処方の仕組み
これまでの例と同様に、EXACT は A2:A7 の各値が F2 の値と完全に一致する場合に TRUE を返します。 ルックアップバリュー MATCHの場合、大文字小文字を区別した完全一致の相対位置を返すので、INDEXがB2:B7からの一致を返すのに必要なのはまさにこれである。
大文字・小文字を区別する高度なルックアップ式
上記のINDEX MATCHの計算式は完璧に見えますが、実はそうではありません。 その理由を説明します。
この式は何を返すのだろうか? 何も返さない。 では、実際に何を返すのかを見てみよう。
=index(c2:c7, match(true, exact(a2:a7, f2), 0))
おっと、この数式はゼロを返している! たぶん、テキスト値だけを扱う場合はあまり重要ではないでしょう。 しかし、ワークシートに数字が含まれていて、その中に本当のゼロがある場合は、これは問題です。
実は、先に説明した他のルックアップ式もすべて同じように動作します。 しかし、今は非の打ちどころのない式が欲しいのではないでしょうか?
大文字と小文字を区別するINDEX MATCH式を完璧にするために、リターンセルが空白かどうかをチェックするIF関数でラップし、この場合は何も返さないようにするのです。
=IF(INDIRECT("C"&(1+MATCH(TRUE,EXACT(A2:A7, F2), 0))"", INDEX(C2:C7, MATCH(TRUE,EXACT(A2:A7, F2), 0)), "")
上記の式で
- "C "はリターン欄です。
- を "1 "にする数字です。 相対位置 MATCH 関数で返されたセルの 実セルアドレス .
例えば、MATCH関数のルックアップ配列はA2:A7で、セルA2が配列の最初のセルなので相対位置は「1」です。 しかし、実際にはルックアップ配列は2行目から始まります。 この違いを補うために1を加え、INDIRECT関数が正しいセルから値を返せるようにします。
以下のスクリーンショットは、改良された大文字と小文字を区別するINDEX MATCH式の動作を示しています。
リターンセルが空の場合、数式は何も出力しません(空文字列)。
戻り値のセルに 0 が含まれている場合、数式は 0 を返します。
リターンセルが空白のときに何かメッセージを表示したい場合は、IFの最後の引数の空文字列("")を何らかのテキストに置き換えてください。
=IF(INDIRECT("C"&(1+MATCH(TRUE, EXACT(A2:A7, F2)), 0)"", INDEX(C2:C7, MATCH(TRUE, EXACT(A2:A7, F2), 0)), "There is nothing to return, sorry.").
大文字・小文字を区別してVLOOKUPを行う簡単な方法
Ultimate Suite for Excelのユーザーは、大きくて複雑なテーブルの検索をより簡単に、ストレスなく行うことができる特別なツールを利用できます。 最も優れているのは、2つのテーブルを結合する際に大文字と小文字を区別するオプションがあることで、以下の例ではそれを実際に使っている様子を紹介しています。
からQty.を取り出したいとします。 ルックアップ テーブルを メイン テーブルで、一意のアイテムIDに基づく。
テーブルのマージウィザードを実行し、以下のステップを実行することです。
- 新しいデータを取り込むメインテーブルを選択します。
- 新しいデータを探すルックアップテーブルを選択します。
- キーカラムを1つ以上選択します(ここではアイテムID)。 また、必ず 大文字小文字を区別したマッチング ボックスを使用します。
しばらくすると、期待通りの結果が得られるはずです :)
以上、テキストの大文字と小文字を考慮してExcelで調べる方法でした。 読んでくださってありがとうございました!また来週のブログでお会いしましょう。
練習用ワークブック(ダウンロード
大文字・小文字を区別するVLOOKUPの例(.xlsxファイル)