セル内を検索する


セルに入力された文字列内を検索するには、FIND関数SEARCH関数を使います。

いずれも、引数「開始位置」を省略すると「1」を指定したとみなされます。つまり、セル内に入力されている文字列の左端から検索します。てことは、要するにセル内を全部検索するってことです。普通は、そうします。

両者の違いは、

  • FIND関数…大文字と小文字が区別される。ワイルドカードを使えない
  • SEARCH関数…大文字と小文字が区別されない。ワイルドカードを使える

つまり「大文字と小文字の区別なんかしない。だって検索するの日本語だから。あ、ワイルドカードなんて面倒くさいのは使わない。完全一致でおk」というのなら、どっちでもいいということです。ちなみに、ワイルドカードを使った検索とは、たとえば次のような感じです。

上図を見てお分かりのように、FIND関数もSEARCH関数も、引数「検索文字列」が引数「対象」で指定したセル内に存在しないとエラーになります。

大文字と小文字を区別するというのは、たとえば「ABC」と「abc」を区別して検索するかどうかです。英語を多用する人でしたら、これは気にするところかもしれません。もっとも、あまり英語は使わないと。ほとんどが日本語のデータだよって場合は、こうした大文字/小文字の区別というよりも、全角と半角の区別に注意したいところです。ちょっと、試してみましょう。

FIND関数では区別されます。では、SEARCH関数ではどうでしょう。

こちらも区別されます。もちろん、こうして区別して検索したいのなら、それでもいいです。そのまま使えばいいのですから。しかし、私は知っています。実務では、こうした全角と半角がよく混在することを。もちろん、混在すること自体が問題なのですが、でも混在しているデータでも、何とかして探したい、処理したい、検索したいということもあります。どうしましょう。

簡単です。検索対象の全角/半角をすべて統一してから検索すればいいんです。JIS関数はすべての半角を全角に変換します。

逆に、すべて半角に変換したいときはASC関数を使います。

どちらを使ってもいいです。とにかくすべて統一してから検索します。

使ったら消す

こうしたFIND関数やSEARCH関数は、いったい何に使えばいいのでしょう。自由に、好き勝手に使ってください。決まりなどありません。私はよく「元データのチェック」に使っています。たとえば次のようなケースです。

こんなようなデータをもらいました。たとえば1万件くらい。名字と名前の間は「全角のスペース」で区切られています(と聞いています)。これを、全角のスペースで区切り、名字と名前に分割するというようなときです。「名字と名前の間は全角のスペースで区切られていますので、よろしくお願いしま~す」と言われても、疑い深い私は「ホントかぁ~w」と信用しません。今までに、何度も痛い目にあってきたからです。そこで、こういうデータをもらったら、本当に全角スペースで区切られているか、つまり本当に全角スペースが含まれているかどうかを、まず確認します。

B列に「=FIND(" ",A2)」のような数式を入れ、フィルハンドルをダブルクリックして、一番下までコピーします。そして、B列にオートフィルタを設定します。

おやぁ~w エラーになってるのがあるぞ~ってことは、全角スペースが含まれていないデータがあるんじゃね?

ほ~ら、あったw やっぱな~あいつは前もこういうことがあったしな~Excelなめんなよw と笑いながら修正します。もちろん、手で修正するのが大変なほど大量にあったら、元データを突き返します。

はい、これでキレイなデータになりました。

そして!お伝えしたいのは、ここからです。チェックのために入力したFIND関数は、もう必要ないのですから削除します。

一般的なExcelのトレーニングでは、ワークシート関数を最終結果を得るために使うと教わります。SUM関数の合計や、AVERAGE関数の平均など、決められたセルに関数を入力して終わりです。確かに、そういう使い方もあります。しかし、今回のように、ワークシート関数を途中経過として使うケースが、実務では多いのです。処理をする前にデータの整合性をチェックしたり、処理をするのに不要なデータを削除したり。ワークシート関数は、最終結果を得るためだけに使うのではなく、このように、途中経過として使う発想を持ってください。そうすれば、あなたのExcelライフは256倍幸せになります。