[Googleスプレッドシート]QUERYで空白行を含めて集計する・SQLのCOALESCEっぽく置き換えする方法
今回は無理やりネタです。
- セルの値を条件に、データをQUERYで集計
- 集計した値をさらに集計する
というケースで、QUERYの結果が空の場合に、#N/Aが返ってきて表全体が#N/Aになってしまう悲劇を防ぎます。
具体例
社員の販売表があるとします。
1行目は「hogeさんがAという商品を10個売った」という意味ですね。
上司から、「これを集計してね」と言われます。
「社員名簿があるから、その右側にくっつけて」と。
社員名簿
期待される表その1
上司
「あ、さらに商品別売上と社員別売上も出しておいて」
期待される表その2
※この期待される表
は、結果をソートしたり、いじったりがしにくい構造になっており、正直あまり良くない表の組み方です。
基本的には、このような表を作らないようにしましょう。
とはいえ仕事をしているとそうもいかないことがありえます。そんな時、今回の方法を試してみてください。
QUERYで、行ラベル x 列ラベルを条件に集計
QUERYを使ってやってみます。
=QUERY($A$5:$C,"SELECT SUM(C) WHERE A = '"&$E5&"' AND B = '"&G$4&"' label SUM(C) ''")
※商品別売上、社員別売上はそれぞれ行/列をSUM()しているだけです。
一部正しく取れています。
とはいえ、売上表に含まれていない、QUERYが空白を返す箇所では#N/Aが返ってきてしまいます。
それにより、商品別売上も社員別売上も#N/Aになってしまいます。
解決策 : IFERROR()を使って空の時の初期値を設定する
=IFERROR(QUERY($A$5:$C,"SELECT SUM(C) WHERE A = '"&$E5&"' AND B = '"&G$4&"' label SUM(C) ''"),0)
うまくいきました。
IFERROR()は、IFERRORの中の値がエラーの時、任意の値で置き換える関数です。
今回だと、QUERY関数の結果が空白で、#N/Aとなる場合は、0で置き換えています。
SQLのCOALESCE(最初に見つかったNULLではない値を表示する機能。これを使えばデータが存在しない場合は初期値で置き換えることができる)は、Googleスプレッドシートでは使えないようですが、IFERRORを駆使してそれっぽいことをやってみました。
別の解決策 : SUMIFS()を使う
身も蓋もないですが今回のケースは無理にQUERYを使うよりもSUMIFSの方が楽かもしれません。
以上です。
ディスカッション
コメント一覧
まだ、コメントがありません