VBA 2000年之后活期存款利息计算

简介: VBA 2000年之后活期存款利息计算

本例为工作中特殊需要,非银行给付利息方式:

Private Function CDI_Rate1000(ByVal Year As Integer) As Long
'{1,2,7,8,11,12},{99,72,81,36,50,35}
Dim Rate As Single
Select Case (Year - 2000)
    Case Is < 0:
        Rate = 0
    Case 0 To 1:
        Rate = 0.99
    Case 2 To 6:
        Rate = 0.72
    Case 7:
        Rate = 0.81
    Case 8 To 10:
        Rate = 0.36
    Case 11:
        Rate = 0.5
    Case Is >= 12
        Rate = 0.35
End Select
CDI_Rate1000 = Rate * 1000
End Function
Private Function TDI_Rate1000(ByVal Year As Integer) As Long
'{1,3,5,7,8,9,10,11,12,13,15,16}
'{2.25,1.98,2.25,2.52,4.14,2.52,2.25,2.5,3.5,3,2.75,1.5}
Dim Rate As Single
Select Case (Year - 2000)
    Case Is < 0:
        Rate = 0
    Case 0 To 2:
        Rate = 2.25
    Case 3 To 4:
        Rate = 1.98
    Case 5 To 6:
        Rate = 2.25
    Case 7:
        Rate = 2.52
    Case 8:
        Rate = 4.14
    Case 9:
        Rate = 2.52
    Case 10:
        Rate = 2.25
    Case 11:
        Rate = 2.5
    Case 12:
        Rate = 3.5
    Case 13 To 14:
        Rate = 3.2
    Case 15:
        Rate = 2.75
    Case Is >= 16
        Rate = 1.5
End Select
TDI_Rate1000 = Rate * 1000
End Function
Private Function DaysR(ByVal ymd As Date) As Integer '某一天到该年底的天数(含此日)
    DaysR = DateSerial(Year(ymd), 12, 31) - ymd + 1
End Function
Private Function DaysL(ByVal ymd As Date) As Integer '一年中某日之前的天数(不含此日)
    DaysL = ymd - DateSerial(Year(ymd), 1, 1)
End Function
Private Function Leap(ByVal Y As Integer) As Boolean
    Leap = (Y Mod 4 = 0 And Y Mod 100 <> 0) Or (Y Mod 400 = 0)
End Function
Private Function VtoD(ByVal vDate As Variant) As Variant
Dim Y, M, D As Integer
VtoD = True
Select Case VarType(vDate)
    Case 0 To 2, Is = 6, Is > 8
        VtoD = False
    Case 3 To 5
        VtoD = VtoD(CStr(vDate))
    Case 7:
        VtoD = Format(vDate, "yyyy-mm-dd")
        If VtoD < "2000-01-01" Then VtoD = False
    Case 8:
        If Len(vDate) <> 8 Then
            VtoD = False
            Exit Function
        End If
        For i = 1 To 8
            If Asc(Mid(vDate, i, 1)) < 48 Or Asc(Mid(vDate, i, 1)) > 57 Then
                VtoD = False
                Exit Function
            End If
        Next
        Y = --Left(vDate, 4): M = --Mid(vDate, 5, 2): D = --Right(vDate, 2)
        If Y < 2000 Then VtoD = False
        If M > 12 Or M = 0 Then VtoD = False
        If D > 31 Or D = 0 Then VtoD = False
        If M = 2 And D > (28 + IIf(Leap(Y), 1, 0)) Then VtoD = False
        If VtoD = False Then Exit Function
        VtoD = Format(DateSerial(Y, M, D), "yyyy-mm-dd")
End Select
End Function
Private Function CDInterest(ByVal Amounts As Double, ByVal vDate As Variant, Optional R As Boolean = False) As Double
Dim dRate As Double
vDate = VtoD(vDate)
CDInterest = 0
If vDate = False Then
    MsgBox "日期格式错!"
    Exit Function
End If
If R Then
    CDInterest = Round(Amounts, 2) * CDI_Rate1000(Year(vDate)) / 1000 / 100 / 365 * DaysR(vDate)
Else
    CDInterest = Round(Amounts, 2) * CDI_Rate1000(Year(vDate)) / 1000 / 100 / 365 * DaysL(vDate)
End If
End Function
目录
相关文章
|
1月前
|
Java Android开发
Java实现月工资个人所得税及各保险计算问题
Java实现月工资个人所得税及各保险计算问题
49 0
|
7月前
|
Python
python 股票数据分析、绘制K线图、价格走势图、收益率计算 完整代码+数据 可直接运行
python 股票数据分析、绘制K线图、价格走势图、收益率计算 完整代码+数据 可直接运行
113 0
python 股票数据分析、绘制K线图、价格走势图、收益率计算 完整代码+数据 可直接运行
|
12月前
|
机器学习/深度学习 Python
Python编程实现计算存款利息
Python编程实现计算存款利息
314 0
用autoIt写一个计算税收的程序
用autoIt写一个计算税收的程序
70 0
用autoIt写一个计算税收的程序
|
JavaScript
蓝桥模拟赛刷题之计算个人所得税
蓝桥第一次线上模拟赛的第三题,要让我们实现一个个人所得税计算功能,原生实现
102 1
|
Python
Python数学计算工具1、海伦公式计算三角形面积
Python数学计算工具1、海伦公式计算三角形面积
520 0
Python数学计算工具1、海伦公式计算三角形面积
|
编译器 C语言
第二周:计算
C语言第第二周内容,计算,是开启编程世界的第一步
136 0
程序人生 - 公积金贷款额度是怎么计算的?
程序人生 - 公积金贷款额度是怎么计算的?
74 0
|
Java
Java初学者作业——分析计费规则后,编写程序输入乘坐出租车的时间和里程数,计算里程价格
Java初学者作业——分析计费规则后,编写程序输入乘坐出租车的时间和里程数,计算里程价格
609 0
Java初学者作业——分析计费规则后,编写程序输入乘坐出租车的时间和里程数,计算里程价格