Excel(エクセル)のSEARCH関数は、指定した文字が何文字目にあるかを確認する時に使用します。
今回はSEARCH関数の使い方と、実務に役立つ事例を詳しく紹介します。
SEARCH関数とは?
SEARCH関数の読み方は、「サーチ関数」です。
英語「SEARCH」が「探す」という意味なので、SEARCH関数は指定した文字が左端から何番目にあるかを調べる関数です。
例えば、「東京都新宿区西新宿」という住所から「都」という文字が先頭から何文字目にあるか、といったことを調べることができます。
「‐」(ハイフン)や「,」(カンマ)、「_」(アンダーバー)、「 」(空白)などの記号の位置を調べるときにもよく利用されます。
また、SEARCH関数とMID関数を組みあわせて使うことで、「東京都新宿区西新宿」を「東京都」と「新宿区西新宿」に分割する、といったこともできます。
SEARCH関数とFIND関数との違いは2点
早速ですが、SEARCH関数と似た関数に、FIND関数というものがあります。
FIND関数は、SEARCH関数と同じく、探したい文字が何文字目にあるかを検索する関数で、書式も引数も全く同じです。
=SEARCH(検索文字列,対象,[開始位置])
=FIND(検索文字列,対象,[開始位置])
ただ、この2つの関数には機能的に2点だけ異なるところがあるので、それぞれの違いを紹介します。
2つの関数の違い
異なる点①:SEARCH関数はワイルドカード文字(*、?)が使えるが、FIND関数は使えない
異なる点①:SEARCHは大文字と小文字を区別できないが、FIND関数は可能
その1.ワイルドカード文字の利用
FIND関数よりSEARCH関数が優れている点は、「?」や「*」のワイルドカード文字を文字の位置の検索に使用できることです。
例えば、上の図のように、「-〇A」(※〇は任意の文字)の文字の位置を検索しようとしたとき、SEARCH関数は「-BA」を検索の対象としますが、FIND関数はできません。
このように、部分一致する文字の位置を検索するときは、SEARCH関数を使用しましょう。
⇒SEARCH関数をワイルドカードで使った事例はこちらへジャンプ
ワイルドカード文字の使い方は以下の記事で詳しく紹介していますので、合わせて参考にしてください。
その2.大文字と小文字の区別
FIND関数よりSEARCH関数の2つ目の違いは、大文字と小文字を区別できるかどうかです。
SEARCH関数は大文字小文字の区別ができないのに対して、FIND関数は区別できます。
例えば、上の図のように、「12A-34a」から「a」の位置を調べるとき、SEARCH関数は大文字「A」の位置が返されてしまいますが、FIND関数は「a」の位置を正しく取得します。
このように、大文字と小文字を区別して文字の位置を検索したい時は、FIND関数を使うようにしましょう。
SEARCH関数ではなく、FIND関数を使いたい方は、以下のリンク記事へジャンプしてください。
SEARCH関数の書式と引数
SEARCH関数の書式は以下のとおりで、3つの引数を指定する必要があります。
=SEARCH(検索文字列,対象,[開始位置])
引数のそれぞれの内容と入力例は、以下の参考にしてください。
第1引数「検索文字列」:位置を調べたい文字を指定します。直接文字を指定する場合は、ダブルクォーテーションで囲みます。(例:A3、”県”、”-”)
第2引数「対象」:どのセルから位置を調べたいか対象の文字列を指定します。(例:B3、”神奈川県横浜市”)
第3引数「開始位置」: 検索を開始する位置を指定します。 先頭の文字から検索する時は「1」を指定します。 省略した場合は、1 を指定したことになります。(例:1,2,3)
以降の見出しからは、このSEARCH関数の書式を使って、文字の位置を調べる方法を紹介していきます。
SEARCH関数の基本的な使い方
それでは、SEARCH関数の基本的な使い方を紹介します。
SEARCH関数/使い方1:文字の位置を検索
SEARCH関数を使って、下の名前リストから空白スペースの位置が先頭から何文字目になるかを調べてみましょう。
手順1.SEARCH関数を第1引数「検索文字列」を指定
SEARCH関数を挿入します。全角の空白スペースを位置を調べたいので、第1引数「検索文字列」は「” ”」と入力します。半角スペースと全角スペースを間違わないようにしてください。
=SEARCH(" ",
手順2.SEARCH関数を第2引数「対象」を指定
次に、SEARCH関数を第2引数「対象」を指定します。B3セルの氏名から空白スペースの位置を調べたいので、B3セルをクリックします。
=SEARCH(" ",B3,
手順3.SEARCH関数を第3引数「開始位置」を指定
最後に、SEARCH関数を第3引数「開始位置」を指定します。文字の先頭から何番目の文字かを調べたいので、「1」と入力します。また、「1」であれば、省略してもOKです。
=SEARCH(" ",B3,1)
手順4.SEARCH関数を確定
Enterキーを押してSEARCH関数を確定させます。そうすると、「山田 太郎」の3文字目にスペースがあることが分かりました。下のセルにもSEARCH関数をコピペすれば、作業は完了です。
SEARCH関数/使い方2:2文字以上の文字の位置を検索
SEARCH関数の第1引数「検索文字列」は、2文字以上の複数でも利用できます。
例えば、「ABC-DEF」の「DE」の文字位置を調べて、先頭から「5」文字目という結果を返すことができます。
=SEARCH("DE",B3,1)
SEARCH関数/注意点:同じ文字が複数ある場合
SEARCH関数を使う際、検索文字列が2つ以上含まれている場合は注意が必要です。
例えば、「BCA-DEFA」から「A」の位置を調べると、一番左側のAの位置である「3」が返されます。
最後に現れる検索文字の位置を調べたいときは、以下の関数を貼り付けして、数式内の「B3」と「A」の文字を変更して使用してください。
=SEARCH("★",SUBSTITUTE(B3,"A","★",LEN(B3)-LEN(SUBSTITUTE(B3,"A",""))))
”★”:どんな文字でもOKです。
B3:調べたいセル番号に変更してください。
”A”:どの文字の位置を調べたいかに合わせて変更してください。
【応用編】SEARCH関数を使った事例
この見出しでは、SEARCH関数を使った事例を2つ紹介します。
SEARCH関数/事例1.ワイルドカードを使って検索する
SEARCH関数はワイルドカード文字を使って、部分一致する文字の位置を検索することができます。
ワイルドカード文字を知らない方のために、ワイルドカードとは何なのかを紹介します。
ワイルドカードは、「〇〇を含む文字列」のような条件で検索したいときに使用する文字のことで、主に以下の2つの文字があります。
ワイルドカード文字 | 説明 |
*(アスタリスク) | 0文字以上の任意の文字列 |
?(疑問符) | 任意の1文字 |
「*(アスタリスク)」は、0文字以上の任意の文字列を表し、「?(疑問符)」は、任意の1文字を表します。
以下のように、ワイルドカード文字の前後に別の文字を付け加えることで、部分一致する文字の検索を行えます。
使用例 | 意味 | 検索でヒットする文字列 |
*県 | 「県」で終わる文字列 | 県、近県、兵庫県、神奈川県 |
県* | 「県」で始まる文字列 | 県、県境、県立、県議会 |
*県* | 「県」を含む文字列 | 県、近県、兵庫県、神奈川県 県境、県 |
??県 | 2文字+「県」の文字列 | 兵庫県 |
県? | 「県」+1文字の文字列 | 県境、県立 |
例えば、下のSEARCH関数の第1引数に「”-*A”」と入力することで、「-BA」や「-CA」「-AA」などの文字の位置を調べることができます。
=SEARCH("-*A",C3,1)
SEARCH関数/事例2.MID関数で特定の文字を抽出する
文字列から指定した文字を抽出するMID関数と、SEARCH関数を組み合わせることで、特定のキーとなる文字の前後の文字を抽出することができます。
今回は、下の表のように『鈴木 一郎(経理部)』といったデータを括弧「()」の文字をキーにして、「鈴木 一郎」と「経理部」に分ける、といった方法を紹介します。
手順1.2つの括弧が何文字目かを調べる
SEARCH関数を使って、文字を抽出するキーとなる『(』と『)』が左側から何文字目かを調べます。
=SEARCH("(",B3,1)
=SEARCH(")",B3,1)
手順2.『(』より手前の文字を取り出す
右隣りの列に以下のMID関数を挿入し、SEARCH関数で調べた『(』の位置の1文字前までの文字を抽出します。
=MID(B3,1,(C3-1))
手順3.『(』と『)』に挟まれた文字を取り出す
さらに右隣りの列に以下のMID関数を挿入し、SEARCH関数で調べた『(』と『)』の開始位置の数値を使って、その間の文字を抽出します。
=MID(B3,C3+1,(D3-C3-1))
手順4.名前と部門の分解が完了
以上の作業により、B列の「名前&部門」の文字は、E列「名前」とF列「部門」に分解することができます。