こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

口座残高の日締めの方法

お願いします。

Access2000で銀行口座管理用DBを作成中です。
テーブルは、(1)入金用(2)出金用(3)銀行登録(4)支払先登録(5)入金元登録の5種類。入金用に入金額、出金用に出金額がそれぞれ入ります。銀行口座の数は3つあります。

入金用・出金用のそれぞれのフォームで毎日取引を入力していきますが、入力がすべて完了したら日締め作業を行い、各口座の残高を算出して実際の銀行残高と照合したいと考えています。

残高を算出するためには、(1)前日残高(2)当日入金計(3)当日出金計が必要ですが、
1)前日残高は変数(毎日更新)
2)入金日計はクエリを使って集計
3)出金日計はクエリを使って集計
といったことになると思いますが具体的なプロシージャについてご指導いただけませんか?

よろしくお願い致します。

投稿日時 - 2003-07-28 09:12:13

QNo.613083

困ってます

このQ&Aは役に立ちましたか?

2人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.2

'関数宣言の部分
Dim db, db1, db2 As Database
Dim rs(10) As Variant
Dim date1 as Date
'例えばダイアログボックスを開いて更新する日付を得る - 詳細は解説書参照
' エラートラップをいろいろ設定する必要があります。またフォームのTEXTBOXに日付を入力する方法もあります。
date1=Inputbox("更新する日付を入力してください")

Set db = CurrentDb
'----入金集計Qというクエリーを読みに行く このクエリーは日付毎の集計である事----
rsname="入金集計Q"
Set rs(1) = db.OpenRecordset(rsname, dbOpenSnapshot)
rs(1).Findfirst "日付"=date1
Money1=rs(1)!金額
'----出金集計Qというクエリーを読みに行く このクエリーは日付毎の集計である事----
rsname="出金集計Q"
Set rs(1) = db.OpenRecordset(rsname, dbOpenSnapshot)
rs(1).Findfirst "日付"=date1
Money2=rs(1)!金額
'----残高記録Qというクエリーを読みに行き新しい日付のレコードを追加して計算する

rsname="残高記録Q"
Set rs(1) = db.OpenRecordset(rsname, dbOpenDynaset)  '<--- Dynaset(書き換え可能)
'ここの作業はいろいろあります。例えば日付が昇順に必ず並んでいるなら
一番最後のデータを読みに行けば良いことですが、考え方としては議論のあるところです。
rs(1).MoveLast
Money3=rs(1)!金額  <----最後のレコードの金額

Money4 = Money3 + Money1 -Money2 <---新しい残高は更新前の残高+date1の入金-date1の出金
rs(1).AddNew <--- 新しいレコードの追加
rs(1)!日付=date1
rs(1)!金額=Money4
rs(1).Update  <--- 更新
備考
これだけのモジュールではエラーチェックなどは不完全です。
例えば2回更新をすると残高がどんどん更新されています。
よってdate1 例2003/6/30 での更新が既に行われたかどうかを
チェックさせる必要があります。
逆に6/29の更新を忘れた場合も一番最後のレコードが6/28であった場合
その残高に6/30のデータを演算させる為6/29のデータが飛ぶ事に
なります。これらのエラーチェックの方法はありますが、まず上記の骨組みについて
理解頂けますか?
レコードセットの読み込みと書き込みに関する部分です。

投稿日時 - 2003-07-28 15:21:57

補足

Laputartさん有難うございます。
入金・出金・残高にそれぞれrecordsetを開き、Money4を計算して残高をupdateしていくわけですね。
これらは毎日のルーチン業務として実施することになりますが、非銀行営業日(例えば土日祝日など)が入った場合にはどう考えればいいのでしょうか?
あと、残高はマスターとして常に更新されていくわけですが、例えばトランザクションテーブルに毎日の残高を蓄積させることは必要ないでしょうか?
お手数おかけ致しますがよろしくご指導ください。

投稿日時 - 2003-07-28 18:46:07

ANo.1

失礼ですがVBAはどの程度理解されていますか。
フォームに更新用ボタンを作成してその作業を全て
プロシージャーで作成する方がいいですか。
それとも出来る部分は更新クエリーの実行とマクロの組み合わせのように視覚的にわかりやすい方がいいですか?

どちらでも可能ですが....

投稿日時 - 2003-07-28 09:43:40

補足

laputartさんこんにちは。
VBAはまだ勉強中ですが記述された内容はわかります。
クエリとマクロの組み合わせもわかりやすいのですが、最終的にはVBでプロシージャに変換、作業としては「更新ボタン」で毎日処理できたらいいなと思います。
よろしくお願いします。

投稿日時 - 2003-07-28 10:06:53

あなたにオススメの質問