「FIND関数でエラーが発生して困る!」
文字の位置を検索できる「FIND関数」を知っていますか?
「文字の位置を知ってどうするの?」と思いそうですが、位置を知ることができると例えば「文字列の中から希望の文字列を抜き出す」ことも可能でとても便利です。
しかしFIND関数は使い方が分かりずらいのが難点。
そこで当ページではFIND関数の基本的な使い方とワンランク上の応用テクニック、さらにトラブルシューティングについて詳しく解説します。
これでFIND関数を使いこなすことができるようになりますよ!
1.FIND関数の使い方
では始めにFIND関数の使い方とSEARCH関数との違いを見てみましょう。
1-1.FIND関数とは?
まずはFIND関数とはなにかからです。
FIND関数とは、「文字列が他の文字列内で最初に現れる位置を検索・返す」関数です。
上の例では「マイクロソフト」という文字列の中にある「ク」の位置を検索しており、「ク」は前から三番目にあるので結果「3」が返ってきています。
このように指定した文字の位置を返してくれるのがFIND関数なのです。
なお、FIND関数の構文は次の通りです。
検索文字列 | 検索する文字列を指定 |
---|---|
対象 | 検索対象の文字列を指定 |
開始位置 | 検索を開始する位置を指定(省略可) |
では数式を作ってみましょう。
(1)数式バーに「=FIND(」と入力しfxボタンを押す
(2)関数の引数ウィンドウで「検索文字列」、「対象」、「開始位置」を指定する
※先頭から検索する場合には「開始位置」は省略する
(3)完了
このようにすれば検索文字の位置を求めることができます。
1-2.SEARCH関数との違いは?
エクセル関数にはFIND関数と似たような動きをする関数として「SEARCH関数」というものがあります。
こちらもやはり、「文字列が他の文字列内で最初に現れる位置を検索・返す」関数ですが、細かいところで違いがあります。
その違いとは、「大文字と小文字を区別するか?」、「ワイルドカードが検索できるか?」です。
まず違いを分かりやすく表にすると次のようになります。
関数 | 大文字と小文字の区別 | ワイルドカードの検索 |
---|---|---|
FIND | される | 可 |
SEARCH | されない | 不可 |
「大文字と小文字の区別」は例えば「A」と「a」を違う文字として扱うか?ということです。
そして「ワイルドカード」とは「*」や「?」という記号のことで、通常の文字とは異なる扱いを受けます。
FIND関数では「*」や「?」を文字として検索できますが、SEARCH関数では検索できません(「~*」のように「~」を付ければ可能ですが)。
ですからワイルドカードを検索するときにはFIND関数の方が便利です。
2.FIND関数応用編!もっと場面に合わせて使う方法
次にFIND関数の応用編として、3つテクニックを紹介します。
2-1.複数条件の指定の仕方
まずは「FIND関数で複数条件を指定する方法」です。
上のような都道府県名から「県」、「府」または「都」の位置を確認する方法を見てみましょう。
FIND関数に複数条件を指定するには、数式のエラーを解除できる「IFERROR関数」と組み合わせます。
IFERROR関数の構文は次の通りです。
値 | エラーを検査する範囲を指定 |
---|---|
エラーの場合の値 | エラーの場合置き換える値を指定 |
先ほどの例では、セルC1にIFERROR関数とFIND関数を組み合わせて「=IFERROR(FIND("県",A1),IFERROR(FIND("府",A1),IFERROR(FIND("都",A1),0)))」と入力します。
これで、FIND関数で「県」が見つからなければIFERROR関数の効果でエラーとせずに「府」を探し、なければまたIFERROR関数の効果でエラーとせずに「都」を探すことができます。
2-2.2番目を確認する方法
次に「2番目を確認する方法」です。
上の「My name is ai」という文字列の中から「2番目の『a』の位置を検索」してみましょう。
この場合引数の「開始位置」を「6」以降にしても可能ですが、これだと対象の文字列が変わった場合にその都度開始位置を手で直さなければなりません。
そこで次のようにします。
数式バーの赤線は引数「開始位置」で、ここに「FIND("a", A1)+1」と入力することで、開始位置を可変的にすることができます。
つまり開始位置で一度検索文字列「a」を探し、返ってきた値に「1」を足すことで、「常に開始位置を1番目の次からにする」ことができるようにしているのです。
2-3.後ろから検索するには?
続いて「後ろから検索する方法」です。
FIND関数はこれまでも見てきたように「前から」検索をします。
これを後ろから検索する方法ということです。
「My name is ai」という文字列の後ろから「a」の位置を確認する方法を見てみましょう。
FIND関数で後ろから検索するには、文字列の置き換えができる「SUBSTITUTE関数」と文字数をカウントする「LEN関数」を「FIND関数」と組み合わせます。
まずSUBSTITUTE関数の構文は次の通りです。
文字列 | 置き換えたい文字列が入っているセル番号を指定 |
---|---|
検索文字列 | 置き換える前の文字列を指定 |
置換文字列 | 置き換えた後の文字列を指定 |
置換対象 | 置き換える文字の順番を指定 |
LEN関数の構文は次の通りです。
文字列 | 文字数をカウントしたい文字列のセル番号を指定 |
---|
先ほどの例では、セルA3にSUBSTITUTE関数とLEN関数、FIND関数を組み合わせて「=FIND("★",SUBSTITUTE(A1,"a","★",LEN(A1)-LEN(SUBSTITUTE(A1,"a",""))))」と入力しています。
数式が長くわかりづらいですが、まず「LEN(SUBSTITUTE(A1,"a",""))」で「a」を消した場合の文字数をカウントし、それを「LEN(A1)」から引くことで一番後ろの「a」が何番目の「a」になっているかを求めます。
次に「SUBSTITUTE(A1,"a","★",~)」で一番後ろの「a」のみを「★」に置き換えます。
最後に「=FIND("★",~)」で「★」の位置を求めます。
これで実質的に「一番後ろの『a』の位置を求める」ことができるのです。
ただし一つ注意しなければならないのは、検索対象の文字列に「★」が使われていないようにしなければならないということです。
数式で使っている「★」は、必ずこれでなければならないということはありません。
もし文字列の中に「★」があるのであれば、その他の文字、例えば「●」など、使われていないものに変えましょう。
3.FIND関数でエラー発生!原因と対処法
最後にFIND関数のエラーの原因と対処法についてです。
FIND関数で発生するエラーとしては、「#VALUE!」がありますが、このエラーは「検索した結果値がありませんでしたよ」というものになります。
つまりこのエラーを解消するためにはまず、「検索文字列を正しいものに変える」必要があり、これでエラーが解消されます。
なお、「検索文字列がないかもしれないが、それでもエラーを表示させたくない」場合には、IFERROR関数と組み合わせるとよいでしょう。
IFERROR関数は先ほども紹介しましたが、「エラーを解消してくれる関数」です。
例えば「=IFERROR(FIND("a",A1),"検索文字列なし")」という数式にすればFIND関数がエラーの際にはエラーを「検索文字列なし」という表示に置き換えてくれます。
また、「"検索文字列なし"」のところを「””」に変えれば、エラーの際には空白としてくれます。
このどちらかの方法をとれば、FIND関数でのエラーは発生しなくなるでしょう。
4.まとめ
以上エクセルのFIND関数について、基本的な使い方と応用テクニック、そしてトラブルシューティングを紹介しました。
FIND関数はちょっと分かりづらい関数ですが、様々な関数との組み合わせによりできることをぐっと広げることができるものになっています。
ですからまずはFIND関数の基本を学び、しっかりと身に付けるようにしましょう。
コメント