Access実践入門 TOPへ
 ■ マイクロソフトアクセス、日報集計 設定情報
設定情報の内容

プログラムの基本的な部分をデータとして登録しておいて、
プログラムを動かす中で、常にこの情報を参照します

今回は、集計する項目がどんなものか登録します
使い方によって、フォームやレポートの表題が変わります

もう1つ、消費税が変更になることを予想して、日付により、
消費税率を取得する方法を使います


設定情報の登録



データは、「ta設定情報」というテーブルに作成しておきます
番号は、1番でレコード数が1つだけのテーブルです

クエリ、「qu設定情報編集」で常に表示されます


集計項目の名称を登録しておきます
ここでは、「イベント」と登録しています
サンプルプログラムでは、イベント毎に集計しています

使い方により、ここが、得意先になったり、工事現場になったりします

フォームやレポートの表題は、ここを常に参照して、表示します


消費税を3つまで登録できます

たとえば、2012年4月から消費税が8%に、
2013年4月から、10%になる場合

1行目に、2012年03月31日で、5%
2行目は、2013年03月31日で、8%
3行目は、4000年12月31日で、10%

のような設定をしておくと、日付を見て、消費税を計算します


商品毎に、消費税が違う場合などは、これでは対応できません
商品毎に税率を登録できるようにする必要があります


設定情報の使用(集計項目名)

集計項目名の実際の使用場面は、次のようになります

メインメニュー他のフォームやレポートで使っています

メインメニューの「開く時」に、次のように書いています

Me![集計項目登録].Caption = DLookup("[集計項目名]", "ta設定情報", "[番号]=1") & "登録"

表題(Caption)に、テーブルのデータを貼り付けています
DLookup関数で、テーブルのデータを見つけてきます


設定情報の使用(消費税率)

消費税率の実際の使用場面は、次のようになります

売上日報の入力、「fo売上入力」内で、計算しています

----------------------------------
Public Sub zeikeisan()

Dim dbs As Database
Dim rst_1 As Recordset

szei = 0

If IsNull(Me![売上日付]) Then
szei = 0
Exit Sub
End If

Set dbs = CurrentDb
Set rst_1 = dbs.OpenRecordset("ta設定情報", dbOpenDynaset)
rst_1.MoveFirst

If DateValue(rst_1!税率01日付) >= Me![売上日付] Then
' szei = rst_1!税率01 / 100
szei = Fix((rst_1!税率01 + 0.0005) * 10) / 1000
GoTo ZEND:
End If

If DateValue(rst_1!税率02日付) >= Me![売上日付] Then
szei = Fix((rst_1!税率02 + 0.0005) * 10) / 1000
GoTo ZEND:
End If

If DateValue(rst_1!税率03日付) >= Me![売上日付] Then
szei = Fix((rst_1!税率03 + 0.0005) * 10) / 1000
GoTo ZEND:
End If

ZEND:

rst_1.Close


'税率に0.0005をプラスして計算していますが、
'単精度浮動小数点型、倍精度浮動小数点型の場合の浮動小数点型は、
'パシコンの中では、数値を「2進数」で管理しているため、10進数で表記すると誤差が出ます
'たとえば、7.7%で登録してあった場合、そのデータはパソコンの中では、7.6999999999・・・
'のようなものになっています
'レム文にしている szei = rst_1!税率01 / 100 で計算すると
'10万円だと、消費税を7699円と計算します
'なので、Fix関数で、使用する小数点より下1000分の5くらいの数字をプラスして計算しておくことが必要です
'ここでは、消費税率ですから、小数点以下は無いかもしれませんが、
'小数点がある計算をする時は、注意が必要です


End Sub
----------------------------------
日付を見て、消費税が何%になるか見つけて、計算しています

下の方のレム文に書いています通り
浮動小数点の計算では、パソコンが端数を持っていますので、
注意が必要です

サンプルを使って、端数の計算を試してみてください