いきさつ
2015-12-03の山口ばあばさんの日記「ips-77 Excel演習問題集(Lesson81)家計簿4月分を作ってみたが?」
家計簿4月分をコピーして作ってみました。
5月1日が入っていますがどこが違うのでしょうか? 2月分は28日まで表示、後は空白になっています。
先日のiPS-77で、私が行った Lesson81改 の不具合報告だぁ〜〜〜
- 標準回答では...
- [1月]シートで、
1月29日の日付セル(A34)は “=A33+1”。
1月30日は“=A34+1”。
1月31日は“=A35+1” - [1月]シートをコピーして作った[2月]シートは、行34〜36は削除する‥‥ というもの。 この方法では、(1)[2月]シート(小の月)から[3月]シート(大の月)は作れない(行挿入等の補完が必要)。(2)「合計」行が毎月変わるため、前月残高(セルK2)を正しく修正出来るか‥‥ の問題がある。
- [1月]シートで、
- これらの問題を改善した計算式
- [1月]シートで、
1月29日の日付セル(A34)は “=IF(MONTH($A$33)+1)=MONTH($A$1),A33+1,"")”。
30日,31日はフィルハンドルでコピー。 - [1月]シートから[4月]シートを作ると、4月30日の次に5月1日が出る‥‥ という指摘。
原因は、MONTH($A$33)+1)は 4 となり条件式は「真」となる。このため A35+1,すなわち 5月1日が表示されたもの。
- [1月]シートで、
日付バグ対応
原因は “=IF(MONTH($A$33)+1)=MONTH($A$1),A33+1,"")” の $A$33 を絶対番地にしたため。
- 案1:相対番地にする ‥‥ 失敗
“=IF(MONTH(A33+1)=MONTH($A$1),A33+1,"")”- 4月分はうまく作れるが、2月分は #Value! のエラーになる。
- 原因は、セルA34が "" になるため、セルA35の “=IF(MONTH(A34+1)=MONTH($A$1),A34+1,"")” の赤字の計算(""+1)でエラーになる。
- 案2:N関数を使い、""(文字)を数値(ゼロ)に変換する。
“=IF(MONTH(N(A33)+1)=MONTH($A$1),A33+1,"")”- セルA33が "" であれば、Month(N("")+1) は 1(1月)となる。
しかし、1月は日付が必ず入るので、実用上、不具合は出ない‥‥ はず。
- セルA33が "" であれば、Month(N("")+1) は 1(1月)となる。
前月残高(セルK2)
合計の行を固定したので、前月残高も新しいシートを作る度に修正しなくてもいいよう INDIRECT関数を使う。
- 前提条件
- シート名(シート見出し)は、半角数字の “1月”〜“12月” とする。(スペースはどこにも入れない)
- セルK37(合計行の残高)=翌月繰越額を計算(“=C37-J37”)しておく。
- 前月残高(セルK2)の計算式
“=IF(MONTH(A1)=1,0,INDIRECT(MONTH(A1)-1&"月!K37"))”- セルA1が 1月であれば 0 とする。
- 1月以外であれば、セルA1の「月-1」の月のシート名のセルK37の値とする。
上記織り込み済みの Excelワークシートは、下記よりダウンロードできます。
- 「麻里府発」の[まりふのひとの「公開」OneDrive]に入り
- 「Excel2007演習問題集」フォルダにある「Lesson81_改2」をダウンロード