|
楼主 |
发表于 2009-5-26 22:29
|
显示全部楼层
第9部分 函数的使用
技巧163 人民币大写函数
在VBA中没有内置的函数进行人民币大写转换,此时可以编写自定义函数进行人民币大写转换,如下面的代码所示。- #001 Public Function RMBDX(M)
- #002 RMBDX = Replace(Application.Text(Round(M + 0.00000001, 2), "[DBnum2]"), ".", "元")
- #003 RMBDX = IIf(Left(Right(RMBDX, 3), 1) = "元", Left(RMBDX, Len(RMBDX) - 1) & "角" & Right(RMBDX, 1) & "分", IIf(Left(Right(RMBDX, 2), 1) = "元", RMBDX & "角整", IIf(RMBDX = "零", "", RMBDX & "元整")))
- #004 RMBDX = Replace(Replace(Replace(Replace(RMBDX, "零元零角", ""), "零元", ""), "零角", "零"), "-", "负")
- #005 End Function
复制代码 代码解析:
第2行代码首先使用Round函数对小写数字加上极小值后进行四舍五入运算,关于Round函数请参阅技巧157-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函数请参阅技巧158 。
第4行代码使用Replace函数将人民币大写格式表示的文本中可能出现的“零元零角”、“零元”替换成空白字符;可能出现的“零角”替换成“零”。如果输入负数的话,将“-”替换成“负”。
在工作表中使用自定义RMBDX函数转换人民币大写的效果如图所示。
|
|