Microsoft Access 掲示板

消費税アップのための自己関数

5 コメント
views
4 フォロー

質問します。10月1日に消費税がアップしましたが
その自己関数を下記の通り作成しました。一応思う通りの
動きはしますが、なんかダサいようで、もっとかっこの良い
関数式はございませんでしょうか。
ご教示お願いします。勉強したいと思います。

車庫証明申請代行手数料は10月1日より消費税は10%
普通申請
普通車  3240円→3300円
軽自動車 2160円→2200円
自社申請(例えばトヨタがトヨタで使用するため証明申請する場合)
普通車、軽自動車 1080円→1100円
再申請(申請したが不許可になって再度申請した場合)
普通車、軽自動車 1080円→1100円

(再申請はした場合TRUE 市内場合 FALSE)
(自社申請の場合 1 市内場合 0 )

Public Function tesuuryou(申請日, 普軽別, 再申請, 自社)
    tesuuryou = Null
    If IsNull(申請日) Then Exit Function
 
    If 申請日 <= #9/30/2019# And 普軽別 = "普" And 再申請 = False And 自社 = 0 Then
        tesuuryou = 3240
    ElseIf 申請日 <= #9/30/2019# And 普軽別 = "軽" And 再申請 = False And 自社 = 0 Then
        tesuuryou = 2160
    ElseIf 申請日 >= #10/1/2019# And 普軽別 = "普" And 再申請 = False And 自社 = 0 Then
        tesuuryou = 3300
    ElseIf 申請日 >= #10/1/2019# And 普軽別 = "軽" And 再申請 = False And 自社 = 0 Then
        tesuuryou = 2200
 
        '再申請
    ElseIf 申請日 <= #9/30/2019# And 普軽別 = "普" And 再申請 = True And (自社 = 1 Or 自社 = 0) Then
        tesuuryou = 1080
    ElseIf 申請日 >= #10/1/2019# And 普軽別 = "軽" And 再申請 = True And (自社 = 1 Or 自社 = 0) Then
        tesuuryou = 1100
        '自社
    ElseIf 申請日 <= #9/30/2019# And (普軽別 = "普" Or 普軽別 = "軽") And (再申請 = True Or 再申請 = False) And 自社 = 1 Then
        tesuuryou = 1080
    ElseIf 申請日 >= #10/1/2019# And (普軽別 = "普" Or 普軽別 = "軽") And (再申請 = True Or 再申請 = False) And 自社 = 1 Then
        tesuuryou = 1100
  
 
    End If
End Function
tokinaito
作成: 2019/10/02 (水) 10:07:04
最終更新: 2019/10/02 (水) 11:59:26
通報 ...
1
hiroton 2019/10/02 (水) 11:38:25 b74fc@f966d

単純にtesuuryou = 基本料金 * 消費税の形のほうが分かりやすいのでは?
後は、せっかくACCESSを使っているのでデータはテーブルへ
・手数料テーブル(普軽別、再申請、自社、手数料)
・消費税テーブル(開始日、税率)

Function 消費税(起算日 As Date)
    Dim 開始日 As Variant
    開始日 = DMax("開始日", "消費税", "開始日<=#" & 起算日 & "#")
    If IsNull(開始日) Then
        消費税 = 0
    Else
        消費税 = Nz(DLookup("税率", "消費税", "開始日=#" & 開始日 & "#"), 0) / 100
    End If
End Function

車庫証明申請代行手数料 = DLookup("手数料", "手数料", "普軽別='" & 普軽別 & "' And 再申請=" & 再申請 & " And 自社=" & 自社) * (1 + 消費税(申請日))

手数料テーブルの「手数料」は税抜き、消費税テーブルの「税率」は税率部分を整数入力想定です。(消費税10%なら整数で10)

2
tokinaito 2019/10/02 (水) 15:39:32 bb5c2@5f550

hirotonさんさっそくご教示ありがとうございます。
なるほどですね。増税分はばっちり対応するようですね。
じつは9月30日以前の8%分も同じデータとして共存しなければなりません。
その場合は8%分の関数を作ってIIFで分けて使うのでしょうか。
ご教示お願いします。

3
TMG 2019/10/02 (水) 17:15:38 修正 68cd1@2b788

hirotonさんのを参考にしますと、
消費税テーブルに税率の開始日をそれぞれ用意しておくことで対応できると思いますよ。

開始日税率
1989/04/013
1997/04/015
2014/04/018
2019/10/0110

もし申請日が2019年9月30日の場合には、

開始日 = DMax("開始日", "消費税", "開始日<=#" & 起算日 & "#")

により開始日は「2014/04/01」を取得することができ、

消費税 = Nz(DLookup("税率", "消費税", "開始日=#" & 開始日 & "#"), 0) / 100

この部分で消費税8%を取得することができます。

4
朱色 2019/10/02 (水) 20:00:16 修正 db0eb@fd0af

9月に軽で再申請した市内、10月に普通で再申請した市内のパターンが抜けてる気がしまうが...ともかく。
テーブル構造を変えたくないのであれば以下でどうでしょうか。

Public Function tesuuryou(申請日, 普軽別, 再申請, 自社)
    tesuuryou = Null
    If IsNull(申請日) Then Exit Function
 
    If 再申請 = True or 自社 = 1 Then
        tesuuryou = 1000
    ElseIf 普軽別 = "普" Then
        tesuuryou = 3000
    ElseIf 普軽別 = "軽" Then
        tesuuryou = 2000
    End If

    If 申請日 <= #9/30/2019# Then
        tesuuryou = Int(tesuuryou * 1.08)
    ElseIf 申請日 >= #10/1/2019# 
        tesuuryou = Int(tesuuryou * 1.10)
    End If

End Function

※1円誤差とかその辺は全然考えてないです
※Intでいいんでしたっけ・・・

自分はプログラムの中に固定数値入れるな、と教わったので、
ほんというと手数料自体別テーブルに持って引っ張ったほうがいいんじゃないかと思うし、
消費税テーブルも作ったほうが、いいと思ってます。
手数料の変更や消費税がまた変わったなどの場合に、テーブル数値変えれば対応できますので。

5
tokinaito 2019/10/03 (木) 13:38:21 bb5c2@5f550

hirotonさんTMGさん希望するかっこいい式です。
ありがとうございました。
また朱色さん参考にさせていただきます。
ありがとうございました。