ACCESS VBA 消費税計算機能(VBAコード公開)
ACCESSで売上管理をする際に、消費税をどのように管理するかお悩みの方も多いでしょう。
消費税を自動計算させていると、税率が変わった際にクエリの計算式やVBAのコードを書き換える必要が出てきます。
そうなるとメンテナンスが面倒ですよね。
今回は、消費税をフォームの操作だけで切り替えられる、消費税計算機能をご紹介します。
こんにちは。
はこにわガジェット (@hakoniwagadget) です。
ACCESSを使った売上管理、顧客管理などのデータベース開発を行っています。
ACCESSは使いこなすために少しスキルが必要なものの、うまく活用すればExcelよりも業務の効率化が図れます。
この記事ではACCESSで実際に作成したフォームやレポートを、その作成方法と共にご紹介していきます。
ACCESSで作成したフォーム(完成形)
まずは完成形からお見せしましょう。
こちらは売上情報を入力するフォームです。
中央に消費税率の入力欄がありますが、こちらは手動で入力しているわけではなく、売上明細が入力されるとあらかじめ定められた数値が自動入力されるようになっています。
その消費税率を決定するのが下記のフォームです。
消費税率を複数入力できるように作ってあり、「適用中」にチェックがついた消費税率が、売上入力時に適用されます。
こうすることで消費税率が変わったときにもフォームで税率の入力が可能で、VBAのコードの修正は発生しません。
さらに、消費税率を一律設定しているわけではないので、過去の売上の消費税率が変わってしまう、ということもありません。
フォームの作成
では、作成方法を見ていきましょう。
まずは売上伝票入力フォームです。
こちらは、売上伝票入力フォームのデザインビューです。
中央に消費税率のコントロールを設置しています。
このコントロールはフォームのデータソースとなっている売上テーブルに「消費税率」のフィールドを作成し、それを元に作成しています。ただし、手動での入力を防ぐために入力は不可にしています。
プロパティシートで、
データタブ→使用可能:いいえ
データタブ→編集ロック:はい
その他タブ→タブストップ:いいえ
と設定し、ユーザーが手動で値を変更してしまうことを防ぎます。
この状態では新しく売上伝票を作成しても、消費税率が入力されません。
そこで、売上伝票に新しいレコードが追加されたときに消費税率が計算されるようにイベントを設定します。
今回は「顧客ID」の更新後イベントを設定しました。
最初の状態では消費税率が入力されていません。
顧客名を確定させる(顧客IDが更新される)ことで、消費税率が入力されます。
VBAのプログラミング
では、顧客IDの更新後処理イベントにVBAの設定をしましょう。
下記のコードで消費税率の設定をしています。
Private Sub 顧客ID_AfterUpdate()
If Me!消費税率 = 0 Then
Me!消費税率 = DLookup("消費税率", "MST_消費税", "適用中 = true and 削除 = false")
End If
End Sub
比較的簡単なコードです。
消費税率が0だった場合は、DLookup関数で、MST_消費税テーブルの「適用中」にチェックが入ったレコードの消費税率を、フォームの消費税率に転記しています。
DLookup関数について詳しく知りたい方は以下の記事もご覧ください。
なお、
If Me!消費税率 = 0 Then
で、消費税率が0だった場合に限定しているのは、これが顧客IDの更新後処理イベントのためです。
顧客IDを変更した場合に、既に入力された消費税率が変わらないように、上記の設定にしています。
注意点として、DLookup関数は条件に合致するレコードが複数ある場合、最初に見つかったレコードの値を返してしまうため、適用中のチェックは必ず一つにする必要があります。
そのため、消費税率を設定する画面では、注意書きで「適用中」は必ず1つのみチェックしてください、と記載しています。
ただ、当然注意書きだけでは徹底できませんので、VBA側で制御をしています。
この消費税設定フォームを閉じる際のイベントを以下のように設定しています。
Private Sub 閉じる_ボタン_Click()
If DCount("適用中", "MST_消費税", "適用中 = true and 削除 = false") = 1 Then
DoCmd.Close
Else
MsgBox "消費税の指定が不適切です。", vbCritical + vbOKOnly, "消費税指定不適切"
End If
End Sub
MST_消費税の適用中チェックが1つでなければエラーを出して、フォームを閉じられないようにしています。
これにより、適用中チェックが2つある状態だけでなく、一つもチェックがついていない状態も回避しています。
このように、ACCESSデータベースでは様々な前提の上に機能を開発することが多くあります。
今回でいえば消費税計算の機能自体は比較的簡単ですが、それは適用中のチェックが消費税テーブルの中で必ず1つのみ選択されているという前提にたったものです。
このデータ上の前提を維持できるようにエラーを回避する処理を組み込んでおくことで、システム全体の完成度が高まるでしょう。
以上、消費税計算機能の開発事例をご紹介しました。
ACCESSを使いこなせば、業務の効率化や自動化が実現できます。
しかし、自分でACCESSを学ぶには時間がない、難しそうで不安、という方も多いでしょう。
そんな時は、ACCESS開発歴20年以上、過去に100以上のACCESSデータベースを開発してきた私(@hakoniwagadget)にお任せください。
ACCESSの新規開発、既存のACCESSの修正、ACCESSの操作レッスンなど様々なサービスをご提供しています。
ご興味のある方は下記のサービス一覧をご覧ください。
最後までお読みいただき、ありがとうございました。