メールマガジン【アクセスで作るシリーズ】


バックナンバー 【会計ソフト編】 Vol.39
■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□

    ACCESSで作るシリーズ  【会計ソフト編】

    発 行 : Yoshihisa Fukuda          2001. 1.13 Vol.39

■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□
--------------------------------------


== ◇ 第4章 年度更新     ====================

今回は年度更新の集計サブルーチンをモジュールで作成します。

--------------------------------------
4-1 年度更新
--------------------------------------
--------------------------------------
4-1-2 モジュール作成
--------------------------------------
勘定科目の残高集計サブルーチンを作成します。

【モジュール作成手順】
1.[モジュール]タブで[新規作成]ボタンを押すとモジュールウィンドウが開きます。
2.最初に
  Option Compare Database
  Option Explicit
  と既に2行表示されているので、その下にカーソルを移動して
  Function KamokuZanCalc() と入力しエンターキーを押下します。
3.すると1行空いて End Function と表示されます。
  この中に勘定科目集計のプログラムを記述しましょう。
4.以下のコードを Function KamokuZanCalc() と End Function の間に記述
  します。

  Dim ACC_DB As Database
  Dim Kamo_T As Recordset
  Dim KariTotal As Currency
  Dim KasiTotal As Currency
  Dim FindDate As String
  Dim FindStr As String
  Dim JigyoKasiKamoID As Long
  Dim JigyoKariKamoID As Long

  FindDate = "DenpyoDate >= #" & DLookup("AccountStart", "BaseTable") & _
   "# AND DenpyoDate <= #" & DLookup("AccountEnd", "BaseTable") & "# AND "
  JigyoKasiKamoID = DLookup("JigKasiKamoID", "EnvironTable")
  JigyoKariKamoID = DLookup("JigKariKamoID", "EnvironTable")
  
  Set ACC_DB = CurrentDb
  Set Kamo_T = ACC_DB.OpenRecordset("KamokuTable", dbOpenDynaset)

  Kamo_T.MoveFirst
  
  While Kamo_T.EOF = False
    If Kamo_T.Fields("KamokuKind") < 4 And _
  Kamo_T.Fields("KamokuID") <> JigyoKasiKamoID And _
      Kamo_T.Fields("KamokuID") <> JigyoKariKamoID Then
      Kamo_T.Edit
      FindStr = FindDate & "KasiKamoID <> 1 AND KariKamoID = " & _
   Kamo_T.Fields("KamokuID")
      KariTotal = Nz(DSum("KariAmount", "SiwakeTable", FindStr), 0)
      FindStr = FindDate & "KariKamoID <> 1 AND KasiKamoID = " & _
   Kamo_T.Fields("KamokuID")
      KasiTotal = Nz(DSum("KasiAmount", "SiwakeTable", FindStr), 0)
  
      If Kamo_T.Fields("KamokuKind").Value = 2 Then
        Kamo_T.Fields("ZanDaka").Value = _
         Nz(Kamo_T.Fields("ZanDaka").Value) - KariTotal + KasiTotal
      Else
        Kamo_T.Fields("ZanDaka").Value = _
         Nz(Kamo_T.Fields("ZanDaka").Value) + KariTotal - KasiTotal
      End If
      Kamo_T.Update
    End If
    Kamo_T.MoveNext
  Wend
  
  Kamo_T.Close
  ACC_DB.Close

5.モジュールを[CommonSub]という名前で保存します。

【解説】

1.まず、最初から8行は変数の宣言です。
2.10行目、11行目は仕訳データ抽出条件の日付範囲の条件式(SQL)です。
3.12行目、13行目は勘定科目の事業主貸科目と事業主借科目(環境設定で
  設定される項目)の科目IDを求めています。
  これは、この2つ(事業主貸科目と事業主借科目)は残高集計をしない科目
  なので、集計する科目の条件から外すためです。
4.15行目はデータベースのオープン、16行目は勘定科目テーブルのオープン
  を行っています。
5.18行目は勘定科目テーブルのレコードセットをMoveFirstメソッドを用いて
  カレントレコードを先頭に移動しています。
6.20行目から42行目のWhile文の中は勘定科目テーブルを先頭から1レコード
  づつ最終レコードまで処理するループです。
7.21、22、23行目の If文は科目種別が3以下(資産・負債・資本)で
  事業主貸科目と事業主借科目以外の科目のみ集計するためのIf文です。
8.24行目は勘定科目テーブルのデータをEditメソッドを用いて更新(残高を更新)
  できるようにしています。
9.25、26行目で借方金額を集計するための仕訳データの抽出条件を指定して
  います。
10.27行目で借方金額を集計しています。
11.28、29行目で貸方金額を集計するための仕訳データの抽出条件を指定して
  います。
12.30行目で貸方金額を集計しています。
13.33、34行目で負債に関する残高計算を、36、37行目で資産・資本に
  関する残高計算を行っています。
14.39行目で勘定科目テーブルにデータを更新しています。
15.41行目で勘定科目テーブルのカレントレコードをMoveNextメソッドを用いて
  次のレコードへ移動しています。
16.44行目で勘定科目テーブルをクローズ、45行目でデータベースをクローズ
  しています。

以上で、勘定科目の残高集計サブルーチンは完成です。
次回は補助科目の残高集計サブルーチンを作成します。
______________________________________
◆◇ ワンポイントコーナー ◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇

 【モジュール】

 今回、初めてモジュールを作成しました。
 モジュールは、複数の箇所で共通で使用できるサブルーチンなどがある場合、使用
 します。

 フォームのイベントプロシージャのモジュールでは、Functionの前にPrivateが
 付いたと思います。

 以前にも少し触れましたが、Privateが付くとそのモジュール内だけでしか使用
 出来ません。

 今回の様な共通サブルーチンの場合、色々なモジュール(フォーム)から呼び出さ
 れるのでFunction の前に Privateは付きません。

 これで、どのフォームからでも使用できるサブルーチンができます。
 勘定科目の残高集計は、残高試算表や決算書など、あらゆる所で使用できます。
 インターフェースさえ上手に設計すれば、全てこのモジュールの勘定科目残高集計
 サブルーチン1つで出来る訳です。

 このサブルーチンの作り方で、ソフトを作成する効率が大幅に変わってきます。

______________________________________
◆◇ Q&Aコーナー    ◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇

 今回はありません。
______________________________________
■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□

◇ ACCESSで作るシリーズ 【会計ソフト編】
◇ 発 行 元  :Yoshihisa Fukuda(福田 義久)
◇ ご意見・ご要望
  ご質問等   :y.fukuda@ro.bekkoame.ne.jp

◇ このメールマガジンは、インターネットの本屋さん『まぐまぐ』を利用して発行
  しています。(まぐまぐID:0000030446)
◇ バックナンバー:http://www.bekkoame.ne.jp/ro/y.fukuda/
◇ 登録・解除  :http://www.bekkoame.ne.jp/ro/y.fukuda/

 Copyright(C) 2000-2001 Yoshihisa Fukuda All rights reserved.

◇転載について
 このメールマガジンの無断転載などは、一切禁止です。
 転載をご希望の方は、事前にメールで連絡をください。
◇免責
 このメールマガジン及びホームページの内容による、いかなる損害、障害などに
 関して発行者は一切の責任を負いません。
 掲載広告についても同様です。
______________________________________
■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□