Menu

FIND関数とSEARCH関数の使い方: セル内の文字の位置を探す

=SEARCH("apple",A2)は、A2でappleが始まる位置を、大文字と小文字を区別せずに返します。FINDも同じですが、大文字と小文字を区別します。文字列がないとどちらも#VALUE!を返し、ISNUMBERと組み合わせると「セルに含むか」の判定になります。

このページのシートはすべて実際に動きます。数値や数式を変えると再計算されます。

=SEARCH("apple",A2)は、A2でappleが始まる位置を1から数えて返し、大文字と小文字を区別しません。=FIND("apple",A2)も同じですが、大文字と小文字が完全に一致するものだけを探します。文字列が見つからないと、どちらも#VALUE!を返します。

FINDは大文字と小文字を区別し、SEARCHは区別しない
B2
ABC
1TextFIND("apple")SEARCH("apple")
2Apple pie#VALUE!1
3Green apple77
4Banana bread#VALUE!#VALUE!
#VALUE! 引数の種類が違います。たとえば数値の場所に文字列があります。

Apple pieは大文字のAで始まるので、FINDは一致せず#VALUE!を返し、SEARCHは1を返します。Green appleではどちらも7を返します。スペースも1文字として数えるからです。Banana breadにはappleがまったく含まれていません。

構文

=FIND(find_text, within_text, [start_num])
=SEARCH(find_text, within_text, [start_num])
  • find_text(検索文字列):探すもの。1文字でも単語でも構いません。
  • within_text(対象):探す対象のセル。
  • start_num(開始位置):探し始める位置で、省略すると1です。結果はそれでもセルの最初の文字から数えた位置になります。

セルに特定の文字が含まれるか

位置そのものが欲しいことはあまりありません。たいていは「このセルにその単語が含まれるか」を知りたいはずです。位置は数値で、見つからないとエラーになるので、ISNUMBERで結果をTRUEかFALSEに変えます:

メモに遅れが書かれているか
B2
ABC
1NoteContains "late"Status
2Arrived lateTRUECheck
3On timeFALSEOK
4LATE by 2 daysTRUECheck
5DeliveredFALSEOK
セルをクリックすると数式が見えます。数値や数式を変えると、シートが再計算されます。

SEARCHは大文字と小文字を区別しないので、A4のLATEにも一致します。ただしlatestやchocolateにも一致する点に注意してください。SEARCHが探すのは単語ではなく文字の並びです。先頭にスペースを付けて" late"を探すと、少し絞り込めます。単語を含むセルの数を数えるなら=COUNTIF(A2:A5,"*late*")のほうが短く書けます。文字列が入ったセルを数えるを参照してください。

緊急のチケットに印を付ける
B2
AB
1SubjectUrgent?
2URGENT: server down
3Monthly report
4Refund request, urgent
セルをクリックすると数式が見えます。数値や数式を変えると、シートが再計算されます。

やってみよう: B2で、A2の件名にurgentという単語が大文字・小文字を問わず含まれていればTRUE、なければFALSEを返してください。数式はB4まで下にコピーされます。

2番目の位置を探す

start_numを使うと、最初に見つかった位置より後から探し始められます。FINDの中にFINDを入れます。内側のFINDが最初のハイフンを見つけ、外側はその1文字後から探します。

1つ目と2つ目のハイフンの位置
C2
ABC
1CodeFirst dashSecond dash
2NYC-2041-B49
3BOSTON-15-AA710
セルをクリックすると数式が見えます。数値や数式を変えると、シートが再計算されます。

2つの位置がわかれば、MIDでハイフンの間を取り出せます。=MID(A2,B2+1,C2-B2-1)は2041を返します。

@はどこにあるか
B2
AB
1EmailPosition
2ana@coddy.tech
セルをクリックすると数式が見えます。数値や数式を変えると、シートが再計算されます。

やってみよう: B2で、メールアドレスの中の@の位置を返してください。

FINDとSEARCHが#VALUE!を返す

ここでの#VALUE!は「見つからない」という意味でしかありません。役に立つ値に置き換えます:

エラーを出さずに「見つからない」を表す
B2
AB
1EmailPosition of @
2ana@coddy.tech4
3not an email0
セルをクリックすると数式が見えます。数値や数式を変えると、シートが再計算されます。

=FIND("@",A2)>0のように、結果をそのまま数値と比べないでください。見つからないとエラーになるので、比較はFALSEではなく#VALUE!を返します。上の節のようにISNUMBERで判定します。

ワイルドカード: SEARCHだけ

SEARCHはワイルドカード?(任意の1文字)と*(任意の文字列)を受け付けます。FINDはそれらを文字そのものとして扱います。Excelでは:

=SEARCH("b?d","a bad day")     returns 3
=SEARCH("2*B","NYC-2041-B")    returns 5
=SEARCH("~?","Why?")           returns 4, the tilde means a real question mark
=FIND("?","Why?")              returns 4, FIND has no wildcards

Excelの関数での*、?、~についてはワイルドカードのページで詳しく説明しています。

FIND、SEARCH、Ctrl+Fの違い

FINDSEARCHCtrl+F
大文字と小文字一致が必要区別しない「大文字と小文字を区別する」にチェックしない限り区別しない
ワイルドカードなし?、*、~?、*、~
見つからないとき#VALUE!#VALUE!メッセージ
結果位置、再計算される位置、再計算されるセルを選択する

値を一度探すだけなら、ホーム > 検索と選択 > 検索(Ctrl+F、MacではCmd+F)のほうが数式より手早く済みます。すべての行で印を付けたり取り出したりして、結果を更新し続けたいならFINDかSEARCHを使います。大文字と小文字に意味があるとき(abとABのような商品コード)はFINDを、人が入力するものにはSEARCHを選びます。

よくある質問

ExcelのFINDとSEARCHの違いは何ですか?

FINDは大文字と小文字を区別し、ワイルドカードを受け付けません。SEARCHは大文字と小文字を区別せず、?と*を受け付けます。=FIND("a","Apple")は#VALUE!ですが、=SEARCH("a","Apple")は1です。

Excelで2つのハイフンの間の文字列を取り出すには?

両方のハイフンを探し、その間をMIDで取り出します:=MID(A2,FIND("-",A2)+1,FIND("-",A2,FIND("-",A2)+1)-FIND("-",A2)-1)はNYC-2041-Bから2041を返します。Microsoft 365なら=TEXTBEFORE(TEXTAFTER(A2,"-"),"-")のほうが短く書けます。

FINDが#VALUE!を返すのはなぜですか?

セルにその文字列がないか、大文字と小文字が違うからです(FINDは区別します)。別の値を返すように囲みます:=IFERROR(FIND("-",A2),0)。

ある文字の2番目の位置を探すには?

最初に見つかった位置の1文字後から探し始めます:=FIND("-",A2,FIND("-",A2)+1)。3つ目の引数は探し始める位置です。

Coddyのプログラミング言語のイラスト

Coddyでコードを学ぼう

始める