Excel 大文字と小文字を区別して「検索」する7つの方法

Excel 大文字と小文字を区別して検索する7つの方法 Excel

はじめに:「EXCEL」と「excel」、Excelは同じものだと思っています!

Excelでデータを検索するとき、VLOOKUPMATCH関数は、私たちの強力な味方です。

でも、ちょっと待ってください!

もし、あなたのリストに「EXCEL」と「excel」と「Excel」が混在していたら…?

Excelの検索関数は、初期設定では「大文字と小文字を区別しない」という、親切(おせっかい?)な仕様になっています。

そのため、"excel"を探しているのに、最初に見つかった"EXCEL"の値を返してしまう…という悲劇が起こるのです!

「え、じゃあどうやって、パスワードみたいに『厳密に』一致する値だけを探せばいいの?」

今回の記事は、まさにそのお悩みにお応えします!

前回、大文字小文字を区別して比較する7つの方法を紹介しました。

厳密一致で値検索」をテーマに、初心者が陥りがちな「失敗例」と、その壁を打ち破る「正解例」をセットで探求していく、超実践的な関数パズルです。

この冒険が終わる頃には、あなたの検索スキルが、間違いなく爆上がりしていることでしょう!

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

ステップ1:冒険の準備 – 巧妙な罠が仕掛けられたリスト

何事も、まずは準備から。まっさらなシートのA1セルを起点に、以下の6行2列のリストを作成してください。

以下の数式をA1セルに貼り付けてください。

={"名前","数値";"EXCEL",100;"01_excel",200;"excel",300;"Excel",400;"excel97",500}

Excelの説明画像

このリストには、私たちの検索を阻む、数々の罠が仕掛けられています。

【今回のゴール】

検索値は「excel」(すべて小文字)。
A列から「excel」と“厳密に”一致する行を探し出し、B列の正しい値「300」を導き出すこと!

【前提条件】
今回のリスト(A2:A6)には、検索対象の文字列(”EXCEL”, “01_excel”など)に重複はないものとして話を進めますね!


7つのアプローチで、「厳密一致」の壁を突破せよ!

さあ、検索の旅に出ましょう。まずは、多くの人が試して、そして罠にはまる「失敗例」からご覧ください。

アプローチ1:検索の現在の定番 XLOOKUP

失敗例:XLOOKUPの「厳密一致」オプションの罠

=XLOOKUP("excel",A2:A6,B2:B6,,3)

「お、XLOOKUPには第5引数に[一致モード]があるぞ!『3 – 厳密一致』を使えば完璧だ!」

と思いきや、この数式が返すのは「200」です。

なぜでしょう?

実は、XLOOKUPのオプション「3」は、「大文字と小文字を区別する、ワイルドカードを含む検索」なのです!

つまり、”excel”という文字列が含まれていればヒットしてしまいます。

表の上から検索し、最初に見つかる「01_excel」がヒットしてしまい、「200」が返るのです。

これは紛らわしい!

Excelの説明画像

正解例:XLOOKUP + EXACT

ではどうするか?答えは、厳密比較の専門家、EXACT関数を組み合わせることです。

=XLOOKUP(TRUE,EXACT(A2:A6,"excel"),B2:B6)

1. EXACT(A2:A6,"excel"): まず、EXACT関数が、A2:A6の各セルと"excel"を厳密に比較します。

結果は {FALSE;FALSE;TRUE;FALSE;FALSE} というTRUE/FALSEの配列になります。

Excelの説明画像

2. XLOOKUP(TRUE, ..., B2:B6): 次に、XLOOKUP関数(デフォルトは完全一致)で、このTRUE/FALSE配列から「TRUE」を探します。

3番目に見つかるので、対応するB列(B2:B6)の3番目、「300」が正しく返されます!

Excelの説明画像

メリット: 非常に直感的で、XLOOKUPの高速検索の恩恵も受けられます。

デメリット: 比較的新しいExcel(Microsoft 365、Excel 2021以降)でしか使えません。

アプローチ2:検索の古典派 LOOKUP

失敗例1:演算子「=」の罠

=LOOKUP(2,1/(A2:A6="excel"),B2:B6)

「1を論理値で割る」という、古くから伝わる「最後の行」検索テクニックです。

しかし、A2:A6="excel"の比較演算子「=」は、大文字と小文字を区別しません!

Excelの説明画像

そのため、{"EXCEL";"excel";"Excel"}がヒットしてしまいます。

LOOKUPは「最後に見つかったもの」を返す性質があるため、リストの最後にある「Excel」の行、つまり「400」が返ってきます。

Excelの説明画像

失敗例2:FIND関数の罠

=LOOKUP(2,1/ISNUMBER(FIND("excel",A2:A6)),B2:B6)

「そうだ、FIND関数なら大文字と小文字を区別するぞ!」と、これを使ってもまだ罠があります。

FIND関数は「部分一致」でも見つけてしまうのです!

Excelの説明画像

{"01_excel";"excel";"excel97"}の3つがヒットし、LOOKUPは最後に見つかった「excel97」の行、つまり「500」を返してしまいます。

Excelの説明画像

正解例:LOOKUP + EXACT

やはり、ここでも救世主はEXACT関数です。

=LOOKUP(2,1/EXACT(A2:A6,"excel"),B2:B6)

1. EXACT(A2:A6,"excel"): {FALSE;FALSE;TRUE;FALSE;FALSE} という厳密なTRUE/FALSE配列を作ります。

2. 1/...: 1をこの配列で割ることで、{#DIV/0!;#DIV/0!;1;#DIV/0!;#DIV/0!} という、エラーと「1」が混在した配列を作ります。

Excelの説明画像

3. LOOKUP(2, ..., B2:B6): LOOKUP関数で、この配列から「2」を探します。

LOOKUPは、検索値(2)以上の値がない場合、エラーを無視して配列の中の最後の数値(今回は「1」)を見つけてくれます!

そして、その位置(3番目)に対応するB列の値、「300」を返します。

Excelの説明画像

メリット: 非常に古いExcelでも動作する、互換性の高いテクニックです。

デメリット: 1/0LOOKUP(2,...)といったロジックは、知らない人には解読不能です。

アプローチ3:実務の定番 INDEX & MATCH

失敗例1:MATCH関数の罠

=INDEX(B2:B6,MATCH("excel",A2:A6,0))

ご存知、最強コンビのINDEX & MATCH。

しかし、MATCH関数(第3引数[0]=完全一致)も、VLOOKUPや「=」演算子と同じく、大文字と小文字を区別しません

そのため、リストの最初に見つかる「EXCEL」にヒットし、1番目の値「100」が返されます。

Excelの説明画像

失敗例2:XMATCH関数の罠

=INDEX(B2:B6,XMATCH("excel",A2:A6,3))

「ならば、XMATCHの厳密一致オプション『3』だ!」

残念!アプローチ1で見たように、これは「部分一致」も拾ってしまいます。

最初に見つかる「01_excel」にヒットし、2番目の値「200」が返されます。

Excelの説明画像

正解例:INDEX + MATCH + EXACT

ここでも、EXACT関数との組み合わせが光ります。

=INDEX(B2:B6,MATCH(TRUE,EXACT(A2:A6,"excel"),0))

1. EXACT(A2:A6,"excel"): {FALSE;FALSE;TRUE;FALSE;FALSE} の配列を作ります。

2. MATCH(TRUE, ..., 0): この配列から、「TRUE」という値を「完全一致(0)」で探します。3番目に見つかるので、「3」という位置を返します。

Excelの説明画像

3. INDEX(B2:B6, 3): INDEX関数が、B列の3番目の値、「300」を返します。

Excelの説明画像

メリット: 非常に汎用性が高く、多くのExcelバージョンで使える、実務的な「正解」の一つです。

デメリット: 数式が少し長くなりますが、ロジックは明確です。

アプローチ4:みんな大好き VLOOKUP

失敗例:VLOOKUP(…, FALSE)の罠

=VLOOKUP("excel",A2:B6,2,FALSE)

もう、説明不要かもしれませんね。

VLOOKUPの「FALSE(完全一致)」も、大文字と小文字を区別しません

最初に見つかる「EXCEL」にヒットし、「100」が返されます。

Excelの説明画像

正解例:VLOOKUP + CHOOSE + EXACT

「それでも、私はVLOOKUPを使いたいんだ!」というあなたへ。

意地でも使う方法があります。

=VLOOKUP(TRUE,CHOOSE({1,2},EXACT(A2:A6,"excel"),B2:B6),2,FALSE)

1. EXACT(A2:A6,"excel"): {FALSE;FALSE;TRUE;FALSE;FALSE} の配列を作ります。

2. CHOOSE({1,2}, ..., B2:B6): CHOOSE関数を使い、メモリ上に新しい2列の仮想テーブルを作ります。

1列目にはEXACTの結果、2列目にはB列の数値リストを配置します。

Excelの説明画像

3. VLOOKUP(TRUE, ..., 2, FALSE): VLOOKUPで、この仮想テーブルの1列目から「TRUE」を完全一致で探し、2列目の値「300」を返します。

Excelの説明画像

メリット: 意地でもVLOOKUPが使えます。

デメリット: 本来のVLOOKUPの使い方から大きく逸脱しており、非常に難解です。

アプローチ5:FILTER (最新・最シンプル)

考えかた

比較的新しいExcel(Microsoft 365、Excel 2021以降)を使っているなら、もう悩む必要はありません。

FILTER関数が、この問題を簡単に解決します。

正解例

=FILTER(B2:B6,EXACT(A2:A6,"excel"))

「B2:B6の範囲を、EXACT(A2:A6,"excel")TRUEである行だけ、絞り込んでください」

これ以上ないほど、やっていることが明確な数式です。結果はもちろん「300」です。

Excelの説明画像

メリット: 最もシンプルで、可読性が抜群に高いです。

デメリット: 比較的新しいExcel(Microsoft 365、Excel 2021以降)でしか使えません。

アプローチ6:SUM + EXACT (配列計算)

考えかた

もし、返したい値が「数値」であり、かつ検索値に「重複がない」ことが保証されているなら、SUM関数を使った配列計算も有効です。

重複を考慮する場合、「合計 / 個数」を計算する必要があります。
今回は、重複がない前提で話を進めるので、この計算は省略しますね!

正解例

=SUM(EXACT(A2:A6,"excel")*B2:B6)

1. EXACT(A2:A6,"excel"): {FALSE;FALSE;TRUE;FALSE;FALSE} の配列を作ります。

2. ... * B2:B6: このTRUE/FALSE(1/0)の配列と、B列の数値配列を掛け合わせます。
{0*100; 0*200; 1*300; 0*400; 0*500}{0;0;300;0;0}

Excelの説明画像

3. SUM(...): 最後に、この配列をSUM関数で合計します。結果は「300」です。

Excelの説明画像

メリット: 比較的古いExcelでも(CSE確定すれば)動作し、ロジックも分かりやすいです。

デメリット: 厳密に一致するものが2つあると、それらの合計が返ってしまうため、重複がない前提が必要です。あるいは、重複処理が必要です。

アプローチ7:EXACT関数禁止! (究極の関数パズル)

考えかた

「結局、EXACT関数がないとダメじゃないか!」

そんな声が聞こえてきそうです。

分かりました。

最後は、EXACT関数すら使わずに、文字コードレベルで比較する究極の数式です。

正解例

=LET(
a,MAX(LEN(A2:A6)),
b,SEQUENCE(,a),
c,IFERROR(UNICODE(MID(A2:A6,b,1)),0),
d,IFERROR(UNICODE(MID("excel",b,1)),0),
SUM((MMULT((c=d)*1,SEQUENCE(a)^0)=a)*(B2:B6))
)

1. a: リスト内の最大文字長を取得します。(例: 8)

Excelの説明画像

2. b: 1から9までの連番 {1,2,...,8} を作ります。

Excelの説明画像

3. c: A2:A6の各セルを1文字ずつ分解し、文字コードに変換した2次元配列を作ります。(5行8列)

Excelの説明画像

4. d: 検索値”excel”を文字コードに変換した配列を作ります。(1行8列)

Excelの説明画像

5. (c=d)*1: cdを比較し、文字コードが一致する場所だけが1になる5×8の配列を作ります。

Excelの説明画像

6. MMULT(..., SEQUENCE(a)^0)=a: 各行の「一致した文字数」を合計し、MAX(LEN(A2:A6))で求めた「8」と等しいか比較します。

Excelの説明画像

7. SUM(... * (B2:B6)): この判定がTRUEになった行(A4セルのみ)のB列の値「300」を抜き出して合計します。

Excelの説明画像

メリット: 最高の達成感が得られます。

デメリット: 実務で使ったら、未来の自分(または同僚)が泣きます。

まとめ:Excelの「常識」を疑え!

普段、当たり前に使っている「=」や「VLOOKUP(…,FALSE)」が、実は大文字と小文字を区別していない、という事実に驚かれたのではないでしょうか。

この「Excelの常識」を知っているかどうかで、データの正確性が大きく変わってきます。

実務で厳密な比較が必要になったら、必ず「EXACT」関数を思い出してください。

比較的新しいExcelをお持ちなら、アプローチ5のFILTER関数が、最もシンプルで可読性が高く、最強の解決策となるでしょう。

今回の関数パズルが、皆さんの「検索スキル」を爆上げするきっかけになれば、これほど嬉しいことはありません。

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