Option Explicit '源泉所得税クラス 'プロパティはメンバー以外アクセスできない 'プロパティの実体 Private mdblZei As Double '源泉所得税 Private mdblKyuyoKoujo As Double '給与所得控除後の金額 Private mdblFuyouKoujo As Double '扶養控除 Public Property Get Zei() As Double Zei = mdblZei End Property Public Property Let Zei(ByVal dblZei As Double) mdnlzei = dblZei End Property Public Sub CalculateZei(ByVal lngKazei As Long, ByVal intNinzu As Integer) '引数[lngKazei]:社会保険控除後の課税所得 '引数[intNinzu]:扶養親族数 Call KyuyoKoujo(lngKazei) Call FuyouKoujo(intNinzu) Call GensenZei(lngKazei, CLng(mdblKyuyoKoujo), CLng(mdblFuyouKoujo)) End Sub '---------- 給与の源泉所得税計算の一連作業 ---------- '給与所得控除額の計算 Private Sub KyuyoKoujo(ByVal lngKyuyo As Long) '引数[ingKingaku]:社会保険料控除後の給与額 Const dblKiriage As Double = 0.9 '切り上げ定数 Select Case lngKyuyo Case Is <= 135416 mdblKyuyoKoujo = CDbl(54167) Case lngKyuyo = 135417 To 149999 mdblKyuyoKoujo = Int(CDbl(lngKyuyo * 0.4 + dblKiriage)) Case lngKyuyo = 150000 To 299999 mdblKyuyoKoujo = Int(CDbl((lngKyuyo * 0.3) + 15000 + dblKiriage)) Case lngKyuyo = 300000 To 549999 mdblKyuyoKoujo = Int(CDbl((lngKyuyo * 0.2) + 45000 + dblKiriage)) Case lngKyuyo = 550000 To 833333 mdblKyuyoKoujo = Int(CDbl((lngKyuyo * 0.1) + 100000 + dblKiriage)) Case Is >= 833333 mdblKyuyoKoujo = (lngKyuyo * 0.05) + 141667 Case Else mdblKyuyoKoujo = CDbl(0) End Select End Sub '基礎控除等の計算 Private Sub FuyouKoujo(ByVal lngNinzu As Integer) '引数[intNinzu]:扶養家族の人数 Const lngKiso As Long = 1 '基礎控除 Const lngGaku As Long = 31667 '基礎控除額 mdblFuyouKoujo = CDbl(lngGaku * (lngKiso + lngNinzu)) End Sub '源泉所得税額の計算 Private Sub GensenZei(ByVal lngKazei As Long, ByVal lngKoujo1 As Long, ByVal lngKoujo2 As Long) '引数[lngKazei]:課税所得 '引数[lngKoujo1]:給与所得控除 '引数[lngKoujo2]:扶養控除 Dim lngHyoujun As Long '課税標準 Const intKeta As Integer = 10 '四捨五入桁数 Const dblRound As Double = 0.5 '四捨五入定数 lngHyoujun = lngKazei - (lngKoujo1 + lngKoujo2) Select Case lngHyoujun Case lngHyoujun = 0 To 275000 mdblZei = Int(CDbl((lngHyoujun * 0.08) / intKeta + dblRound)) * intKeta Case lngHyoujun = 275001 To 658334 mdblZei = Int(CDbl((lngHyoujun * 0.16 - 22000) / intKeta + dblRound)) * intKeta Case lngHyoujun = 658335 To 750000 mdblZei = Int(CDbl((lngHyoujun * 0.2 - 48334) / intKeta + dblRound)) * intKeta Case lngHyoujun = 750001 To 1500000 mdblZei = Int(CDbl((lngHyoujun * 0.3 - 123334) / intKeta + dblRound)) * intKeta Case Is >= 1500001 mdblZei = Int(CDbl((lngHyoujun * 0.37 - 228334) / intKeta + dblRound)) * intKeta Case Else mdblZei = CDbl(0) End Select End Sub