🍣

Google スプレッドシートの COUNTIFS 関数で OR 条件を扱う

2023/12/30に公開

Google スプレッドシートの COUNTIFS 関数で、OR 条件を扱う方法について、備忘録を兼ねて整理します。

結論として、以下の記法により、実現することができます。

=COUNTIFS(MAP(列1, 列2, LAMBDA(a, b, OR(aを使って記述された列1に求める条件, bを使って記述された列2に求める条件))), TRUE)

詳細

公式ドキュメントより、COUNTIFS 関数は以下のように利用します。

=COUNTIFS(条件範囲1, 条件1, [条件範囲2, 条件2, ...])

条件範囲1 - 条件1 に対して検証する範囲です。
条件1 - 条件範囲1 に適用するパターンまたはテストです。
条件範囲2, 条件2... - [省略可] - 検証対象となる追加の範囲と条件です(反復可)。

すなわち、COUNTIFS で扱う複数の条件は AND 条件であることが前提となっています。

これを OR 条件を扱うことができるように拡張するには、MAP 関数と LAMBDA 関数を組み合わせます。LAMBDA 関数で OR 条件で判定したい条件式を定義して、MAP 関数でこれを特定の範囲に適用します。MAP 関数の結果は特定の範囲に対して条件式を適用した TRUE/FALSE の配列になるため、この配列に対して TRUE を数え上げれば OR 条件を満たす項目の数をカウントすることができます。

具体例

以下のサンプルデータを用いて、具体的な例を見てみます。このデータは、飲食店についてそのエリアとジャンル、予算をまとめたデータを想定したものです。

新宿区の飲食店をカウントしたい場合は、以下の式で求めることができます。

=COUNTIFS(data!A2:A6, "新宿区")

新宿区かつ予算が 4,000 円以内の飲食店をカウントしたい場合は、以下の式で求めることができます。

=COUNTIFS(data!A2:A6, "新宿区", data!C2:C6, "<=4000")

新宿区または予算が 4,000 円以内の飲食店をカウントしたい場合は、以下の式で求めることができます。

=COUNTIFS(MAP(data!A2:A6, data!C2:C6, LAMBDA(a, b, OR(a="新宿区", b<=4000))), TRUE)

新宿区または予算が 4,000 円以内のうち、イタリアンの飲食店をカウントしたい場合は、以下の式で求めることができます。

=COUNTIFS(MAP(data!A2:A6, data!C2:C6, LAMBDA(a, b, OR(a="新宿区", b<=4000))), TRUE, data!B2:B6, "イタリアン")

このように、設定した OR 条件は COUNTIFS 関数の中に自然に組み込めるため、さらに他の条件と AND をとるなど、柔軟に条件に応じた項目数をカウントすることができます。

最後に

Google スプレッドシートは他のメンバーに具体データを共有しながら、データを集計したりその過程を共有したりすることができる強力なツールなので重宝しています。
実際には OR 条件の表現は新しくデータ列を追加すれば実現できるのですが、関数のみで実現したいシチュエーションがあったため、解決策を考えるとともにメモとして残しました。

Discussion