出納帳を作る


概要:
    Excelのような表計算と違ってデータベースではリアルタイムに残高計算が出来ません。
    残高計算を効率よくおこなえるようにまとめたサンプルです。


1.テーブル設計

    テーブルを次の通り作成します。

・出納帳

主キー フィールド名 データ型 サイズ インデックス
ID オートナンバー型   重複なし
  整数型   重複あり
  整数型   重複あり
  整数型   重複あり
  摘要 短いテキスト 50  
  入金 通貨型    
  出金 通貨型    
  残金 通貨型    
  備考 短いテキスト 50  


2.クエリー設計

    出納帳テーブルを基にして以下のクエリーを作成します。

・Q_月別出納             【Query種類】:選択

フィールド名 テーブル 抽出条件 並替 表示
 出納帳 [forms]![F_出納帳]![年度] 昇順 ×
  〃 [forms]![F_出納帳]![月度] 昇順 ×
  〃   昇順 ×
ID   〃   昇順 ×
摘要   〃     ×
入金   〃     ×
出金   〃     ×
残金   〃     ×
備考   〃     ×


・Q_残高更新            【Query種類】:更新

 Q_月別出納を更新します。

 フィールド名 テーブル レコード゙の更新
残金 Q_月別出納 ZanDaka([入金],[出金])

 

3.フォーム設計

 まずメインフォームとなる「F_出納帳」を作成します。
 このフォームには以下のオブジェクトを配置します。

・F_出納帳

オブジェクト名   機能・役割
「年度_Up」
「年度_Down」
コマンドボタン 年度をカウントアップ/ダウンさせます。
「月度」 オプショングループ 月度を選択させます。
「印刷」 コマンドボタン レポートを開きます。
「残高更新」 コマンドボタン 残高を更新させます。
「閉じる」 コマンドボタン フォームを閉じます。
「F_出納帳Sub」 サブフォーム 出納帳明細を表示します。
入金計txt テキストボックス サブフォームの「入金計」を参照します。
出金計txt テキストボックス サブフォームの「出金計」を参照します。
残高txt テキストボックス サブフォームの「累残金」を参照します。

そしてフォームのイベントプロシージャを次の様に記述します。

Private Sub Form_Load()
'読み込み時フォームを最大表示します。
 DoCmd.Maximize
End Sub

Private Sub 印刷_Click()
'プレビューモードでレポートを開きます。
 DoCmd.OpenReport "R_出納帳", acViewPreview
End Sub

Private Sub 年度_Down_Click()
'年度をひとつ繰り下げます。
Me![年度] = Me![年度] - 1
'サブフォームを再クエリ-します。
Me!F_出納帳Sub.Requery
End Sub

Private Sub 年度_Up_Click()
'年度をひとつ繰り上げます。
Me![年度] = Me![年度] + 1
'サブフォームを再クエリ-します。
Me!F_出納帳Sub.Requery
End Sub
Private Sub 月度_AfterUpdate()
'サブフォームを再クエリ-します。
Me!F_出納帳Sub.Requery
End Sub

Private Sub 閉じる_Click()
'フォームを閉じます。
DoCmd.Close
End Sub

 

・F_出納帳Sub

レコードソースを「Q_月別出納」として、[フォームウィザード]ですべてのフィールドを選択して、フォームのレイアウトは[データシート]としてフォーム名を「F_出納帳Sub」とします。

 

4.レポート設計

・R_出納帳

レコードソースを「Q_月別出納」に設定して、[グループ化と並べ替え]で並び順を設定します。

 

5.マクロ・モジュール

・残高更新マクロ

内容は次の通りです。

  1. メッセージを非表示にします。
  2. 残高変数を初期化します。
  3. 「残高更新」クエリーを実行します。
  4. メッセージの表示を「はい」にします。
  5. サブフォームを再クエリーします。

・モジュール1

Option Compare Database
Option Explicit
'累計残高をグローバル変数で宣言
Dim RuiZan As Long

Public Function ZanIni()
    '残高変数を初期化します
    RuiZan = 0
End Function

Public Function ZanDaka(A As Long, B As Long) As Long
    '残高変数を引数処理します
    RuiZan = RuiZan + Nz(A) - Nz(B)
    '処理された計算値を渡します
    ZanDaka = RuiZan
End Function

※  DownLoad の「suitou.zip」で動作を確認してみて下さい。


戻る