社会人になったのでさすがに家計簿みたいなのをつけるかとなった.帳簿につける上での要求は以下の通り.
- PCでシュッとつけられる
- 支出管理のみを行う
- 収入は基本一定なので,一定金額以上使わない目安にしたい
- 上限を多少厳格に定めて運用する.残りは貯蓄に回したりする
- 月ごとに支出を記録する
- カードやSuica,現金などの支払方法ごとに総計が勝手に求まる
プログラムを書くのは筋が悪いと思ったので,Googleスプレッドシートで管理することにした.
こんな感じ.まだ何も入れていないけど,毎月定額で支払う枠も作った.通信料やサーバの維持費用などを書く.
で,これらの支払いタイプごとに総額を求める.
GoogleスプレッドシートにはQUERY
関数というのがあって,これを使うことで総計を求めることができる.以下は今回使ったQUERY
関数.
=QUERY({OFFSET(F:G,3,0);OFFSET(J:K,3,0)}, "select Col2, sum(Col1) where Col2 != '' group by Col2 label sum(Col1) ''", -1)
第一引数にOFFSET
関数で
- F列(価格)とG列(支払いタイプ)の4行目以降
- J列(価格)とK列(支払いタイプ)の4行目以降
をデータソースとして指定する.片方だけなら{}
で囲う必要はない.複数入れる場合は{}
で囲って;
で区切る.
第二引数でクエリを指定する.select Col2
はまずCol2(G列,K列)を列挙する.カンマで区切って,sum(Col1) where Col2 != '' group by Col2
で各支払いタイプごとに値を総計する.自動的にsumというラベルがつくので,label sum(Col1) ''
とするとラベルを消すことができる.
第三はデータソースのうち,何行目までをラベルとして扱うのかを指定するやつ(多分).デフォルトは0で,-1を入れると雑に予測して入れてくれる.今回は試しに-1にしてるけど,optionalなので入れなくても良い.
この関数をM4
のセルに突っ込んでおくと勝手に以下M4:N7
のように展開される.
QUERY
関数は便利なので,覚えておくと吉.
現状でも割と便利なのだけど,日付/品目/金額の入力が若干不便なのと,毎月テンプレートと定期支払の部分をコピーしないといけないのは面倒なので,Google Apps Scriptなどを使ってGoogleフォームから入力できるように,月初に開くと勝手にテンプレートからコピーされてるようにしたい.