データ探索の必須スキル!ExcelのFIND関数の詳細な使い方

FIND関数は、ある文字列の中で指定した文字列が最初に現れる位置を返します。基本形は=FIND(検索文字列,対象文字列,[開始位置])で、位置は1から数えます。=FIND("@",A2)なら、A2の@が先頭から何文字目かを返します。FINDは英字の大文字・小文字を区別し、ワイルドカードを使えません。大文字・小文字を区別せず検索したい場合やワイルドカードが必要な場合はSEARCHを使います。見つからない、開始位置が0以下、文字列長を超える場合は#VALUE!になるため、区切り文字の抽出式では入力形式を検査してからMIDやLEFTと組み合わせます。

目次

FINDの三つの引数と戻り値

=FIND("東","東京都")は1を返します。find_textが探す文字列、within_textが検索対象、start_numが検索を始める位置です。start_numは省略でき、省略時は1です。返るのは見つかった文字列の先頭位置で、検索対象全体の先頭から数えた番号です。

FINDは文字列そのものやセル参照を返しません。位置を使ってLEFT、MID、RIGHT、REPLACEなどへ切り出し位置を渡します。単にセル内に含むか判定するなら、=ISNUMBER(FIND("ABC",A2))のようにTRUE・FALSEへ変換できますが、#VALUE!の意味を理解して使います。

大文字と小文字を区別する

FINDはcase-sensitiveです。=FIND("A","apple")は、英字Aとaが異なるため#VALUE!になります。製品コードの大文字・小文字が意味を持つ場合に向きます。単に人名や一般文章を探し、大小を区別しないならSEARCHを選びます。

Microsoftの公式エラー例でも、”gloves”と”Gloves”はFINDでは一致せず、SEARCHでは一致すると説明されています。入力をUPPERやLOWERへ変換してFINDする方法もありますが、元の大小を失ってよいかを確認します。大文字小文字の要件を式の説明へ記録します。

FINDはワイルドカードを使わない

FINDのfind_textに*や?を書いても、任意文字列や一文字を表すワイルドカードとしては扱いません。実際の*や?を探したい場合には、この仕様が便利です。部分パターンをワイルドカードで探すなら、大文字小文字を区別しないSEARCHなどを使います。

「ABCで始まり末尾が数字」のような複雑な形式確認をFINDだけで表すと式が読みにくくなります。補助列、TEXT関数群、Power Query、利用可能なら正規表現関数などを検討します。新関数は配布先のExcel版を確認し、入力検証を一つの巨大な式へ押し込みません。

開始位置は1以上で指定する

第三引数start_numを3にすると、検索対象の3文字目から後ろだけを探します。ただし返る位置は検索開始位置からの相対値ではなく、文字列全体の先頭から数えた位置です。最初の区切りを飛ばして二つ目を探すときに使えます。

start_numが0以下、またはwithin_textの文字数より大きい場合は#VALUE!です。LENで文字数を確認し、セル参照の開始位置が空白やエラーになっていないか調べます。開始位置を計算する式では+1や区切り文字長の加算を忘れないよう、途中値を補助セルで確認します。

二つ目以降の区切り位置を求める

最初のハイフン位置がFIND("-",A2)なら、二つ目は=FIND("-",A2,FIND("-",A2)+1)で探せます。区切りが複数文字の場合は、次の開始位置へLEN(区切り文字)を加えます。同じ区切りが連続する、末尾にある、存在しない入力もテストします。

入れ子が深くなると同じFINDを何度も計算して読みにくくなります。補助列やLETで最初と二番目の位置へ名前を付けると検証しやすくなります。位置が存在しないときにどのエラーを返すかを決め、IFERRORで無条件に空白へ隠しません。

区切り前の文字列を取り出す

A2の「商品名 #123」から#より前を取り出すなら、=LEFT(A2,FIND(" #",A2)-1)のように、区切り位置から1を引いて文字数を作ります。区切りに直前の空白を含めるかを決めます。MicrosoftのFIND資料でもMIDと組み合わせて区切り前を抽出する例が示されています。

区切りがない行ではFINDが#VALUE!になり、式全体もエラーになります。区切りなしを元の文字列として扱うのか、入力異常として表示するのかを決めます。全角の#と半角#、異なるハイフン、ノーブレークスペースが混在すると一致しないため、取り込み元の文字コードと入力ルールを確認します。

区切り後の文字列をMIDで抽出する

メールアドレスの@より後ろは、=MID(A2,FIND("@",A2)+1,LEN(A2)-FIND("@",A2))のように抽出できます。FINDで@の位置を求め、開始位置を一文字後ろへ進め、残り文字数をLENから計算します。ただし@が複数ある、先頭・末尾にある、不正な形式を正しいメールアドレスとみなしてはいけません。

文字列抽出は表示上の整理であり、メールアドレスやURLの安全性・有効性を保証する検証ではありません。外部リンクや認証情報を自動生成する場合、FINDの結果だけを信用せず、許可ドメイン、形式、長さを別に検査します。秘密のトークンや資格情報をワークシートへ展開しません。

含有判定と#VALUE!の扱い

=ISNUMBER(FIND("要確認",A2))は含まれていればTRUE、見つからなければFALSEになります。IFと組み合わせて分類できます。大文字小文字を区別しない判定ならSEARCHを使います。文字列が空の場合、FINDのfind_textに空文字を渡すと開始位置に一致する仕様があるため、検索条件セルが空白のときは予期せずTRUEになる可能性があります。

条件セルが空なら検索しないよう、先にB2=""を確認するなど入力を検証します。IFERRORでFINDのすべてのエラーをFALSEへ変えると、開始位置不正や参照エラーも「含まない」に見えます。想定する未検出と数式エラーを分けて管理します。

文字の種類とUnicodeの注意

現在のFINDは、既定言語にかかわらず単一バイト・二重バイト文字を各1文字として数えるとMicrosoft公式資料にあります。FINDBは非推奨です。互換性バージョン2のブックではサロゲートペアの数え方が改善されますが、絵文字の異体字セレクターは別文字として数えられる場合があります。

人が見て一文字に見える絵文字、結合文字、異体字が、数式上の位置や文字数と一致しないことがあります。氏名や多言語データを固定位置で切り出す前に、実データでLENとFINDの結果を確認します。古いブックの互換性設定を変更する場合は、既存数式の結果差を検証します。

新しいテキスト関数との使い分け

区切り前後の抽出だけなら、新しいExcelのTEXTBEFORE、TEXTAFTER、TEXTSPLITの方が式を読みやすくできる場合があります。複数の区切り、見つからない場合、出現番号を引数で扱えます。一方、利用可能なExcel版が限定され、古い版では#NAME?になります。

社外配布や長期保存では、利用者のExcel版を確認してFIND・MID方式を残すか判断します。関数を置き換える際は、空白、連続区切り、末尾区切り、全角記号、複数出現で新旧結果を比較します。目的が位置番号の取得なら、FINDを使い続ける方が直接的です。

確認チェックリスト

  • FINDが1始まりの位置番号を返すと理解する
  • 大文字小文字を区別する必要がなければSEARCHを検討する
  • FINDではワイルドカードを使えないことを確認する
  • start_numは1以上かつ文字列長以内か確認する
  • 区切りなし・複数・連続・全角記号の入力をテストする
  • #VALUE!を未検出と数式不正に分けて扱う

公式情報・参考資料

この記事を書いた人

実務の現場で詰まりがちなポイントを地図にするITブログ「IT trip」を運営。Windows/Office(Teams・Excel)からSQL、サーバ運用、ガジェットまで、再現性のある手順と“なぜそうなるか”を丁寧に解説します。読んだらすぐ試せること、そして迷った人の次の一歩が見えることを大切にしています。

コメント

コメントする

目次