VBA常用技巧代码解析
Format函数是VBA中的常用函数,可以实现数值、日期和时间格式的转变,示例代码如下:
#001 Sub FromatCurrent()
#002 MsgBox Format(123456.789, \#003 & Format(123456.789, \#004 & Format(123456.789, \
#005 & Format(-123456.789, \#006 & Format(-123456.789, \¥#,##0.00;(¥#,##0.00)\#007 & Format(Date, \#008 & Format(Date, \#009 & Format(Date, \#010 & Format(Now, \#011 & Format(Now, \#012 End Sub
代码解析:
FromatCurrent过程使用消息框显示格式化后的数值、日期和时间。
Format函数根据格式表达式中的指令来格式化的数值、日期和时间,语法如下:
Format(expression[, format[, firstdayofweek[, firstweekofyear]]])
其中参数expression是必需的,任何有效的表达式。
参数format是可选的,有效的命名表达式或用户自定义格式表达式。 第2行代码将数值格式化为两位小数格式显示。 第3行代码将数值格式化为两位小数的百分比格式显示。 第4行代码将数值格式化为千位分隔符显示。
第5行代码将数值格式化为以美元符号显示的两位小数,以千位分隔符分隔,如果是负值则以小括号显示。
第6行代码将数值格式化为以人民币符号显示的两位小数,以千位分隔符分隔,如果是负值则以小括号显示。
第7行代码将系统日期格式化为“yyyy-mm-dd”格式显示。 第8行代码将系统日期格式化为“yyyymmdd”格式显示。 第9行代码将系统日期格式化为长日期格式显示。
第10行代码将系统时间格式化为24小时、分钟和秒的格式显示。 第11行代码将系统时间格式化为分12小时、分钟和秒的格式显示。
16
VBA常用技巧代码解析
运行FromatCurrent过程结果如图 9-1所示。
图 9-1 格式化数值、日期和时间
技巧10 个人所得税自定义函数
在财务工作中经常需要计算个人所得税,而在Excel中没有计算个人所得税的函数,此时可以使用自定义函数来计算,如下面的代码所示。
#001 Public Function PITax(Income, Optional Threshold) As Single #002 Dim Rate As Single #003 Dim Debit As Single
#004 Dim Taxliability As Single
#005 If IsMissing(Threshold) Then Threshold = 2000 #006 Taxliability = Income - Threshold #007 Select Case Taxliability #008 Case 0 To 500 #009 Rate = 0.05 #010 Debit = 0
#011 Case 500.01 To 2000 #012 Rate = 0.1 #013 Debit = 25
17
VBA常用技巧代码解析
#014 Case 2000.01 To 5000 #015 Rate = 0.15 #016 Debit = 125
#017 Case 5000.01 To 20000 #018 Rate = 0.2 #019 Debit = 375
#020 Case 20000.01 To 40000 #021 Rate = 0.25 #022 Debit = 1375
#023 Case 40000.01 To 60000 #024 Rate = 0.3 #025 Debit = 3375
#026 Case 60000.01 To 80000 #027 Rate = 0.35 #028 Debit = 6375
#029 Case 80000.01 To 10000 #030 Rate = 0.4 #031 Debit = 10375 #032 Case Else #033 Rate = 0.45 #034 Debit = 15375 #035 End Select
#036 If Taxliability <= 0 Then #037 PITax = 0 #038 Else
#039 PITax = Application.Round(Taxliability * Rate - Debit, 2) #040 End If #041 End Function
代码解析:
自定义PITax函数根据应纳税额计算应纳的个人所得税额。
第5行代码设置个人所得税的起征点为2000元,如果以后需要调整起征点,可把2000元改为调整后的起征点。
18
VBA常用技巧代码解析
第6行代码设置全月应纳税所得额等于应纳税收入减去起征点。
第7行到第35行代码根据全月应纳税所得额取得税率和速算扣除数。税率和速算扣除数根据如表格 10-1所示的工资、薪金所得适用个人所得税九级超额累进税率表计算。
级数 一 二 三 四 五 六 七 八 九 全月应纳税所得额(含税所得额) 不超过500元 超过500元至2000元 超过2000元至5000元 超过5000元至20000元 超过20000元至40000元 超过40000元至60000元 超过60000元至80000元 超过80000元至100000元 超过100000元 税率% 5 10 15 20 25 30 35 40 45 速算扣除数(元) 0 25 125 375 1375 3375 6375 10375 15375 表格 10-1 个人所得税九级超额累进税率表
第36行到第40行代码根据应纳税所得额、税率和速算扣除数计算应纳的个人所得税额。其中第39行代码中使用工作表函数Round对计算结果进行四舍五入运算,请参阅技巧5-2。
在工作表中使用自定义PITax函数结果如图 10-1所示。
图 10-1 工作表中使用自定义PITax函数
技巧11 人民币大写函数
在VBA中没有内置的函数进行人民币大写转换,此时可以编写自定义函数进行人民币大写转换,如下面的代码所示。
19
VBA常用技巧代码解析
#001 Public Function RMBDX(M)
#002 RMBDX = Replace(Application.Text(Round(M + 0.00000001, 2), \元\
#003 RMBDX = IIf(Left(Right(RMBDX, 3), 1) = \元\Left(RMBDX, Len(RMBDX) - 1) & \角\分\元\& \角整\零\元整\
#004 RMBDX = Replace(Replace(Replace(Replace(RMBDX, \零元零角\零元\零角\零\负\
#005 End Function
代码解析:
第2行代码首先使用Round函数对小写数字加上极小值后进行四舍五入运算,关于Round函数请参阅技巧5-1。其次使用工作表Text函数将数值转换成人民币大写格式表示的文本。Text函数将数值转换为按指定数字格式表示的文本,语法如下:
TEXT(value,format_text)
Value参数为数值、计算结果为数值的公式,或对包含数值的单元格的引用。 Format_text参数为“单元格格式“对话框中”数字“选项卡上”分类框中的文本形式的数字格式。
最后使用Replace函数将人民币大写格式表示的文本中的小数点替换成“元”。Replace函数返回一个字符串,该字符串中指定的子字符串已被替换成另一子字符串,并且替换发生的次数也是指定的,语法如下:
Replace(expression, find, replace[, start[, count[, compare]]])
其中参数expression是必需的,包含要替换的子字符串。 参数find是必需的,要搜索到的子字符串。 参数replace是必需的,用来替换的子字符串。
参数start是可选的,在表达式中子字符串搜索的开始位置。
第3行代码使用了IIF函数、Left函数、Right函数根据第2行代码返回的人民币大写格式表示的文本中的“元”的位置在文本中插入正确的“元”、“角”、“分”字符,使之符合人民币大写习惯。
IIf函数根据表达式的值,来返回两部分中的其中一个,语法如下:
IIf(expr, truepart, falsepart)
参数expr是必需的,用来判断真伪的表达式。
参数truepart是必需的,如果expr为True,则返回这部分的值或表达式。 参数falsepart是必需的,如果expr为False,则返回这部分的值或表达式。 Left、Right函数请参阅技巧6 。
20