Accessで残高計算④~DSUM関数を使わない方法3

Pocket

連番で日付順取引順で番号を付したら、あとは一つ前の番号の残高を取得する
だけです。

一つ前の残高を求める数式です。
前行残高: IIf([ID]=1,0,DLookUp(“残高”,”連番集計”,”連番=” & DMax(“連番”,”連番集計”,”連番<” & [連番] & “”)))

まず始めにIDが1→前行が存在しないときは前行の残高を0にします。
基本的には一行の目のレコードは繰越残高になるので、一行目の借方金額に繰越残高を
入れます。

IDが1でないときは一つ前に残高が存在するので、それを参照します。
IDの順番で残高を参照すると日付が前後した場合に対応できないので
前回の内容のように日付順取引順で番号を付す必要があります。

では一つ前の連番の求め方はどうするのかというと、
DMax(“連番”,”連番集計”,”連番<” & [連番] & “”)
で求めます。
2801082
DMax関数で最大値を求めます。何の最大値かというと、その連番に満たない連番の
最大値です。

2行目の場合は、31に満たない最大値は11

6行目の場合は、61に満たない最大値は51
となります。
その連番に満たない最大値の連番の残高をDLOOKUP関数で参照します。

こんな仕組みで前行の残高を求めます。
求めた前行の残高に借方金額と貸方金額の加減算をしてその行の残高
を求めます。

Accessの場合はExcelのようにデータの順番を上下入れ替えることができません。
登録した順番でデータは保存されていきます。確実に順番を間違えることなく
入力できるのであれば、ここまでする必要はありませんが、現実的ではありません。

順番通りに並べ替えるためには自分でそうなるような仕組みを作るしかありません。
それが今回の例のNOとNO2を求めて、二つを一つにまとめた連番というフィールドが
必要となる理由です。

==================================
今日久しぶりに体重計にのったら体脂肪率が9.9%でした。
この時期にしてはかなり低い。正月のトレーニングの効果が出たのか、
正月の暴飲暴食をものともせず、いい状態を維持できています。

本日も最後までお読み頂きありがとうございます。