文字列の中から指定した文字を探し、何文字目かを調べることができる、FIND関数とSEARCH関数という、2つの関数が存在します。
この2つの関数、どういう効果がある関数なのかだけで言うと、全く同じなんです。
ですが、それぞれの関数の解説記事でも触れてますが、細かい部分で違いがあるんです。
今回はその違いについての詳細や実験をしていきます。
FIND関数とSEARCH関数の機能についてはこちら
今回はあくまでもFIND関数とSEARCH関数の違いについてを書いていきます。
そもそもFIND関数とSEARCH関数がどういう機能なの?という方は下記記事をご覧ください。
何が違うの?
FIND関数とSEARCH関数、それぞれに何ができて、何ができないのかというと、以下の2点になります。
- 大文字と小文字を区別するか
- ワイルドカード(*と?)が使えるか
そしてFIND関数とSEARCH関数で、それぞれどう動くのかというと
・大文字と小文字を区別する
・ワイルドカードは使えない
・大文字と小文字を区別しない
・ワイルドカードは使える
こうして比較してみると、SEARCH関数は緩く、FIND関数の方がきつい印象ですね。
実験してみよう
何が違うのかわかったら、今度は実験・比較をしてみましょう。
大文字・小文字
まずは大文字と小文字の区別について。
このように、Seiuchi is Beautifulという文字列から、大文字のSを探そうとした場合は、FIND関数もSEARCH関数も、先頭のSを探し出すため、共に結果は1となった。
しかし、小文字のsを探そうとした場合は、FIND関数では先頭にある大文字のSを無視し、10文字目にある小文字のsを探し出し、10という結果となった。
SEARCH関数の方は、小文字のsを探そうとした場合でも、先頭の大文字のSを探し出すので、結果は1となっている。
ワイルドカード
次にワイルドカードを使ってみましょう。
このように、FIND関数ではワイルドカードを使用すると、#VALUE!となってしまいます。
ですがSEARCH関数ではワイルドカードが使えるので、ちゃんと機能した結果が返ってきていますね。
太?は、太のあとに何か1文字ある場合を探してますので、太郎という文字を探し出しました。
*太は、太の前に何かの文字がある場合(文字数の制限なし)を探してますので、セイウチ太を探し出したという結果になりました。
全角と半角は区別しない
大文字・小文字の区別と、全角・半角の区別って、混同しますよね。(するよな?)
そんなわけで、全角と半角はFIND関数でもSEARCH関数でも区別されずにエラーになるというケースも実験してみましょう。
お気づきのとおり、記事の文字数稼ぎです。
はい、エラーですね。
今回は全角カナを使っているセイウチ太郎から、半角のセを探そうとしてエラーになっています。
これが半角カナを使っているセイウチ太郎なら、問題なく半角のセを見つけ出し、1という結果になります。(この場合逆に、全角のセを探すとエラーとなる)
セイウチ太郎なんて存在がエラーみたいなもんなんやからエラーになっただけやろ例題が悪いんじゃ例題が。などの文句は一切受け付けません。
まとめ
こういう事。
FIND関数 | SEARCH関数 | |
大・小文字 | 区別する | 区別しない |
ワイルドカード | 使えない | 使える |
コメント