Option Explicit '----------------------------------------------- '退職所得控除 Function taisyoku_syotoku_kozyo(kinzoku_nen As Integer, Syogai_s As Boolean) As Long Dim c As Long On Error GoTo Err_taisyoku_syotoku_kozyo c = Application.Max(kinzoku_nen, 2) * 400000 + Application.Max((kinzoku_nen - 20), 0) * 300000 If Syogai_s = False Then '障害でないなら c = c ElseIf Syogai_s = True Then '障害なら100万円追加 c = c + 1000000 Else c = 0 MsgBox "退職所得控除を0として計算します", vbOKOnly & vbCritical End If taisyoku_syotoku_kozyo = Application.Max(c, 0) Exit Function Err_taisyoku_syotoku_kozyo: MsgBox Err.Description, vbOKOnly & vbCritical End Function '----------------------------------------------- '退職所得税額 Function taisyoku_syotoku_zei(taisyoku_kin, kozyo) On Error GoTo Err_handler Dim c, d As Long '課税退職所得金額 c = Application.ROUNDDOWN((taisyoku_kin - kozyo) / 2, -3) '税額の計算 If c <= 3300000 Then d = c * 0.1 ElseIf c <= 9000000 Then d = c * 0.2 - 330000 ElseIf c <= 18000000 Then d = c * 0.3 - 1230000 'ElseIf c <= 30000000 Then ' d = c * 0.4 - 3030000 ElseIf 18000000 < c Then d = c * 0.37 - 2490000 Else d = 0 End If taisyoku_syotoku_zei = Application.Max(d, 0) Exit Function Err_handler: MsgBox Err.Description, vbOKOnly & vbCritical End Function '----------------------------------------------- '退職所得にかかる道府県民税 Function kenmin_zei(taisyoku_kin) '引数は、退職所得控除後の金額(退職金−退職所得控除) On Error GoTo Err_handler Dim c, d As Long '基準額の算定 If taisyoku_kin < 8000 Then c = 0 ElseIf taisyoku_kin < 252000 Then d = (taisyoku_kin - 8000) Mod 4000 c = taisyoku_kin - d ElseIf taisyoku_kin < 780000 Then d = (taisyoku_kin - 252000) Mod 8000 c = taisyoku_kin - d ElseIf taisyoku_kin < 1560000 Then d = (taisyoku_kin - 780000) Mod 12000 c = taisyoku_kin - d ElseIf taisyoku_kin < 2600000 Then d = (taisyoku_kin - 156000) Mod 16000 c = taisyoku_kin - d ElseIf taisyoku_kin < 8000000 Then d = (taisyoku_kin - 2600000) Mod 20000 c = taisyoku_kin - d ElseIf 8000000 <= taisyoku_kin Then c = Application.ROUNDDOWN(taisyoku_kin / 2000, 0) * 2000 End If Dim e '道府県民税の計算 If 8000 <= c And c <= 4000000 Then e = Application.ROUNDDOWN((c * 0.01) * 0.9, -2) ElseIf c <= 13998000 Then e = Application.ROUNDDOWN((c * 0.01) * 0.9, -2) ElseIf 14000000 <= c Then e = Application.ROUNDDOWN((c * 0.015 - 70000) * 0.9, -2) Else e = 0 End If kenmin_zei = Application.Max(e, 0) Exit Function 'エラー処理 Err_handler: MsgBox Err.Description, vbOKOnly & vbCritical End Function '----------------------------------------------- '退職所得にかかる市町村民税 Function simin_zei(taisyoku_kin As Long) '引数は、退職所得控除後の金額(退職金−退職所得控除) On Error GoTo Err_handler Dim c, d As Long '基準額の算定 If taisyoku_kin < 8000 Then c = 0 ElseIf taisyoku_kin < 252000 Then d = (taisyoku_kin - 8000) Mod 4000 c = taisyoku_kin - d ElseIf taisyoku_kin < 780000 Then d = (taisyoku_kin - 252000) Mod 8000 c = taisyoku_kin - d ElseIf taisyoku_kin < 1560000 Then d = (taisyoku_kin - 780000) Mod 12000 c = taisyoku_kin - d ElseIf taisyoku_kin < 2600000 Then d = (taisyoku_kin - 156000) Mod 16000 c = taisyoku_kin - d ElseIf taisyoku_kin < 8000000 Then d = (taisyoku_kin - 2600000) Mod 20000 c = taisyoku_kin - d ElseIf 8000000 <= taisyoku_kin Then c = Application.ROUNDDOWN(taisyoku_kin / 2000, 0) * 2000 End If Dim e '市町村民税の計算 If 8000 <= c And c <= 4000000 Then e = Application.ROUNDDOWN((c * 0.015) * 0.9, -2) ElseIf c <= 13998000 Then e = Application.ROUNDDOWN((c * 0.04 - 100000) * 0.9, -2) ElseIf 14000000 <= c Then e = Application.ROUNDDOWN((c * 0.05 - 240000) * 0.9, -2) Else e = 0 End If simin_zei = Application.Max(e, 0) Exit Function 'エラー処理 Err_handler: MsgBox Err.Description, vbOKOnly & vbCritical End Function