SEARCH分類:文字列操作計 2009.02.06
SEARCH関数は「文字列操作」に分類される関数で、ある文字列の中から指定文字列を検索し、その位置を返します。LEFT、MID、RIGHTといった「文字列操作」関数と相性が良く、組み合わせて使用することが多いです。
「名字や名前を抽出する」「特定の文字が含まれているか調べる」といった用途が考えられます。又、ワイルドカードを使用しての検索が行えるのも魅力です。
SEARCHの機能と構成
機能:指定文字列が、対象データ内で最初に現れる位置を検索する。
構成:=SEARCH(検索文字列,対象,開始位置)
引数
検索文字列には検索する文字列を指定します(ワイルドカード文字も使用可能です)。
検索文字列は大文字と小文字が区別されず、又、全角・半角の区別無く1文字を「1」として処理します。
「""」空文列を指定した場合、対象の先頭文字と一致したものと見なされます。
「"立山"」のように2文字以上を指定することもできます。
対象には検索文字列を含むデータを指定します。
開始位置には、検索を開始する位置を指定します。対象の先頭文字から検索する場合は「1」を指定します。省略した場合は「1」を指定したものとみなされます。
引数指定の例
セル[A1]のデータの先頭から、スペース(" ")を検索:=SEARCH(" ",A1,1)
セル[A1]のデータの先頭から、アットマーク(@)を検索:=SEARCH("@",A1)
[Data]と名前の定義を行ったセルのデータからアットマーク(@)を検索:=SEARCH("@",Data,1)
数式を挿入したセルと同じ行のセルのデータからスペースを検索※:=SEARCH(" ",$A$3:$A$9,1)
※「文字列」に行又は列、どちらか一方の1次元セル範囲を指定出来ます。しかし、SEARCHの対象となる文字列はセル範囲が行方向なら同じ行、列方向なら同じ列のセル値になります。
尚、2次元セル範囲を指定すると#VALUE!のエラーになります。
SEARCH関数の応用(1)
SEARCH関数の代表的な応用はLEFT、MID、RIGHT関数との組み合わせです。ここではそれらの組み合わせを例に挙げたいと思います。
LEFT、MID、RIGHT関数との組み合わせ
LEFT関数:SEARCH関数で「@」の位置を調べ、それより前の文字列をLEFT関数で抽出。
(@は抽出しないので「1」を引く)
MID関数:SEARCH関数で「@」の位置を調べ、MID関数でそれより後の5文字を抽出。
(@は抽出しないので「1」を足す)
RIGHT関数:LEN関数で求めた文字数から、SEARCH関数で求めた「@」の位置を引き、それを基に
RIGHT関数で残りの文字列を抽出。
SEARCH関数の応用(2)
次はSEARCH関数用いて「名簿の中に特定の文字が含まれているか」を調べます。SEARCH関数の他にIS関数、IF関数、を使用しています。
下図の例では、名簿の中に「タ」が含まれていたら、隣の列(D列)に「該当!」と表示しています。
次は上図の応用です。
名簿に「タ」が含まれていたら、該当ナンバーを表示、それを基に該当人物を抽出し順に並べます。作業セルを使用し少々複雑ですが、様々な場面で応用できると思います。
数式1にはSEARCH、IS、IF関数、数式2にはCOUNT、INDEX、SMALL関数を使用しています。
【数式1の説明】
1.SEARCH関数でセル[D2]の「タ」をC列の文字列から検索。「タ」が見つからなかったらエラー。
2.ISERROR関数を用いエラーだった場合は非表示。
3.エラーでなかった場合は、B列の該当ナンバーを返す。
【数式2の説明】
1.COUNT関数でD列の数値の個数を返し、B列の同じ行の数値と比較する(COUNT関数を超過
する場合はエラーとなり、それを防ぐため)。結果がFALSEの場合は非表示。
2.SMALL関数でD列の数値を小さい順に並べる。
3.「2.」の結果を基にINDEX関数で、該当ナンバーの人物名をC列より抽出。
SEARCH関数の応用(3)
ワイルドカードの使用
ワイルドカードを使用することにより、検索に幅を持たせることが出来ます。ここでは、SEARCH関数でワイルドカードを使用する例を挙げていきます。
●「?」・・・任意の1文字と一致する文字列を検索
データ内で「じ」の前、又は後に任意の1文字がある場合、その位置を表示。
●「*」・・・任意の1文字又は複数文字と一致する文字列を検索
データ内で「じ」の前、又は後に任意の1文字~複数文字と一致する場合、その位置を表示。
SEARCH関数の類似関数
SEARCHB関数
SEARCH関数と似た関数にSEARCHB関数があります。SEARCHB関数も指定した文字列のの位置を返しますが、SEARCH関数が全角・半角の区別なく1文字を「1」と処理するのに対し、SEARCHB関数はバイト数(半角単位)で処理されます。
尚、下図でわかるように半角は1バイト、全角は2バイトになります。SEARCH / SEARCHB関数は用途によって使い分けましょう。
FIND関数
SEARCH関数と機能が類似した関数にFIND関数があります。FIND関数はSEARCH関数と同様、引数に指定した文字列を検索しその位置を返します。FIND関数と違う主な点を2つ挙げます。
・大文字・小文字を区別する。
・ワイルドカードの使用ができない。
検索状況によってこれらを使い分けましょう。