EXCEL如何自定义金额小写转大写函数?

我是搞财务的,在EXCEL中经常要用到小写转大写的公式。如果A1是小写,A2显示大写,则A2需要输入
=IF(A1="","",IF(ROUND(A1,2)<1,"",TEXT(INT(ROUND(A1,2)),"[dbnum2]")&"元")&IF(INT(ROUND(A1,2)*10)-INT(ROUND(A1,2))*10=0,IF(INT(ROUND(A1,2))*(INT(ROUND(A1,2)*100)-INT(ROUND(A1,2)*10)*10)=0,"","零"),TEXT(INT(ROUND(A1,2)*10)-INT(ROUND(A1,2))*10,"[dbnum2]")&"角")&IF((INT(ROUND(A1,2)*100)-INT(ROUND(A1,2)*10)*10)=0,"整",TEXT((INT(ROUND(A1,2)*100)-INT(ROUND(A1,2)*10)*10),"[dbnum2]")&"分"))
由上面公式可以看出,这个公式太长,输入容易出错。为了简化,我想自定义一个函数daxie(a),我在VB编辑器中初步设想如下图

可是在试验时不成功。说是Text 没有定义,请大侠帮我解决一下。
两位高手的代码我照搬照套用了,感觉都很好,可惜只能只能采纳一个最满意的答案。经过对比,从我个人适用上,觉得beau131000给的代码比较好。就采纳beau131000的了,也非常感谢caulen,只是不知道caulen的代码在数据较大时会出现问题。

第1个回答  2015-08-18

给你一个宏代码

本回答被提问者采纳
第2个回答  2015-08-18
思路是不错,可是你这代码还真的不靠谱,vba不是这么引用表格函数的。给你段代码吧
Function daxie(num#) As String
If num <> 0 Then
Dim a#, zs%, x1%, x2%
Dim s$
a = WorksheetFunction.Round(num, 2)
If a < 0 Then s = "负"
a = Abs(a)
zs = Int(a)
a = a * 10
x1 = Int(a) Mod 10
a = a * 10
x2 = Int(a) Mod 10
s = s & WorksheetFunction.Text(zs, "[dbnum2]") & "元"
If x1 + x2 = 0 Then
s = s & "整"
Else
If x1 = 0 Then
s = s & "零"
Else
s = s & WorksheetFunction.Text(x1, "[dbnum2]") & "角"
End If
If x2 <> 0 Then s = s & WorksheetFunction.Text(x2, "[dbnum2]") & "分"
End If
daxie = s
Else
daxie = ""
End If
End Function追问

你好,我套用了你的代码,很不错。
可是数字大于32766时就出现错误,这是为什么呢?
还有前面的声名我不懂:
Function daxie(num#) As String
If num 0 Then
Dim a#, zs%, x1%, x2%
Dim s$

特别是#、%、$这几个符号是什么意思?请你给我讲解透一点,非常感谢

相似回答