目次
このチュートリアルでは、ExcelのFIND関数とSEARCH関数の構文を説明し、自明ではない高度な使い方の数式例を紹介しています。
前回は、Excelの「検索と置換」ダイアログの基本を説明しましたが、Excelでは、指定した条件に基づいて自動的に他のセルのデータを検索・抽出したい場合があります。 そこで、Excelの検索機能にはどのようなものがあるか、詳しく見ていきましょう。
エクセルFIND関数
ExcelのFIND関数は、テキスト文字列の中の特定の文字や部分文字列の位置を返すために使用されます。
Excelの検索機能の構文は次のとおりです。
FIND(find_text、within_text、[start_num])最初の2つの引数は必須、最後の1つはオプションです。
- 検索_テキスト - 検索したい文字または部分文字列を指定します。
- 内テキスト - 通常はセル参照で指定しますが、数式に直接文字列を入力することもできます。
- 開始番号 - どの文字から検索を開始するかを指定するオプション引数。 省略した場合は、within_text 文字列の1文字目から検索が開始される。
FIND関数でfind_text文字が見つからなかった場合、#VALUE!エラーを返す。
例えば、式 =FIND("d", "find")です。
は4を返す。なぜなら、"d "は単語の4文字目だからである。 拾う ". 式 =FIND("a", "find")です。
には "a "がないので、エラーを返します。 拾う ".
ExcelのFIND関数 - 覚えておきたいこと!
ExcelでFIND式を正しく使うには、次のような単純な事実を覚えておくとよいでしょう。
- FIND関数は ケースセンシティブ 大文字と小文字を区別せずに検索する場合は、SEARCH 機能を使用します。
- Excel の FIND 関数では、以下を使用できません。 ワイルドカード文字 .
- find_text の引数が複数の文字を含む場合、FIND 関数はその文字の位置を返す。 先頭文字 例えば、FIND("ap", "happy")という数式は、"happy "の2文字目が "a "であることから、2を返します。
- within_textが含まれる場合 数回発生 例えば、FIND("l", "hello") は、"hello" の最初の "l" 文字の位置である 3 を返します。
- もしfind_textが 空の文字列 ""の場合、ExcelのFIND式では、検索文字列の最初の文字が返されます。
- ExcelのFIND関数は #VALUE!エラー のいずれかが発生した場合。
- Find_text が within_text に存在しない。
- Start_num は within_text よりも多くの文字を含んでいます。
- Start_num は 0(ゼロ)または負の数です。
エクセルSEARCH機能
ExcelのSEARCH関数は、文字列中の部分文字列の位置を返すという点で、FINDと非常によく似ています。 構文や引数もFINDと同様です。
SEARCH(find_text、within_text、[start_num])FINDとは異なり、SEARCH機能は ケースインセンシティブ で、次の例に示すように、ワイルドカード文字を使用することができます。
そして、Excelの基本的なSEARCHの公式をいくつか紹介します。
=SEARCH("マーケット", "スーパーマーケット")
は 6 を返します。これは、部分文字列 "market" が "supermarket" という単語の 6 文字目から始まっているからです。
=SEARCH("e", "Excel")。
は、大文字小文字を無視して、"e "が "Excel "の最初の文字であることから、1を返します。
FINDと同様、ExcelのSEARCH関数は、以下の場合に#VALUE!エラーを返します。
- 引数 find_text の値が見つからない。
- 引数 start_num は within_text の長さより大きい。
- Start_numが0以下である。
このチュートリアルでは、ExcelワークシートでSEARCH関数を使用する方法を示す、より有意義な数式の例をいくつか紹介します。
エクセルFINDとエクセルSEARCHの比較
ExcelのFIND関数とSEARCH関数は、構文や使い方が非常に似ていることは既に述べたとおりです。 しかし、この2つにはいくつかの相違点があります。
1.大文字・小文字を区別するFINDと大文字・小文字を区別しないSEARCHの比較
ExcelのSEARCH関数とFIND関数の最も本質的な違いは、SEARCHは大文字と小文字が区別されないのに対し、FINDは大文字と小文字が区別されることです。
例えば、SEARCH("e", "Excel") は "E" の大文字小文字を無視するので 1 を返し、FIND("e", "Excel") は大文字小文字を気にするので 4 を返します。
2.ワイルドカード文字による検索
FINDとは異なり、ExcelのSEARCH関数はfind_textの引数にワイルドカード文字を使用することができます。
- クエスチョンマーク(?)は1文字にマッチし
- アスタリスク(*)は、任意の連続した文字にマッチします。
実際のデータでどのように機能するかを見るために、次のような例を考えてみましょう。
上のスクリーンショットにあるように、数式 SEARCH("function*2013", A2) は、引数 within_text で参照されるテキスト文字列が "function" と "2013" の両方を含む場合、間に他の文字が何個あっても、部分文字列の最初の文字 ("f") の位置を返します。
ヒント:クエスチョンマーク(?)やアスタリスク(*)を見つけるには、対応する文字の前にチルダ(~)を入力してください。
ExcelのFINDとSEARCHの計算式の例
実際には、ExcelのFIND関数やSEARCH関数を単独で使うことはほとんどなく、MID、LEFT、RIGHTなどの他の関数と組み合わせて使うのが一般的ですが、以下の数式例で実際の使い方をご紹介します。
例1.指定した文字の前後にある文字列を探す
この例では、文字列中の特定の文字の左側または右側にあるすべての文字を検索して抽出する方法を説明します。 理解しやすくするために、次の例を考えてみましょう。
名前の列(A列)があり、First nameとLast nameを別々の列に引き込みたいとします。
ファーストネームを取得するには、FIND(またはSEARCH)とLEFT機能を組み合わせて使用します。
=left(a2, find(" ", a2)-1)
または
=left(a2, search(" ", a2)-1)
ExcelのLEFT関数は、文字列の左端から指定された文字数を返します。 そして、FIND関数を使ってスペース(" ")の位置を決め、LEFT関数に何文字取り出すかを知らせます。 その際、スペースを含まない値を返したいので、スペースの位置から1を引くのです。
姓を抽出するには、RIGHT関数、FIND / SEARCH関数、LEN関数を組み合わせて使用します。 LEN関数は、文字列の総文字数を求め、そこからスペースの位置を差し引くために必要です。
=right(a2,len(a2)-find(" ",a2)))
または
=right(a2,len(a2)-search(" ",a2)))
次の画面は、その結果を示したものです。
ミドルネームの抽出や接尾辞付きの名前の分割など、より複雑なシナリオについては、Excelで数式を使用してセルを分割する方法をご覧ください。
例2.文字列の中で、指定した文字がN番目に出現する場所を探す
A列にいくつかのテキスト文字列、例えばSKUのリストがあり、その位置を求めるとします。 第2回 ダッシュを文字列で指定する場合、以下の式でうまくいきます。
=find("-", a2, find("-",a2)+1)
最初の2つの引数は、セルA2にあるダッシュ("-")を探すという簡単なものです。 3番目の引数(start_num)には、ダッシュが最初に出現した直後の文字から検索を開始するよう、別のFIND関数を埋め込みます(FIND("-",A2)+1)。
の位置を戻すには 3回目 の場合、別のFIND関数のstart_num引数に上記の数式を埋め込んで、戻り値に2を足すことになります。
=find("-",a2, find("-",a2, find("-",a2)+1) +2)
もう一つの方法は、ExcelのFIND関数とCHAR、SUBSTITUTEの組み合わせで、指定した文字のN番目の出現箇所を見つけることです(おそらくもっと簡単な方法)。
=find(char(1),substitute(a2,"-",char(1),3))
ここで、"-"は問題の文字、"3 "は見つけたいN回目の出現を表します。
上の式では、SUBSTITUTE関数が3番目に現れるダッシュ("-")を、ASCIIシステムで印字不可能な「見出しの開始」文字であるCHAR(1)に置き換えています。 CHAR(1)の代わりに、1〜31までの他の印字不可能文字を使うこともできます。 そして、FIND関数が文字列中のその文字の位置を返します。 つまり、一般の式は、次のようになるのです。
find(char(1),substitute()の場合) セル , せいかく ,CHAR(1)です。 第 1 回目 ))一見すると、上記の公式は実用的な価値が低いように思えるが、次の例で実際の課題を解決する上でいかに有用であるかがわかるだろう。
注意:ExcelのFIND関数は大文字と小文字を区別することを忘れないでください。 この例では違いはありませんが、もし文字を扱うときに ケースインセンシティブ にマッチする場合は、FIND の代わりに SEARCH 機能を使用します。
例3.ある文字に続くN文字を抽出する
任意の文字列の中から指定された長さの部分文字列を見つけるには、Excel FIND または Excel SEARCH と MID 関数を組み合わせて使用します。 次の例は、このような数式の実際の使用方法を示しています。
SKUのリストで、最初のダッシュに続く最初の3文字を見つけ、別の列に引き込むとします。
もし、最初のダッシュの前の文字群が常に同じ数(例えば2文字)であれば、これは些細なことです。 MID関数を使って、文字列から位置4から始まる3文字を返すことができます(最初の2文字とダッシュを飛ばします)。
=MID(A2, 4, 3)
英語に訳すと、「セルA2を見て、文字4から抽出を開始し、3文字を返す」という数式になります。
しかし、実際のワークシートでは、抽出したい部分文字列が文字列のどこからでも始まる可能性があります。 この例では、最初のダッシュの前に何文字あるかわからないかもしれません。 この問題に対処するには、FIND関数を使って抽出したい部分文字列の始点を決めます。
1本目のダッシュの位置を返すFINDの計算式は以下の通りです。
=FIND("-",A2)
ダッシュに続く文字から始めたいので、戻り値に1を加え、MID関数の第2引数(start_num)に上記の関数を埋め込んでください。
=mid(a2, find("-",a2)+1, 3)
この場合、ExcelのSEARCH関数も同様に機能します。
=mid(a2, search("-",a2)+1, 3)
それはいいのですが、最初のダッシュに続く文字群が異なる文字数を含んでいたらどうでしょう? うーん、これは問題かもしれませんね。
上のスクリーンショットにあるように、この数式は1行目と2行目では完全に動作します。 4行目と5行目では、2番目のグループに4文字が含まれていますが、最初の3文字だけが返されます。 6行目と7行目では、2番目のグループには2文字だけなので、Excel検索数式はそれらの後にダッシュを返しています。
戻りたい場合は 1回目と2回目の間にあるすべての文字 のある文字(この例ではダッシュ)がある場合、どのように処理するのでしょうか? その答えは次の通りです。
=mid(a2, find("-",a2)+1, find("-",a2, find("-",a2)+1)-find("-",a2)-1)である。
このMIDの公式をよりよく理解するために、その引数を一つずつ検証してみよう。
- 第1引数(text):抽出したい文字を含むテキスト文字列で、この例ではセルA2です。
- 第2引数(start_position):抽出したい最初の文字の位置を指定します。 FIND関数で文字列中の最初のダッシュを探し、ダッシュに続く文字から始めたいので、その値に1を加えます: FIND("-",A2)+1.
- 第3引数(num_chars) 返したい文字の数を指定します。 この式では、ここが一番難しいところです。 FIND(またはSEARCH)関数を二つ使って、一つは最初のダッシュの位置を決める FIND("-",A2) 、もう一つは2番目のダッシュの位置を返す FIND("-",A2, FIND("-",A2)+1) です。 そして後者から前者を引き、1が不要なので引くのです。のように、どちらかのダッシュを含めることができます。 その結果、1番目と2番目のダッシュの間の文字数が得られ、これはまさに求めているものです。 そこで、この値を MID 関数の num_chars 引数に渡します。
同じように、2本目のダッシュの後に3文字を返すことができます。
=mid(a2, find("-",a2, find("-",a2, find("-",a2)+1) +2)), 3)
または、2本目のダッシュと3本目のダッシュの間の文字をすべて抽出します。
=mid(a2, find("-", a2, find("-",a2)+1)+1, find("-",a2, find("-",a2)+1) +2) - find("-", a2, find("-",a2)+1)-1)
例4.括弧の間のテキストを検索する
A列に何か長いテキスト文字列があり、(括弧)で囲まれたテキストだけを検索して抽出したいとします。
そのためには、文字列から必要な文字数を返すMID関数と、どこから何文字取り出すかを決めるExcelのFIND関数またはSEARCH関数が必要です。
=mid(a2,search("(",a2)+1, search(")",a2)-search("(",a2)-1))
この式のロジックは、前の例で説明したものと似ています。 そしてまた、最も複雑な部分は、何文字返すかを式に伝える最後の引数です。 num_chars引数のかなり長い式は、次のようなことを行っています。
- まず、閉じ括弧の位置を求めます。
SEARCH(")",A2)
- その後に、冒頭の括弧の位置を決めます。
SEARCH("(",A2))
- そして、閉じ括弧と開き括弧の位置の差を計算し、その数値から1を引きます。なぜなら、結果の中にどちらの括弧もいらないからです。
search(")",a2)-search("(",a2)))-1
もちろん、この例では大文字と小文字を区別しないので、SEARCHの代わりにExcelのFIND関数を使っても問題はありません。
このチュートリアルでは、ExcelのSEARCH関数とFIND関数の使い方を説明しました。 次回は、REPLACE関数について詳しく説明します。 読んでいただき、ありがとうございました。
練習用ワークブックをダウンロードする
FINDとSEARCHの計算式の例