Sunday, November 27, 2011

spreadsheet filter() return

家計簿をgoogle spreadsheetで管理する際に困った事を書いておきます。

[PROBLEM: CAN'T TREAT N/A ERROR AS 0 VALUE]
私がgoogle spreadsheetで作成した家計簿では、
入出金額と但し書きを表にして管理しています。
ある月の電話料金を自動算出する計算式も導入しております。
計算式は、
1.filter関数で「但し書き[i]="スイドウ"」の条件に合致する「金額[i]」を抽出し
2.sum関数でその結果を合計し、
その月の水道料金支払額を計算します。

ここで、1.filterという関数があります。
これは、配列AとBを引数に取り、
B[i]の値がxならA[i]を出力するという関数です。
返り値は配列になります。
B[i]の値がxのものがない場合、
エラーでN/A(値なし)が返ってきます。

問題は、

[FAILURE PATTERN]
sum(filter(arrayA,arrayB="WaterFee"))

と書くと
仮にfilterの結果がN/Aで返ってきた時、
sumの返り値も0でなくN/Aで返ってきます。
水道料金は隔月引き落としなので、水道料金引き落としがない月は
sumの結果はN/Aで返ってきます。
本当は0で返ってきて欲しいです。

[SOLUTION: SUCCESS/ UTILIZE IFERROR() FUNCTION]
解決可能でした。
IFERROR関数は、引数AがN/Aなら引数Bを返すという関数です。
xがN/Aなら
IFERROR(x; 0)は0を返します。
これを使うと、

[CORRECT PATTERN]
sum(IFERROR(filter(arrayA,arrayB="WaterFee");0))

で、水道料金の合計額か、なければ0が返ってきます。

No comments:

Post a Comment