残業を減らす!Officeテクニック

エクセルのREGEXTEST関数でOR条件をまとめる裏技! もうCOUNTIFS関数を「+」でつなげなくてOK

COUNTIFS関数の弱点を解決する「REGEXTEST関数」

 表に入力された内容について、条件を満たすデータの件数を数える作業はよくあります。条件を複数指定してデータを数えられるCOUNTIFS関数は、多くの場面で利用される定番の関数です。例えば「営業部かつ未対応」のようなAND条件なら簡単です。

例えば「営業部かつ未対応」といったAND条件は「=COUNTIFS(B2:B39,"営業部",E2:E39,"未対応")」のように記述できる

 では、担当部署が「営業部」かつ、ステータスが「未対応または保留」のOR条件を満たすデータの件数は? Excelに慣れていれば、「+」を使ってCOUNTIFS関数の数式を足し合わせると、すぐに思いつく人も多いでしょう。

=COUNTIFS(B2:B39,"営業部",E2:E39,"未対応") + COUNTIFS(B2:B39,"営業部",E2:E39,"保留")

COUNTIFS関数を利用して、担当部署が「営業部」、かつステータスが「未対応または保留」の件数を求めた例

 しかし、さらに「調査中」の条件を追加する場合は、以下のような数式になります。数式の内容は単純ですが、条件の数だけ足し合わせる数式が増えていきます。

=COUNTIFS(B2:B39,"営業部",E2:E39,"未対応") + COUNTIFS(B2:B39,"営業部",E2:E39,"保留") + COUNTIFS(B2:B39,"営業部",E2:E39,"調査中")

 COUNTIFS関数ではOR条件の扱いに手間がかかる点が弱点です。後から数式を修正しにくいという問題にもつながります。今回は、OR条件をシンプルに記述できる「REGEXTEST関数」の使い方を見ていきましょう。Microsoft 365のExcelで利用可能です。

REGEXTEST関数の構文

 REGEXTEST関数は、引数[テキスト]に指定したセル(文字列)に[パターン]に一致するかどうかを調べる関数です。任意のコードに特定の英数字が含まれているか、冒頭や末尾の文字が一致しているかなどを判定する際に利用することが一般的です。

REGEXTEST関数の構文。検索の対象となる文字列を引数[テキスト]に指定し、[パターン]に一致するかどうかを調べるための正規表現を指定する。[大文字と小文字の区別]は大文字と小文字を区別するかどうかを指定する。0または省略した場合は区別し、1を指定した場合は区別しない

 結果は「TRUE」もしくは「FALSE」で返されます。[パターン]には単語を指定できるので、例えば「未対応」という文字列と一致するかどうかを判定する場合は「=REGEXTEST(E2:E39,"未対応")」のように記述できます。

セルG2に「=REGEXTEST(E2:E39,"未対応")」と入力した結果。ステータスが「未対応」の場合に「TRUE」となる

 「または」を表現したい場合は「|」で[パターン]を連結できます。「未対応または保留または調査中」という条件であれば、以下のように指定できます。

=REGEXTEST(E2:E39,"未対応|保留|調査中")

セルG2に「=REGEXTEST(E2:E39,"未対応|保留|調査中")」と入力した結果。ステータスが「未対応または保留または調査中」の場合に「TRUE」となる

「--」で結果を「1」「0」に変換する

 しかし、TRUE/FALSEといった結果のままでは集計に適さないため、「--」を利用します。「--」は、条件判定の結果を数えたい時に使われます。1つ目の「-」で「TRUE」を「-1」に、2つ目の「-」で「-1」を「1」に変換します。結果としてTRUEは「1」、FALSEは「0」に変換されます。TRUE/FALSEに「1」をかけて「*1」としても同じですが、「--」のほうが短く、Excelの配列計算では定番の書き方です。

セルG2に「=--REGEXTEST(E2:E39,"未対応|保留|調査中")」と入力した結果。ステータスが「未対応または保留または調査中」の場合に「1」となる

=--REGEXTEST(E2:E39,"未対応|保留|調査中")

 「TRUE」が「1」なので、合計すれば指定したOR条件を満たすデータの件数となります。単純にSUM関数で合計するだけです。

「=SUM(--REGEXTEST(E2:E39,"未対応|保留|調査中"))」と入力して合計すると、ステータスが「未対応または保留または調査中」のデータの数がわかる

「*」でAND条件と組み合わせる

 最後に、担当部署が「営業部」かつ、ステータスが「未対応または保留または調査中」の条件を考えてみましょう。『担当部署が「営業部」』の条件を満たすデータの判定方法は簡単ですね。

=--REGEXTEST(B2:B39,"営業部")

担当部署が「営業部」のデータは「=--REGEXTEST(B2:B39,"営業部")」という数式で判定できる

 課題は、先ほどの数式で求めた『ステータスが「未対応または保留または調査中」』の条件です。これらの条件を組み合わせる場合は、「*」を使ってかけ算します。

 「=--REGEXTEST(B2:B39,"営業部")」の結果がTRUEなら「1」、「=--REGEXTEST(E2:E39,"未対応|保留|調査中")」の結果がTRUEなら「1」なので、両方がTRUEの場合だけ結果が「1」になります。

=SUM(--REGEXTEST(B2:B39,"営業部") * --REGEXTEST(E2:E39,"未対応|保留|調査中"))

REGEXTEST関数とSUM関数を組み合わせて、担当部署が「営業部」かつ、ステータスが「未対応または保留または調査中」の条件を満たすデータの件数を求めた

 COUNTIFS関数を使って表現すると以下の数式になります。

=COUNTIFS(B2:B39,"営業部",E2:E39,"未対応") + COUNTIFS(B2:B39,"営業部",E2:E39,"保留") + COUNTIFS(B2:B39,"営業部",E2:E39,"調査中")

同じ条件をCOUNTIFS関数の数式で求めた。REGEXTEST関数の数式と結果は同じだが、条件の数だけ数式を足し合わせている

 条件を追加する場合、COUNTIFS関数では数式を増やす必要がありますが、REGEXTEST関数なら条件を追記するだけで済みます。数式が短くできてメンテナンスもしやすくなります。複数のOR条件に悩んだ時に思い出してみてください。