Excel関数 逆引き集 | 大文字小文字を無視検索 → SEARCH

Excel
スポンサーリンク

概要

「’Excel’ でも ‘EXCEL’ でも同じように見つけたい」
「検索するときに、大文字・小文字を区別したくない」

こういうときに使うのが SEARCH 関数です。
FIND が「大文字小文字を区別する検索」なのに対し、SEARCH は
大文字・小文字の違いを無視して検索できるのが特徴です。

文字列のどこにあるか(何文字目か)を調べることで、
前後を切り出したり、含まれているかを判定したりできます。


SEARCH 関数の基本

SEARCH の書式は次のとおりです。

=SEARCH(検索文字列, 対象文字列, [開始位置])

検索文字列
探したい文字・文字列です。”excel” や “@”、”-” など。セル参照でも指定できます。

対象文字列
どこから探すか。セル参照(A2 など)か、直接 “This is EXCEL” のように書いても構いません。

開始位置(省略可)
対象文字列の何文字目から探し始めるか。省略すると 1(先頭)から探します。

特徴は次の通りです。
大文字・小文字を区別しない(”Excel” も “EXCEL” も “excel” も同じ扱い)。
見つかった位置(左から数えた文字数)を返す。
見つからなければ #VALUE! エラーになる。


大文字小文字を無視した検索の基本

A2 に「This is EXCEL」という文字列が入っているとします。

「excel」を検索する式は次のようになります。

=SEARCH("excel", A2)

結果は 9 が返ってきます。
8文字目がスペース、9文字目から「EXCEL」が始まるイメージです。

ポイントは、検索文字列を “excel” と小文字で書いても、
対象文字列の “EXCEL”(大文字)をちゃんと見つけてくれることです。

同様に、

=SEARCH("EXCEL", A2)
=SEARCH("Excel", A2)

どちらも結果は 9 になります。
大文字小文字を一切区別せずに検索できている、ということです。


メールアドレスやドメインの検索に使う

メールアドレスや URL などは、大文字小文字を区別しないことが多いです。
SEARCH は、こうしたケースに非常に相性が良いです。

A2 に「User@Example.Com」というメールアドレスが入っているとします。

「@」の位置を調べるには次のように書きます。

=SEARCH("@", A2)

結果は @ の位置(何文字目か)が返ります。

ドメイン名「example.com」が含まれているかを調べたいときは、
大文字小文字を気にせずこう書けます。

=SEARCH("example.com", A2)

“Example.Com” と大文字混じりでも、問題なくヒットします。


前後を切り出す基本パターン(LEFT・MIDと組み合わせ)

SEARCH は「何文字目か」を返すので、その値を使って
LEFT や MID と組み合わせると「前後を切り出す」処理が簡単にできます。

A2 に「User@Example.Com」があるとします。

ユーザー名(@ の前)を取り出す場合は、
「@ の位置 −1 文字ぶんを LEFT」で切り出します。

=LEFT(A2, SEARCH("@", A2)-1)

ドメイン部分(@ の後ろ)を取り出す場合は、
「@ の次の位置から残り全部」を MID で切り出します。

=MID(A2, SEARCH("@", A2)+1, LEN(A2)-SEARCH("@", A2))

SEARCH によって @ の位置がわかるからこそできる分割です。
大文字小文字を気にしなくてよいのが SEARCH の強みです。


特定の単語を含むか判定する(IFERROR と組み合わせ)

SEARCH は、見つからないと #VALUE! エラーになるため、
IFERROR と組み合わせて「含む / 含まない」を判定するのが定番です。

例えば A2 に文章が入っていて、
「excel という単語が含まれていたら ‘OK’、なければ ‘NG’」としたい場合。

まず SEARCH だけを書くとこうなります。

=SEARCH("excel", A2)

含まれていれば 1以上の数値(位置)、含まれていなければ #VALUE! です。

ここに IFERROR を組み合わせて、
エラーを 0 に変換します。

=IFERROR(SEARCH("excel", A2), 0)

こうすると、含まれていれば 1以上、含まれていなければ 0 になります。

この値を使って IF で判定します。

=IF(IFERROR(SEARCH("excel", A2), 0)>0, "OK", "NG")

これで「Excel」「EXCEL」「eXcEl」など、
どんな大小文字の組み合わせでも「excel を含む」と判定できます。


複数回出てくるときの検索(開始位置の活用)

SEARCH は「最初に見つかった位置」を返します。
同じ文字が複数ある場合、2回目以降を探すには「開始位置」を使います。

A2 に「Excel excel EXCEL」という文字列があるとします。

最初に出てくる「excel」(大文字小文字無視)の位置:

=SEARCH("excel", A2)

2つ目の「excel」の位置を知りたい場合は、
最初に見つかった位置の次の文字から再検索します。

=SEARCH("excel", A2, SEARCH("excel", A2)+1)

こうして、「2番目に出てくる ‘excel’」の位置も取得できます。


FIND と SEARCH の違いと使い分け

FIND
大文字小文字を区別して検索する。
“A” と “a” を別の文字として扱う。
コードやパスワードなど、大文字小文字が厳密に違うデータに向く。

SEARCH
大文字小文字を区別しないで検索する。
“A” も “a” も同じとみなす。
文章、メールアドレス、URL、一般的なキーワード検索に向く。

迷ったら、
「大文字小文字を区別したいときは FIND」
「気にしたくないときは SEARCH」
と覚えておくと良いです。


問題1

A2 に「This is EXCEL」という文字列が入っています。
この中で、「excel」(大文字小文字は無視)を検索し、
その開始位置を返す式を書いてください。

=SEARCH("excel", A2)

問題2

A2 に「User@Example.Com」というメールアドレスが入っています。
@ の位置を求める式を書いてください。
大文字小文字は無視して構いません。

=SEARCH("@", A2)

問題3

A2 に「User@Example.Com」というメールアドレスが入っています。
ユーザー名(@ の前の部分)だけを取り出す式を書いてください。
SEARCH と LEFT を組み合わせてください。

=LEFT(A2, SEARCH("@", A2)-1)

問題4

A2 に文章が入っています。
その中に「excel」という単語が(大文字小文字に関係なく)含まれていれば「OK」、
含まれていなければ「NG」と表示する式を書いてください。
SEARCH と IFERROR を組み合わせてください。

=IF(IFERROR(SEARCH("excel", A2), 0)>0, "OK", "NG")

問題5

A2 に「Excel excel EXCEL」という文字列が入っています。
2つ目の「excel」(大文字小文字無視)の開始位置を求める式を書いてください。
SEARCH の開始位置引数を使ってください。

=SEARCH("excel", A2, SEARCH("excel", A2)+1)

SEARCH は「大文字小文字を無視して文字を探すためのルーペ」のような関数です。
位置さえわかれば、LEFT・MID・RIGHT で前後を切り出したり、
IF・IFERROR で「含まれるかどうか」を判定したりと、
文字列処理の基盤として大いに活躍します。

まずは「大文字小文字を気にしなくていい FIND」として感覚をつかんで、
少しずつ他の関数と組み合わせてみてください。

Excel
スポンサーリンク
シェアする
@lifehackerをフォローする
スポンサーリンク
タイトルとURLをコピーしました