質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Access

Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

Q&A

解決済

2回答

6317閲覧

【ACCESS】明細の金額でチェックボックスの有無により税処理を分岐したい。

tera_taro

総合スコア46

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Access

Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

0グッド

0クリップ

投稿2018/05/24 05:18

編集2018/05/24 05:52

前提・実現したいこと

経費の計算で、消費税を抜いた金額で入力していく画面があります。
イメージ説明
データシートの部分はサブフォーム
小計などのラベルがある部分はメインフォーム

サブフォームにて、
税抜金額(txt_sum1)、消費税(txt_sum2)、総額(txt_sum3)、非課税金額(txt_sum4)
の項目にそれぞれ条件に応じて値を入れたい。

メインフォームにて、txt_sum〇の箇所を変え、小計、消費税、総計、非課税
それぞれ以下のコントロールソースにより出力している。

=IIf(Not IsError([sub_trntbl_meisai]![txt_sum1]),[sub_trntbl_meisai]![txt_sum1],Null)

コントロールソースにコードを記載するやり方、コードビルダーで処理を記載するやり方、どちらでも良いので良い方法をご教授願います。

該当のテーブル

イメージ説明

イメージ説明

該当のサブフォーム

イメージ説明
税抜金額
名前 txt_sum1 コントロールソース =Sum([KINGAKU])
消費税額
名前 txt_sum2 コントロールソース =Sum([KINGAKU]*0.08)
総額
名前 txt_sum3 コントロールソース 非連結
非課税金額
名前 txt_sum4 コントロールソース =Sum([KINGAKU])

非課税選択チェックボックスのコントロールソース
CHK_ZEI
金額のコントロールソース=CLng(Nz([txt_TANKA],0))*CLng(Nz([txt_SURYO],0))

イメージ説明

試したこと

VBA

1'集計条件分岐処理 2 3 '非課税選択時処理 4 If txt_CHK_ZEI = False Then 'チェックボックスが☑でない時 5 '税抜金額 6 txt_sum1 = Sum([KINGAKU]) 7 '消費税額 8 txt_sum2 = Sum([KINGAKU] * 0.08) 9 Else 10 '非課税額 11 txt_sum4 = Sum([KINGAKU]) 12 End If 13 14 '総額処理 15 txt_sum3 = Sum(txt_sum1 + txt_sum2 + txt_sum4)

上記の処理はやりたいと思っていることです。
非課税選択チェックボックスにチェックが入っているかどうかで
条件を分岐するというのを構想しています。

サブフォームの税抜金額、消費税額、総額、非課税金額のコントロールソースにどう書けばいいか分からないということと、
上記以外のやり方としてやるのであれば、コードビルダーでどう書けばいいか分からないので悩んでいます。

補足情報(FW/ツールのバージョンなど)

Window10、ACCESS2016

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

こういう場合は、VBAは使わないです。

あと、消費税の計算法として、
四捨五入か切り捨てか、を決めてください。
また、消費税を計算するときに、単品ごとに計算するのか、
税抜き価格を合計してから税率をかけて計算するのかも、決める必要があります。
これは、事業者が決めることができます。
消費税の端数処理は税抜きか、四捨五入か、切捨てか、どれが正しい? | 税理士法人田中経営会計事務所

とりあえず、切り捨て、単品毎、として回答します。

クエリの演算フィールドか、フォームのコントロールソースに式を設定します。

クエリに式を設定すれば、レポートを作成するときなどにも共有できるので、私はそちらを使う方が多いです。

クエリに下記のような演算フィールドを作成します。

KINGAKU: Nz([TANKA],0)*Nz([SURYO],0)
ZEIGAKU: IIf([CHK_ZEI],0,Fix(Nz([TANKA],0)CCur(0.08))[SURYO])
HIKAZEI: IIf([CHK_ZEI],[KINGAKU],0)

※ *0.08 を *CCur(0.08) に修正しました。0.08だと浮動小数点数になるので演算誤差が出ますので、CCur で通貨型に変換します。

サブフォームのフォームヘッダーのテキストボックスの設定

税抜金額計
名前 txt_sum1
コントロールソース =Sum([KINGAKU])

消費税額計
名前 txt_sum2
コントロールソース =Sum([ZEIGAKU])

総額
名前 txt_sum3
コントロールソース =[txt_sum1]+[txt_sum2]

非課税金額計(非課税商品の金額計)
名前 txt_sum4
コントロールソース =Sum([HIKAZEI])

メインフォームのテキストボックスのコントロールソース設定

=[sub_trntbl_meisai]![txt_sum1]

=[sub_trntbl_meisai]![txt_sum2]

=[sub_trntbl_meisai]![txt_sum3]

=[sub_trntbl_meisai]![txt_sum4]

フォームの場合は、IsErrorのチェックはいならかったような気がします。レポートの場合はいるかも。

投稿2018/05/24 06:21

編集2018/05/24 07:40
hatena19

総合スコア33715

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tera_taro

2018/05/24 07:14

うまくいきました。ありがとうございます! >四捨五入か切り捨てか、を決めてください。 四捨五入か切り捨てかはまだ決まっていませんでした。 >また、消費税を計算するときに、単品ごとに計算するのか、 単品ごとに計算するようにしています。 >総額 >名前 txt_sum3 >コントロールソース =[txt_sum1]+[txt_sum2] の所は非課税金額も含めるとなれば コントロールソース =[txt_sum1]+[txt_sum2]+[txt_sum4] で変更した所問題なさそうでした。
tera_taro

2018/05/24 07:24

すでに解決したのですがよろしければお願いします。 四捨五入の場合は >ZEIGAKU: IIf([CHK_ZEI],0,Fix(Nz([TANKA],0)*0.08)*[SURYO])の所を ZEIGAKU: IIf([CHK_ZEI],0,Round(Nz([TANKA],0)*0.08)*[SURYO]) という形になるのでしょうか。
hatena19

2018/05/24 07:25 編集

> コントロールソース =[txt_sum1]+[txt_sum2]+[txt_sum4] > で変更した所問題なさそうでした。 いえ、 txt_sum1 は非課税、課税、両方の税抜金額計です。 txt_sum2 は課税対象の消費税額です。(非課税は、消費税額=0) ですので、総額は、=[txt_sum1]+[txt_sum2] です。 txt_sum1 を課税対象のみにするなら、下記の式になります。 =Sum(IIf([CHK_ZEI],0,[KINGAKU]))
tera_taro

2018/05/24 07:33

なるほど! ご指摘助かります。
hatena19

2018/05/24 07:36

> 四捨五入の場合は Round は四捨五入ではなく、銀行型丸めになります。(結果が偶数になるように丸められる。) 四捨五入にするには、0.5を足して切り捨てすることになります。 IIf([CHK_ZEI],0,Fix(Nz([TANKA],0)*CCur(0.08)+CCur(0.5))*[SURYO])
tera_taro

2018/05/25 05:05

>ZEIGAKU: IIf([CHK_ZEI],0,Fix(Nz([TANKA],0)*CCur(0.08))*[SURYO]) のクエリなのですが単価×0.08×数量になっていると思うので、 (単価×数量)×0.08という記述にしないと計算がおかしくなるかとふと気づきました。 ZEIGAKU: IIf([CHK_ZEI],0,Fix(Nz([TANKA],0)*Nz([SURYO],0)*CCur(0.08))) というような形にするのが適正かと思うのですがいかがでしょうか。
hatena19

2018/05/25 05:24

どの段階で消費税の計算をするかは、事業所の判断に任されています。 一般的な小売店ですと、単品ごとに税込み価格表示する場合が多いと思います。 例えば単価280円の商品の税込み価格は、 280*1.08=302.4 切り捨てて、302円と表示します。 3個買った場合、302*3=906 です。 個数を掛けてから計算すると、 (280*3)*1.08=907.2 切り捨てて 907円となり、誤差がでます。 税込み価格を表示しておいて、907円請求したら客はおいおいとなります。 店によっては、税抜き価格を表示しておいて、すべて合計してから、税率を掛ける計算法をとるところもあります。 どの方法をとっても自由ですので、どれでも適正です。 小売店でない場合は、取引先との相談で決めることになります。
tera_taro

2018/05/25 05:30

四捨五入や切り捨ての方法以外にも、 どの段階で税の計算をするかもはっきり決められてはいないのですね。 勉強になりました。
guest

0

サブフォームの税抜金額、消費税額、総額、非課税金額

というのは明細単位での項目ということでよろしいですか?

税抜金額
名前 txt_sum1 コントロールソース =[KINGAKU]
消費税額
名前 txt_sum2 コントロールソース =[KINGAKU]*0.08
総額
名前 txt_sum3 コントロールソース =[KINGAKU]*1.08
非課税金額
名前 txt_sum4 コントロールソース =iif(CHK_ZEI=True,[KINGAKU], 0)

投稿2018/05/24 06:14

sazi

総合スコア25184

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tera_taro

2018/05/24 06:40

サブフォームの税抜金額、消費税額、総額、非課税金額 はメインフォームで出力する時用にしか使わない項目です。 メインフォームで出力された値がテーブルに保存されることになります。 という回答で回答になっているでしょうか? >総額 >名前 txt_sum3 コントロールソース =[KINGAKU]*1.08 は非課税金額も入れた総額とするならば 総額 名前 txt_sum3 コントロールソース =([KINGAKU]*1.08) + iif(CHK_ZEI=True,[KINGAKU], 0) のような形でしょうか。
sazi

2018/05/24 06:46

メインフォームに既に明細の集計項目は有るのではないですか? それともメインフォームでの明細集計が質問内容ですか?
tera_taro

2018/05/24 07:02

>メインフォームに既に明細の集計項目は有るのではないですか? >それともメインフォームでの明細集計が質問内容ですか? なんと答えていいのか分からないのですが、 メインフォームの明細集計の項目はあります。 サブフォームでの明細集計の方法が分かれば、 メインフォームの明細集計の項目のコントロールソースにて、 txt_sum〇の値を取得してきてメインフォームの明細集計に出力でき、解決できると考えているので、サブフォームでの処理が質問内容です。
sazi

2018/05/24 07:13

理解しました。 フォームのフッターやヘッダーではsum()が使えるのでそれを利用します。 既にhatenaさんの回答にありますのでそちらで。 尚、sum()については使用できる数に上限があったはずなので、集計した項目同士の加算で済むような場合はそちらを利用するようにされたほうが良いです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問