- ベストアンサー
取引先の消費税の計算方法を四捨五入と切り捨てに区別
- MicrsoftAccess2000「見積請求納品システム」を使用しています。取引先の消費税の計算方法を四捨五入と切り捨てに区別したいです。
- Module1には四捨五入するための式がありますが、切り捨てもできるようにしたいです。
- 請求書コマンドマクロでは消費税額を計算していますが、得意先テーブルに消費税区分を設けて区別したいです。
- みんなの回答 (24)
- 専門家の回答
質問者が選んだベストアンサー
#10です 以下2つの関数を標準モジュールに用意したとします。 Public Function TaxInterPre(iNum As Variant, cVal As Variant) As Currency On Error Resume Next TaxInterPre = 0 If (IsNull(iNum) Or IsNull(cVal)) Then Exit Function Select Case iNum Case 1 TaxInterPre = Int(cVal) Case 2 TaxInterPre = funcSG(cVal) End Select End Function Public Function funcSG(ByVal xCy As Currency) As Currency If xCy > 0 Then xCy = Int(xCy + 0.5) Else xCy = Int(xCy - 0.5) End If funcSG = xCy End Function 使い方は、式のところに、TaxInterPre(消費税区分, 消費税額) を記述します。 TaxInterPre(Null, 1234.56) や TaxInterPre(1, Null) の時には、0 が返ります。 TaxInterPre(1, 1234.56) の場合は、1234 が返ります。 TaxInterPre(2, 1234.56) の場合は、1235 が返ります。 さて、ここからですが、 TaxInterPre(消費税区分, 消費税額) を利用する時に、 何を参照して何を使って利用できるか・・・を考えていきます。 【消費税区分】 ・フォームに参照できるものがあったとき それを参照するようにします。 例えば、フォーム「F_親」に「税区分」名のテキストボックスがあったら、 TaxInterPre([Forms]![F_親]![税区分], 消費税額) ・フォームに参照するものが無く、得意先名しかわからないとき その得意先名の税区分を DLookup 等で求めます。 消費税率の様なテーブル構成ではなく、単に得意先名テーブルに項目を追加しただけであれば、 DLookup("税区分","得意先名テーブル","得意先名='" & [Forms]![F_親]![得意先名] & "'") この DLookup の記述を ※1 とした場合、 TaxInterPre(※1, 消費税額) フォーム上に参照できるものがあれば、・・・・と思います。 【消費税額】 ・参照されるものがあるようですので、それを記述します。 TaxInterPre(消費税区分, [Forms]![請新フォーム]![税抜金額]*0.05) 0.05 即値を使った例ですが。 後は、状況に応じて、何を参照して、何を使って・・・・を考えられればと思います。 関数名は適宜変更してください。
その他の回答 (23)
- piroin654
- ベストアンサー率75% (692/917)
お尋ねしたいこと。 (1) 返品とかの場合はマイナス伝票を 発行されますか。その場合は 現在どのようにされていますか。 (2) 切り上げは考えておられますか。 切り上げが必要な場合があるならば、 切り上げの場合、端数の切り上げ位置は どこでしますか。 例えば小数点第一で行なうか、あるいは 小数点第二で行なうか、など。
補足
piroin654さんありがとうございます!! (1)マイナス伝票は発行しないです! (2)現在は切り上げの取引先は無いので、端数の切り上げ位置をどこでするかなどは未定です・・・ 計算方法などは取引先に決めていただいてるのでどうしたらよろしいでしょうか?
- 30246kiku
- ベストアンサー率73% (370/504)
前のご質問で、どう発展され解決されたのでしょうか。判断できません。 http://oshiete1.goo.ne.jp/qa5792370.html 他のご質問も同様で、判断できません。 そもそも、今回作ろうとしているものの消費税部分は、0.05 の定数(即値)を使うのでしょうか。 今回作ったものを何年使おうとしていますか? その間に消費税は変わらないのですか? 変わったとして、過去履歴を見る際に当時の消費税換算のものを見たい等要求は無視しますか? 消費税が変わるまで・・・でOKとしますか? 変わる可能性のある定数は浮かしておくものと、私は考えます。 以下参考になると思います。(消費税率の例になりますが) ただ、データを整数、実数で持つ、は考え方だと思います 参考QA http://www.accessclub.jp/bbs/0198/beginers61905.html
お礼
アクション 値の代入 アイテム [Forms]![請新フォーム]![消費税額] 式 Int(CCur([Forms]![請新フォーム]![税抜金額]*DLookUp("税率","消費税率","適用日付=#" & DMax("適用日付","消費税率","適用日付<=#" & [Forms]![請新フォーム]![日付] & "#") & "#"))) 上記で消費税率テーブルを作り、それと関係させることには成功しました!! 次は客先によって消費税の計算方法(切捨て、四捨五入)を区別したいです! 30246kikuさんありがとうございました!
補足
30246kikuさんありがとうございます!! http://oshiete1.goo.ne.jp/qa5792370.html 上記の質問後には取引先テーブルの項目に「加算」を追加して進める つもりでしたが、上司と相談した結果、0.5で操作するのは データ管理や引継ぎなど何かと不安なので、やはり四捨五入を しているということが分かりやすいやり方で進めようという話に なっての再度の質問です・・・ 今回作ったものはこれからずっと使う予定です。 消費税も変わると思いますし、まだまだ手直しの必要な システムなので他にも変更箇所が出てくると思います。 変わった際には当時の消費税換算のものを見たいです。 まず参考QAをもとにやってみようと思います!
- debukuro
- ベストアンサー率19% (3634/18947)
消費税の1円未満は切り捨てです四捨五入ではありません
補足
debukuroさんご指摘ありがとうございます! 現在は以下のようになっているので全て切り捨てです・・・ アイテム [Forms]![請新フォーム]![消費税額] 式 Int(CCur([Forms]![請新フォーム]![税抜金額]*0.05)) アイテム [Forms]![請修フォーム]![消費税額] 式 Int(CCur([Forms]![請修フォーム]![税抜金額]*0.05)) こちらを得意先によって切捨てと四捨五入に振り分ける式にしたいです!
お礼
30246kikuさんありがとうございます! 得意先名テーブルに消費税区分フィールドを作りデータ型は数値型(整数型)にしました。 その後以下のようにモジュールを作りました。 Public Function TaxInterPre(DLookup("消費税区分","得意先名テーブル","得意先名='" & [Forms]![請修フォーム]![得意先名] & "'") As Variant, [Forms]![請修フォーム]![税抜金額]*0.05 As Variant) As Currency On Error Resume Next TaxInterPre = 0 If (IsNull(DLookup("消費税区分", "得意先名テーブル", "得意先名='" & [Forms]![請修フォーム]![得意先名] & "'")) Or IsNull([Forms]![請修フォーム]![税抜金額] * 0.05)) Then Exit Function Select Case DLookup("消費税区分", "得意先名テーブル", "得意先名='" & [Forms]![請修フォーム]![得意先名] & "'") Case 1 TaxInterPre = Int([Forms]![請修フォーム]![税抜金額] * 0.05) Case 2 TaxInterPre = funcSG([Forms]![請修フォーム]![税抜金額] * 0.05) End Select End Function Public Function TaxInterPre(DLookup("消費税区分","得意先名テーブル","得意先名='" & [Forms]![請新フォーム]![得意先名] & "'") As Variant, [Forms]![請新フォーム]![税抜金額]*0.05 As Variant) As Currency On Error Resume Next TaxInterPre = 0 If (IsNull(DLookup("消費税区分", "得意先名テーブル", "得意先名='" & [Forms]![請新フォーム]![得意先名] & "'")) Or IsNull([Forms]![請新フォーム]![税抜金額] * 0.05)) Then Exit Function Select Case DLookup("消費税区分", "得意先名テーブル", "得意先名='" & [Forms]![請新フォーム]![得意先名] & "'") Case 1 TaxInterPre = Int([Forms]![請新フォーム]![税抜金額] * 0.05) Case 2 TaxInterPre = funcSG([Forms]![請新フォーム]![税抜金額] * 0.05) End Select End Function Public Function funcSG(ByVal xCy As Currency) As Currency If xCy > 0 Then xCy = Int(xCy + 0.5) Else xCy = Int(xCy - 0.5) End If funcSG = xCy End Function そうすると Public Function TaxInterPre(DLookup("消費税区分","得意先名テーブル","得意先名='" & [Forms]![請修フォーム]![得意先名] & "'") As Variant, [Forms]![請修フォーム]![税抜金額]*0.05 As Variant) As Currency と Public Function TaxInterPre(DLookup("消費税区分","得意先名テーブル","得意先名='" & [Forms]![請新フォーム]![得意先名] & "'") As Variant, [Forms]![請新フォーム]![税抜金額]*0.05 As Variant) As Currency の部分が赤くなり両方とも "消費税区分" の部分が反転し、 コンパイルエラー: 修正候補:) となります。請修・請新フォームに消費税区分テキストボックスを追加できずに上記の方法にしました! 宜しくお願いします!