Excel(エクセル)SEARCH関数の使い方|文字列を曖昧検索して位置を返す
Excelで特定の文字列を検索して、その位置までの文字数を返す関数にはSEARCHとFINDがあります。ここではワイルドカードによる曖昧検索もできるSEARCH関数の使い方について、できるだけ分かりやすく図解します。
使用関数:SEARCH
SEARCH(サーチ)関数とは?
SEARCHは「探す」「検索する」を意味する英語で、SEARCH関数は指定した文字列が対象となる文字列の何文字目にあるかを検索します。
SEARCHBとの違いは?
文字列操作の関数にはSEARCHと1文字違いのSEARCHBがありますが、この2つの関数の違いは単位です。Excelの文字単位は「文字数」と「バイト数」があり、SEARCHBはバイト数で文字列の位置を求めます。SEARCHBは全角を「2」とカウントするので、日本語の全角文字列の位置はSEARCHの2倍の数値になります。
SEARCHB関数の使い方はこちらで詳しく!
SEARCH関数をワイルドカードで曖昧検索する使い方
SEARCH関数の引数を確認してみましょう。
「数式」タブ→「関数ライブラリ」→「文字列操作」からSEARCHをクリックします。
SEARCH関数の書式の構成はこうなります。「検索文字列」と「対象」が必須、「開始位置」は任意です。
完全一致の検索文字列を指定して、その位置を求めるだけなら、通常SEARCH関数でなく、スペルが短くて入力しやすいFIND関数が使われます。SEARCH関数が使われるのはワイルドカード文字で曖昧検索したい場面が主です。ここでは曖昧検索でSEARCH関数を使う例で、基本的な使い方と引数の確認をしていきましょう。
下図の商品名に「デスク」が含まれるかどうかをSEARCH関数で確認します。「デスク」が含まれていれば数値が返り、含まれていなければエラー#VALUE!が返ります。
第一引数「検索文字列」
検索して位置を取得する文字列を指定します。
- 空白を表す””を指定すると、「開始位置」で指定した値が返ります。「開始位置」省略なら1が返ります
- 英語の大文字と小文字は区別されません。Aとaは同じ文字と見なされます
- 全角文字と半角文字は区別されます。全角スペースと半角スペースは異なる文字と見なされます
この例では「デスク」が含まれているかを曖昧検索で確認するため、第一引数「検索文字列」にワイルドカードのアスタリスクを付けて「“*デスク”」と入力します。
第二引数「対象」
「検索文字列」の位置を検索する元の文字列を指定します。
- 対象の文字を数えるのに全角・半角も大文字・小文字も区別されません。どの文字も1とカウントされます
- 「検索文字列」で指定した値が見つからない時は#VALUE!エラーが返ります
この例では商品名の入った最初のセルをクリックで指定します。
ここまでが必須の引数です。「検索文字列」が一つだけなら、この時点で数式を確定させましょう。他の「商品名」のセルへオートフィルコピーすると、「デスク」が含まれる商品名のセルに数値が返り、他は#VALUE!エラーになります。
IF関数でSEARCH関数の結果を分かりやすく整える
エラー値が邪魔だったり、もっと分かりやすい表示にしたい場合はIFERRORとIF関数にネストして実装します。下図はエラーなら空白、デスクなら「⭕」とIF関数で条件分岐した結果です。
数式 =IF(IFERROR(SEARCH(“*デスク”,A2),””)=””,“”,“◯”)
「対象」に「検索文字列」が複数含まれ、その2番め以降に登場する「検索文字列」の位置を取得したい場合は次の第三引数「開始位置」の指定へ進みます。
SEARCH関数の引数「開始位置」は検索文字列が複数含まれる場合に使う
「開始位置」は「対象」のどの位置から検索を開始するかを、先頭の文字を1として数値で指定します。
- 「対象」に「検索文字列」が複数ある場合に、何番目の「検索文字列」の位置を数えるかを指定します
- 「開始位置」はあくまで「検索を開始する位置」です。「開始位置」より前にある文字列を検索の対象外とするだけで、「開始位置」を指定したとしてもSEARCH関数が数えるのは「対象」の先頭からになります
例えば、半角スペースで区切られた住所を「対象」として、2番目の半角スペースの位置を取得するとします。
「開始位置」にSEARCH関数をネストし、1番目の半角スペースの位置を取得して+1を付加します。これにより1番目の半角スペースの位置の次の文字から検索が開始され、2番目の半角スペースの位置が取得できます。
2番目にある検索文字列(半角スペース)が「対象」の先頭から何文字目の位置にあるかが返りました。
数式 =SEARCH(” “,A2,SEARCH(” “,A2)+1)
「開始位置」を省略した場合は「対象」の先頭位置「1」を指定したものと見なされます。
SEARCH関数とFIND関数の違いについて
SEARCHとFINDは共に特定の文字列の位置を求める文字列操作の関数で、引数も全く同じです。
- FIND関数は英字の大文字・小文字を区別しますが、SEARCH関数は区別しません
- FIND関数はワイルドカードを使った曖昧検索はできませんが、SEARCH関数は曖昧検索ができます
FIND関数の使い方、MID、LEFT、RIGHT、SUBSTITUTE、IFERRORなど他の関数と組み合わせる応用例はこちらで詳しく
通常の使い方なら入力しやすいFIND関数を選択し、英字の大文字・小文字を区別せずに検索したい場合やワイルドカード文字であいまい検索する場合にSEARCH関数を利用するのが一般的かもしれません。
- SEARCHは指定した文字列が対象文字列の何文字目にあるかを検索する関数です
- SEARCH関数の引数「検索文字列」の指定では英字の大文字・小文字は区別しません
- 「検索文字列」に空白文字を指定すると「開始位置」で指定した値が返ります
- SEARCH関数の引数「対象」の文字列で「検索文字列」までの文字数を数える時、大文字・小文字、全角・半角はどれも1とカウントされます
- SEARCH関数の引数「開始位置」は検索文字列が複数含まれる場合に、2番目以降の検索文字列の位置を取得するために指定します
- 「開始位置」は検索を開始する位置で、SEARCH関数が数えるのは常に先頭文字からの文字数です
- SEARCH関数はワイルドカード文字で曖昧検索をすることができます