【Excel関数】セルに文字列が含まれているかどうかの調べ方(部分一致検索)

エクセル

エクセルで「セルに『〇〇』という文字列が含まれていたら、△△する」というようなことがやりたいケースがあります。
セルの文字列の一部が条件指定した文字列と一致しているか調べることを「部分一致検索」や「ワイルドカード検索」などと呼びますが、エクセルには部分一致検索のできる関数が用意されています。

では早速みて行きましょう。

部分一致検索のできる関数

エクセル 2007以降のバージョンの場合、以下の関数で部分一致検索を使えます。

関数概要
AVERAGEIF/AVERAGEIFS条件に合致するセルの平均値を求める
COUNTIF/COUNTIFS条件に合致するセルの数を数える
SUMIF/SUMIFS条件に一致するセルの値の合計を求める
HLOOKUP/VLOOKUP条件に合致する列/行から、値を求める
MATCH条件に合致するセルを求める
SEARCH文字列から、条件に合致する開始位置を求める

なお、エクセル 2003だと上記の一部の関数しかありません。
また、新しいバージョンで追加された関数でも、上記の関数から派生したものは同じように部分一致検索が使えるはずです。

部分一致検索の方法

上記の関数で部分一致検索する方法としては、文字列の中で一致しなくてもよい部分に「*」、「?」を指定します。

一致しない部分が連続する場合は「*」を使う

検索条件の文字列で「*」とした箇所は、どんな文字が何文字続いても条件に一致すると扱われます。このとき、一致しない文字が無くても(0文字)OKです。

例えば、検索条件に「*太郎」とした場合、「太郎」、「山田太郎」、「太郎」のどれでも条件に合致するものとして扱われます。
なお、「金太郎さん」だと「さん」の部分が条件に合致しないものとして扱われます。

一致しない部分が1文字の場合は「?」を使う

検索条件の文字列で「?」とした箇所は、その部分はどんな文字でも一致すると扱われます。このとき、一致しない文字が無い(0文字)だとダメです。

例えば、検索条件に「?太郎」とした場合、「太郎」は条件に合致するものとして扱われます。「山田太郎」、「太郎」は条件に合致しません。

「*」と「?」を復数組み合わせて使うこともできる

1つの検索条件に「*」と「?」を復数使用することもできます。

例えば、「*丁目?番地」だと、何丁目でもOKですが、番地は1文字でなければ合致していると判断されません。

部分一致検索のサンプル

検索条件合致する合致しない
*太郎太郎
山田太郎
太郎さん …「さん」が条件に含まれない
伊*四郎伊藤四郎
伊集院四郎
紀伊四郎 …「紀」が条件に含まれない
?太郎金太郎山田太郎 …「山」が条件に含まれない
太郎 …?部分を満たす文字がない
山?太郎山田太郎
山下太郎
山本山太郎 …「本山」が条件に含まれない

IF文で部分一致検索を使う方法

IFで部分一致を使う場合は、COUNTIF関数と組み合わせて下記のような書き方をします。

=IF(COUNTIF(対象のセル, 部分一致検索の条件), 合致する場合の処理, 合致しない場合の処理)

具体例だと下記のようになります。

=IF(COUNTIF(A1,"*太郎"),"合致する","合致しない")

これは、IF文で論理式の結果が、「0以外なら真」、「0なら偽」として扱われる特性を利用しています。

ちなみに、何でも良い文字を指定して検索することを「ワイルドカード検索」と言ったりします。

まとめ

まとめ

  • 部分一致検索に対応した関数では、「*」、「?」を使って、セルに指定した文字列が含まれているかどうかを判断できる。
  • IF文では、COUNTIFS関数と組み合わせて部分一致検索を実現できる。

オートフィルタ機能を使って条件に合致する行を抽出して手作業でメンテしていくという方法もありますが、関数を使えば更に効率アップできますよ。

エクセルExcel

Posted by moto2g