【初心者向け】if関数で「指定した文字列」が含まれているかを調べる方法
このページでは、if関数を使って「指定した文字列が含まれているか」を調べる方法を紹介します。
この記事の目次
セルの内容が指定した文字列と「一致する」
まずは、一番単純なパターンです。
たとえば、A2セルに「新宿」と入力されていれば「○」、それ以外の場合には「×」と表示させるには、次のような数式を入力します。
「新宿」のような「文字列の条件」を入力するときには、周りをダブルクォーテーション(「"」 Shift + 2)で囲います。
注意点
単に「A2="新宿"」という条件を入力すると、セルA2に「新宿」と入力されている場合のみ「〇」となります。
逆に言うと、「新宿」という文字が入力されているが、他の文字も入力されている場合には、「×」と表示されてしまいます。
セルの内容が指定した文字列を「含む」
たとえば、A1セルに「新宿」という文字が含まれていれば「○」、それ以外の場合には「×」と表示させるには、次のような数式を入力します。
if関数の最初の引数が「 COUNTIFS(A2,"*新宿*")>0 」というようにかなり複雑になっています。
この数式は、次のような意味です。
COUNTIFS(A2,"*新宿*") | A2セルの中で「新宿」という文字が「含まれる」セルの数 |
COUNTIFS(A2,"*新宿*")>0 | A2セルのうちで「新宿」という文字が「含まれる」セルの数が0より大きい |
何言ってるんだ?という感じだと思うのですが、
- A2セルの中で「新宿」という文字が「含まれる」セルの数
-
かみくだいて書くと次のようになります。
- A2セルに「新宿」という文字が含まれていなければ「0」
- A2セルに「新宿」という文字が含まれていれば「1」
※なぜ、こういう意味になるのかは、すぐ後で書きます。
- A2セルのうちで「新宿」という文字が「含まれる」セルの数が0より大きい
-
A2セルに「新宿」という文字が含まれていなければ「0」、含まれていれば「1」になるのですから、
「・・・が0より大きい」=「A2セルに新宿という文字が含まれている」
を意味することになります。
countifs関数の意味
先ほどの数式を理解するためには、いくつか知っておかないいけない知識があります。
その1つ目が「countifs関数についての知識」です。
countifs関数は、1つ目の引数で指定した範囲のうちで、2つ目の引数で指定した内容のセルが何個あるかを数える関数です。
たとえば、
という数式であれば、「B2~B6セルの中で内容が出であるセルの個数」を計算することになります。
1つめの引数に「セルを1つだけ」指定していることに注意
今回の数式は、次のような数式でした。
1つめの引数が「1つのセル」しか指していないので、違和感を感じるかもしれませんが、考え方は先ほどの数式と一緒です。
さきほどの数式と同じように考えて、
「A2セルの中で内容が*新宿*であるセルの個数」を計算することになります。
2つ目の引数の「*」の意味とは?
次に、必要な知識が、2つ目の引数の「*」の意味です。
上で書いたcountifs関数には、2つ目の引数に「"*新宿*"」というように「*」マークが「新宿」の前後に出てきます。
この「*」マークは、「ワイルドカード」と呼ばれる文字の一種で、特殊な意味を持っています。
具体的には、0文字以上の「すべての文字」を表す記号として使われます。
- ある単語の後に「*」を入れた場合
-
たとえば、「"新宿*"」というように、新宿の後ろだけに「*」(アスタリスク)マークをつけると次のようなものは、すべて「条件に合うもの」として判断されます。
新宿駅西口 → 新宿駅西口 新宿の後に「駅西口」という文字が入っているので、条件に一致したと判断される 新宿駅 → 新宿駅 新宿の後に「駅」という文字が入っているので、条件に一致したと判断される 新宿 → 新宿 新宿の後に文字がないが、条件に一致したと判断される 西新宿駅 → 西新宿駅 新宿の前に「西」という余計な文字が入っているので、不一致と判断される - ある単語の前に「*」を入れた場合
-
同様に、「"*新宿"」であれば、次のように判断されます。
西新宿 → 西新宿 新宿の前に「西」という文字が入っているので、条件に一致したと判断される 新宿 → 新宿 新宿の前に文字がないが、条件に一致したと判断される 新宿駅西口 → 新宿駅西口 新宿の後に「駅西口」という余計な文字が入っているので、不一致と判断される 西新宿駅 → 西新宿駅 新宿の後に「駅」という余計な文字が入っているので、条件に不一致と判断される - 単語の前・後の両方に「*」を入れた場合
-
「"*新宿*"」というように、単語の前後に「*」を入れると、次のように判断されます。
新宿駅西口 → 新宿駅西口 新宿の前に文字がない
新宿の後に「駅西口」という文字が入っている
ので、条件に一致したと判断される新宿 → 新宿 新宿の前に文字がない
新宿の後にも文字がない
ので、条件に一致したと判断される西新宿 → 西新宿 新宿の前に「西」という文字が入っている
新宿の後に文字がない
ので、条件に一致したと判断される西新宿駅 → 西新宿駅 新宿の前に「西」という文字が入っている
新宿の後に「駅」という文字が入っている
ので、条件に一致したと判断される結局、
- 「新宿」の前に何文字あってもOK
- 「新宿」のあとに何文字あってもOK
ということになるので、結局「"*新宿*"」=「新宿を含む」という意味になるのです。
なぜ、わざわざcountif関数を使うのか?
ワイルドカードという便利なものがあるのなら、それをif関数に使って、次のように数式を書きたいところです。
でも、残念ながら、このようには書けません。
というのは、IF関数はワイルドカードには対応していないからです。
IF関数で上のような数式を書くと、「*」は「*」という文字として認識されてしまうのです。
要するに、ワイルドカードを使うために、無理矢理COUNTIFS関数を使っているだけなのです。
複数の文字列を条件に指定したいとき
たとえば、あるセルに「新宿」「渋谷」「品川」のどれかが入力されている場合のみ「〇」、それ以外のときは「×」と表示させるためには、次のようにOR関数を使った数式を入力します。
セルの内容が指定した「いずれかの文字列を含む」
IF関数の中にOR関数の中に「複数のCOUNTIFS関数を入れた」数式を入れることで、処理ができます。
たとえば、あるセルに「新宿」「渋谷」「品川」のどれかが含まれている場合のみ「〇」、それ以外のときは「×」と表示させるためには、次のような数式を入力します。
少し前に説明した《COUNTIFS関数にワイルドカード「*」を使った条件》をOR関数でつなぐことで、「いずれかの文字を含む」という条件を表現しています。
セルの内容が指定した「すべての文字列を含む」
IF関数の中に、AND関数の中に「複数のCOUNTIFS関数を入れた」数式を入れることで、処理ができます。
たとえば、あるセルに「新宿」「西」の両方が含まれている場合のみ「〇」、それ以外のときは「×」と表示させるためには、次のような数式を入力します。
少し前に説明した《COUNTIFS関数にワイルドカード「*」を使った条件》をAND関数でつなぐことで、「すべての文字を含む」という条件を表現しています。