Excel(エクセル)FIND関数の使い方|特定の文字列までの文字数を返す
Excelで特定の文字列を検索して位置情報を返す関数にはFINDとSEARCHがあります。ここではFIND関数の使い方について、できるだけ分かりやすく図解します。
使用関数:FIND
FIND(ファインド)関数とは?
FINDは「見つける」「探す」を意味する英語で、FIND関数は指定した文字列が対象文字列の前(左)から何番目にあるかを見つけてくれます。単独で使われることはほとんど無く、大概はLEFT、RIGHT、MID、LEN、SUBSTITUTEなど他の関数と組み合わせて使われます。使用頻度の高い関数です。
FINDBとの違いは?
文字列操作の関数にはFINDと1文字違いのFINDBがありますが、この2つの関数の違いは単位です。Excelの文字単位は「文字数」と「バイト数」があり、FINDBはバイト数で文字列の位置を求めます。FINDBは全角を「2」とカウントするので、日本語の全角文字列の位置はFINDの2倍の数値になります。
FINDB関数の使い方はこちらで詳しく!
FIND関数の使い方
FIND関数をダイアログで組み立て、引数を確認してみましょう。
「数式」タブ→「関数ライブラリ」→「文字列操作」からFINDをクリックします。
FIND関数の書式の構成はこうなります。「検索文字列」と「対象」が必須、「開始位置」は任意です。
例として、「ABC工業(株)」という社名の「(」の位置を取り出してみましょう。
第一引数「検索文字列」
位置を取得したい文字列を指定します。
- 空白を表す””を指定すると、「開始位置」で指定した値が返ります。「開始位置」省略なら1が返ります
- 英語の大文字と小文字は区別されます。Aとaは異なる文字と見なされます
- 全角文字と半角文字は区別されます。全角スペースと半角スペースは異なる文字と見なされます
この例では第一引数「検索文字列」に「“(”」と入力します。
第二引数「対象」
「検索文字列」の位置を検索する元の文字列を指定します。
- 対象の文字を数えるのに全角・半角も大文字・小文字も区別されません。どの文字も1とカウントされます
- 「検索文字列」で指定した値が見つからない時は#VALUE!エラーが返ります
この例では社名の入ったセルをクリックで指定します。
ここまでが必須の引数です。「検索文字列」が一つだけなら、この時点で数式を確定させましょう。
「対象」に「検索文字列」が複数含まれ、その2番め以降に登場する「検索文字列」の位置を取得したい場合は次の第三引数「開始位置」の指定へ進みます。
FIND関数の引数「開始位置」は検索文字列が複数含まれる場合に使う
「開始位置」は「対象」のどの位置から検索を開始するかを、先頭の文字を1として数値で指定します。
- 「対象」に「検索文字列」が複数ある場合に、何番目の「検索文字列」の位置を数えるかを指定します
- 「開始位置」はあくまで「検索を開始する位置」です。「開始位置」より前にある文字列を検索の対象外とするだけで、「開始位置」を指定したとしてもFIND関数が数えるのは「対象」の先頭からになります
例えば、ハイフンが複数含まれるコード番号を「対象」として、2番目のハイフンの位置を取得するとします。「開始位置」にFIND関数をネストし、1番目のハイフンの位置を取得して+1を付加します。これにより1番目のハイフンの位置の次の文字から検索が開始され、2番目のハイフンの位置が取得できます。
2番目にある検索文字列(ハイフン)が「対象」の先頭から何番目の位置にあるかが返りました。
数式 =FIND(“-“,A2,FIND(“-“,A2)+1)
「開始位置」を省略した場合は「対象」の先頭位置「1」を指定したものと見なされます。
FIND関数とSEARCH関数の違いについて
FINDとSEARCHは共に特定の文字列の位置を求める文字列操作の関数です。引数も同じですが、どの場面でどう使うかといった点でいくつか違いがあります。
- FIND関数は英字の大文字・小文字を区別しますが、SEARCH関数は区別しません
- FIND関数はワイルドカードを使った曖昧検索はできませんが、SEARCH関数は曖昧検索ができます
Excelとexcelが混在した文字列でEまたはeの位置情報を取得したい、(株)や(合)が対象内に含まれているかを調べたいというような場合にはSEARCH関数を使用します。
ワイルドカード文字で曖昧検索するSEARCH関数の使い方、はこちらで詳しく
FIND関数と他の関数を組み合わせた応用例
FIND関数は他の関数と組み合わせることで活用範囲が広がります。その応用例を紹介します。
FIND・MID・MIN・IFERROR関数で後ろ(右側)から文字列を取り出す
住所の後半部の番地だけを取り出してみます。FIND関数に指定するため、数字1~9までを入力した作業列を作成しておきました。
FIND関数の「検索文字列」に予め作成しておいた1~9までの数字のセル範囲を絶対参照で指定し、「対象」には住所の最初のセルを指定します。
「1-2-3」の位置「10、12、14」と6つのエラー#VALUE!が返りますが、この数式FIND($G$2:$G$10,C2)をIFERRORにネストしてエラーを始末します。
この数式IFERROR(FIND($G$2:$G$10,C2),””)を更にMIN関数にネストして「10、12、14」の最小値10を取り出します。
MIN関数で最小値を取り出した数式MIN(IFERROR(FIND($G$2:$G$10,C2),””))をMID関数の開始位置にネストして指定します。切り出す文字数は余裕を持った数値にしておきましょう。ここでは20と指定しました。
Excelの下位バージョンでは、MID関数を確定させる時、Shift、Ctrl、Enterを同時に押して配列数式にしておきます。
スピルが使えるExcelの環境では通常通り確定させてOKです。
住所の番地部分だけが取り出せました。他の住所のセルにオートフィルコピーして完了です。
最終的な数式 =MID(C2,MIN(IFERROR(FIND($G$2:$G$10,C2),””)),20)
FIND・LEFT・RIGHT・LEN関数を組み合わせて名前の姓と名を分割
住所録の作成の過程で、印刷時にWordの差し込み印刷と連携するために姓と名を分割させておく手順です。
「氏名」の入力と同時に「姓」「名」を自動で分割表示、更に「フリガナ」も自動表示するよう設定する方法
FIND、MID、SUBSTITUTE、IFERROR、LEFT、LEN関数で住所の番地を漢数字から算用数字に変換
例えば、「東京都○区○○一丁目二番」という表記を「東京都○区○○1-2」にします。
漢数字で入力してある住所データの所番地を半角数字に置き換える方法
- FINDは指定した文字列が対象文字列の前(左)から何番目にあるかを見つける関数です
- FIND関数の引数「検索文字列」の指定では大文字・小文字、全角・半角を区別します
- 「検索文字列」に空白文字を指定すると「開始位置」で指定した値が返ります
- FIND関数の引数「対象」の文字列で「検索文字列」までの文字数を数える時、大文字・小文字、全角・半角はどれも1とカウントされます
- FIND関数の引数「開始位置」は検索文字列が複数含まれる場合に、2番目以降の検索文字列の位置を取得するために指定します
- 「開始位置」は検索を開始する位置で、FIND関数が数えるのは常に先頭文字からの文字数です
- FIND関数はワイルドカードは使えません。曖昧検索をするならSEARCH関数を使います
- FIND関数にはMID、LEFT、RIGHT、SUBSTITUTE、IFERRORなど他の関数と組み合わせることで応用範囲が広がります