OfficeType

Excel~SEARCH関数で指定した文字列の位置を取得しよう~エクセル

エクセルで検索対象の文字列の中から指定した文字列を検索し、指定した文字列が検索対象の文字列の中で最初に現れる位置が左端から何文字目かを返すSEARCH関数について説明します。

  • SEARCH関数の書式はSEARCH(検索文字列, 対象, [開始位置])になります。
  • 検索文字列は検索したい文字列を指定します。
  • 対象は検索したい文字列を探したい文字列を指定します。
  • [開始位置]は対象の文字列の何文字目から検索するかを指定します。省略すると1文字目から検索します。
  • スペースは1文字として扱われます。

一番左から検索する例

下の画像の例でセルB2にセルA2に入力された文字列から、"c"が最初に現れる位置を表示したい場合はセルB2に=SEARCH("c",A2)と入力しEnterを押します。

検索文字列は"c"が最初に現れる位置を検索したいので"c"になります。

対象はセルA2の文字列の中から検索したいのでA2になります。

[開始位置]は1文字目から検索するので省略しています。

つまりセルB2に=SEARCH("c",A2)と入力しEnterを押すと文字列の中で"c"が最初に現れるのは左から3文字目なので3が表示されます。

指定位置から検索する例

下の画像の例でセルB2にセルA2に入力された文字列の5文字目から検索して、"c"が最初に現れる位置を表示したい場合はセルB2に=SEARCH("c",A2,5)と入力しEnterを押します。

検索文字列は"c"が最初に現れる位置を検索したいので"c"になります。

対象はセルA2の文字列の中から検索したいのでA2になります。

[開始位置]は5文字目から検索するので5になります。

つまりセルB2に=SEARCH("c",A2,5)と入力しEnterを押すと文字列の中の5文字目から"c"が最初に現れるのは"Office"の"c"なので"Office"の"c"は左から数えてスペースを含めて15文字目なので15が表示されます。

複数文字列検索

検索文字列が複数文字列の場合は文字列の先頭が対象文字列の中で左から最初に現れる位置を返します。

下の画像の例でセルB2にセルA2に入力された文字列から、"Office"が最初に現れる位置を表示したい場合はセルB2に=SEARCH("Office",A2)と入力しEnterを押します。

検索文字列は"Office"が最初に現れる位置を検索したいので"Office"になります。

対象はセルA2の文字列の中から検索したいのでA2になります。

[開始位置]は1文字目から検索するので省略しています。

つまりセルB2に=SEARCH("Office",A2)と入力しEnterを押すと文字列の中で"Office"の先頭の"O"が最初に現れるのはスペースを含めて左から11文字目なので11が表示されます。

大文字と小文字は区別されない

SEARCH関数は大文字と小文字を区別しません。

下の画像の例でセルB2に=SEARCH("O",A2)と入力しEnterを押すと、検索文字列は大文字の"O"ですが、大文字と小文字は区別されないので、"o"が最初に出てくるのは"Microsoft"の小文字の"o"なので位置は左から5文字目になり5が表示されます。

オートフィル

下の画像の例でB列にA列の文字列の中で"県"が左から何番目の位置か表示したい場合はオートフィルを使えば素早く表示できます。

まずセルB2に=SEARCH("県",A2)と入力しEnterを押すとセルA2の文字列のなかで"県"は左から4文字目なので4が表示されます。

次にセルB2を選択し右下にマウスカーソルを移動するとカーソルが黒十字(矢印なし)になるので、その状態でクリックしたままセルB4までカーソルを動かすとセルB2からB4にA列の文字列の中で"県"が左から何文字目かが表示されます。

MID関数との組み合わせ

下の画像の例で文字列からバージョン部分を抽出したい場合はMID関数とSEARCH関数を組み合わせれば抽出できます。まずセルB2に=MID(A2,SEARCH(" ",A2,1)+1,4)と入力しEnterを押すとセルB2にセルA2の文字列のバージョン部分"2021"が表示されます。

MID関数はMID(文字列, 開始位置, 文字数)で文字列の左から開始位置の数値番目の文字を開始位置とし、開始位置から右に文字数ぶん文字列を取り出します。

MID関数の文字列はセルA2に入力された文字列を指定するのでA2になります。

MID関数の開始位置はSEARCH(" ",A3,1)+1が入力されています。SEARCH(" ",A3,1)でセルA2の文字列のなかで" "(スペース)が左から何番目かを返します。最後に+1がついているので" "(スペース)の1つ右の文字の位置、今回の場合は2021の先頭の2の位置なので7となり、これがMID関数の開始位置として使われます。

MID関数の文字数はバージョンは4文字なので4になります。

つまりセルB2に=MID(A2,SEARCH(" ",A2,1)+1,4)と入力しEnterを押すとセルA2の文字列からバージョン部分がセルB2に表示されます。

セルB2からセルB7までオートフィルすればA列の文字列のバージョン部分がB列に表示されます。

都道府県抽出

下の画像の例で住所から都道府県を抽出したい時はLEFT関数、SEARCH関数、IFERROR関数を組み合わせれば抽出できます。まずセルB2に=LEFT(A2,IFERROR(SEARCH("都",A2),IFERROR(SEARCH("道",A2),IFERROR(SEARCH("府",A2),IFERROR(SEARCH("県",A2),0)))))と入力しEnterを押すとセルB2にセルA2の住所の都道府県部分の"東京都"が表示されます。

LEFT(文字列, 文字数)で文字列の左から文字数の数値分の文字列を取り出します。

LEFT関数の文字列はセルA2に入力された住所を指定するのでA2になります。

LEFT関数の文字数にはIFERROR(SEARCH("都",A2),IFERROR(SEARCH("道",A2),IFERROR(SEARCH("府",A2),IFERROR(SEARCH("県",A2),0))))が入力されています。IFERROR関数はIFERROR(数式, エラーの場合の値)になり、数式にはSEARCH("都",A2)が入力されています。SEARCH関数の検索文字列に代入さているのが"都"で対象に代入さているのがA2になるのでセルA2に入力された住所の中で"都"が左から何番目にあるか返します。IFERROR関数のエラーの場合に代入されているのがIFERROR(SEARCH("道",A2),IFERROR(SEARCH("府",A2),IFERROR(SEARCH("県",A2),0)))になるので、SEARCH("都",A2)がエラーになる場合、つまりセルA2の住所に"都"が含まれない場合は次は"道"がセルA2の左から何番目にあるかを探します。つまりこの式はセルA2に"都"が含まれなければ"道"、"道"が含まれなければ"府"、"府"が含まれなければ"県"がセルA2の左から何番目にあるかを求め、これがLEFT関数の文字数として使われます。最後のIFERROR関数、IFERROR(SEARCH("県",A2),0)はエラーの場合に0が指定されているので、都道府県のどれも含まれない場合は0を返します。

つまりセルB2に=LEFT(A2,IFERROR(SEARCH("都",A2),IFERROR(SEARCH("道",A2),IFERROR(SEARCH("府",A2),IFERROR(SEARCH("県",A2),0)))))と入力しEnterを押すとセルA2の住所から都道府県が抽出されセルB2に"東京都"が表示されます。

セルB2からセルB7までオートフィルすればA列の住所から都道府県がB列に表示されます。

エラー

下の画像の例でセルB2に=SEARCH("a",A2)と入力しEnterを押すと、セルA2に"a"は含まれないのでエラー値#VALUE!が表示されます。

対処法

対処法としてIFERROR関数を使います。IFERROR関数の書式はIFERROR(数式, エラーの場合の値)になります。

下の画像の例でセルB2に=IFERROR(SEARCH("a",A2),"なし")と入力しEnterを押すと、セルA2に"a"は含まれないのでSEARCH関数はエラーとなるので、IFERROR関数のエラーの場合の値の"なし"が表示されます。

FIND関数との違い

FIND関数は大文字と小文字を区別しますが、SEARCH関数は区別しません。

FIND関数はワイルドカードに対応していませんが、SEARCH関数は対応しています。