Spreadsheetsで条件指定された列の値のユニーク数をカウントする

ちょうど仕事で聞かれたので、いわばUniqueCountIfs的なものをGoogle Spreadsheetsで作る場合のメモ。

とにかく条件付き集計はXXX(FILTER())が汎用性的には最もいいということが前に検証できたので、今回もたぶんコレでいけるだろう。

GoogleSpreadsheetsで条件付き集計の書き方、何がいいのか - ミネムラ珈琲ブログ

その前にそういうのが標準関数でないかは調べてみる。

Excelでやったことあるけど、これクソダルイんですよね。重複してるかどうかのフラグ列を作って、同じ値で割った数を足し上げるとか。

軽く調べると状況に変わりはなくて、SUMPRODUCTで書くとか(あんまり好きじゃないからうまく動くか知らないけど)。

というわけでいつものやつでやります。

countuniqueifsの例 - Google スプレッドシート

=COUNTUNIQUE(FILTER(native_country,age>=45,race=A3))

人種ごとに年齢45以上のサンプルが住む出身国の数を集計しました。相変わらず集計している対象が意味不明。

※修正

別件に使っていたときに、この式ではFILTER式の結果が何もない際に、#N/Aが返却されて、COUNTUNIQUEの結果が1となってしまう不具合に気づいた。

=IF(ISNA(FILTER(native_country,age>=45,race=A3)),0,COUNTUNIQUE(FILTER(native_country,age>=45,race=A3)))

取り急ぎ上記のように修正したらよい。

しかしこの書き方めんどくさい・・・。SpreadsheetにLambda式みたいなの実装してくれないだろうか・・・。