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