TL;DR
Googleスプレッドシートでcountif
に対してArrayFormula
を使って配列対応をさせようとすると失敗する。
GASで配列関数に対応した自作関数を定義してみたら、できた。
やりたいこと
countif
で条件に一致するセルの数を集計したい。
1行ごとに関数を入れていけばよいが、新たに行を挿入するときは手動で関数をベタ打ちしなければならない。
面倒なので、ArrayFormula
を使おうとするが…
もともと範囲内のセルを数える関数なので、行ごとの集計ができない。
そこで、
nxm
の配列を入れるとn
の列が返ってくるような関数を作りたい!
つまり、行ごとにcountif
してくれる関数がほしい!
実装
ツール > スクリプトエディタを起動
以下のコードを入力して保存する。
function COUNTIFARR(arr, str) {
const re = new RegExp(str);
return arr.map(a => a.filter(v => re.test(v)).length);
}
実行結果
注意
- 配列を返す関数は、フィルターをかけるとおかしな挙動になるため注意。
- 自作関数はスプレッドシート上ではサジェストされない(=赤線で「不明な関数」と警告が出る)が、気にせず確定すれば動く。