いきなりですが、家計簿/お小遣い帳/現金出納帳に「残高列」って必要でしょうか。ネットでテンプレートを検索すると、必ずといっていいほど「残高/差引残高」列が右端にひっついています。以前にも同じ突っ込みを入れたことがありますが、これって何のためにあるんでしょう。
もちろん「=SUM(OFFSET([@残高],-1,0),[@入金]-[@出金])」で済むといえば済むんですが、OFFSETを入れると再計算がわずらわしいことになります。それに残高列を作り始めると、(使ってもいないのに)見た目を気にして「まだ入力していない行の残高を見えないようにしたい」とか「日付の区切り目にだけ残高を表示したい」とか、注文を付け始めるんですよ。そうなると数式がどんどん長くなっていきます。そして行削除や行挿入で数式の抜け漏れが発生して、余計なエラーが出るんです。多分「印刷イメージ」先行で表を考えているせいだと思います。
もちろん紙の出納帳だったら分かりますよ。手書きで計算するなら1個ずつ計算しておいたほうが後でチェックもしやすいですもんね。でもそれは「手書き」で「手計算」だからですよね。そろばんや電卓片手にやってた時代の名残りです。現金残高って残金を合わせる時以外いりませんよね。目的から考えたら、必要な時にだけ残高が分かればそれでよくないですか?
現時点の残高が知りたいだけだったら、集計行に入金計と出金計を入れて「=入金計-出金計」とやれば残高なんて簡単に計算できます。
正直、これでいいんじゃないでしょうか。
日や月ごとにチェックするとしても、残高を確認するのは「入力し終わった後」の話なので、いちいち「入力しながら確認する」必要なんてないはずです。表計算では「入力表には数式を入れない/出力表には手入力しない」が原則なので、日ごとの残高は出力用の表に作るべきだと思います。
日毎の残高表を別表で作るのなら話は簡単で、
G2:=UNIQUE(テーブル1[日付]) H2:=SUMIF(テーブル1[日付],G2#,テーブル1[入金]) I2:=SUMIF(テーブル1[日付],G2#,テーブル1[出金]) J2:=SCAN(0,H2#-I2#,LAMBDA(x,y,x+y))
月毎だったらこう。
G2:=UNIQUE(テーブル1[日付]-DAY(テーブル1[日付])+1)
H2:=SUMIFS(テーブル1[入金],テーブル1[日付],">="&G2#,テーブル1[日付],"<="&G2#+32-DAY(G2#+32))
I2:=SUMIFS(テーブル1[出金],テーブル1[日付],">="&G2#,テーブル1[日付],"<="&G2#+32-DAY(G2#+32))
J2:=SCAN(0,H2#-I2#,LAMBDA(x,y,x+y))
スピルで表示させるならこれだけです。いっそ数式をひとつにまとめたっていいです。
もっというなら、ピボットテーブルで月単位にグループ化して収支をそれぞれ集計して、「フィールド/アイテム/セット」で「= 入金 - 出金」の集計フィールド(累計)を追加してやれば、数式を使わなくても残高は集計できます。
現金残高は、自分が現金を締めたタイミングにチェックできるようにしておけばいいです。残高列なんていりません。