EXCEL表中如何用函数把数字转化成中文大写金额格式(2008-03-09 10:18:25)标签:分类:在EXCEL表中把数字转化成中文大写金额格式是财务人员在日常工作中的一个难题,虽然在EXCEL中的单元格格式设置中有一个特殊格式中可以转换在中文大写数字,但不能给出元、角、分整的中文金额特定格式,许多财务人员为之一筹莫展,最后只能手工输入,降低了EXCEL的使用效率,但如果TRUNC工作表函数,这个问题将迎刃而解,如单元格A1=123459.72,须在某一格记录其中文大写金额,则在该格内输入函数:="大写人民币:"&IF(TRUNC(A1)=0,"",TEXT(TRUNC(A1),"[DBNum2]G/通用格式")&"元")&IF(TRUNC(A1*10)-TRUNC(A1*10,-1)=0,IF(TRUNC(A1*100)-TRUNC(A1*100,-1)<>0,"零",""),TEXT(TRUNC(A1*10)-TRUNC(A1*10,-1),"[DBNum2]G/通用格式")&"角")&IF(TRUNC(A1*100)-TRUNC(A1*100,-1)=0,"",TEXT(TRUNC(A1*100)-TRUNC(A1*100,-1), "[DBNum2]G/通用格式")&"分")&IF(TRUNC(A1*100)-TRUNC(A1*100,-1)=0,"整","")回车后将得到完整的大写中文金额格式,这个函数将广泛应用于支票大家知道,在Excel中,可以通过设置单元格格式,把单元格的阿拉伯数字直接以中文数字形式来显示,但该格式并不适用于显示票据大写金额。
我以前在使用Foxpro时,是通过自定义函数,把小写金额的数字转化为字符后,进行分析转换的。
当然,在Excel中也可以使用VBA来编写自定义函数,但这种方式对不利于表格共享。
实际上,Excel中的中文大写数字格式功能,已经基本能够解决整数的大写金额显示的问题,我们所要解决的是当金额出现角分位的情况。
解决的方法是使用复合函数,考虑到人民币的单位是元,辅币有角分两个单位,一般金额取值的精确度为小数后两位。
同时,当金额有角位没有分位时,大写金额后可写“整”也可以不写“整”,此时较为规范的写法是不要写“整”字。
那么,函数设置可以这样考虑:如果金额为零直接显示“”;对于数值元位以上部分,利用Excel的中文大写数字表示法在中文大写数字后直接加“元”字表示;如果元以上金额为空,则直接显示空字符;如果金额为整数,直接在中文数字后加“整”字;如果角位为零分位不为零,角位上写“零”;分位为零时,分位显示空字符。
于是,假定票据上的小写金额栏位在单元格K9上,那么,我们可以在对应的大写金额栏位上填入下面这个复合函数:="人民币"&IF(ROUND(G10,2)<0,"负","")&IF(ROUND(ABS(K9),2)=0,"",IF(ROUND(K9,2)<0,"负","")&IF(ROUND(ABS(K9),2)<1,"",TEXT(INT(ROUND(ABS(K9),2)),"[dbnum2]")&"元")&IF(LEFT(RIGHT(TEXT(K9,"0.00"),2),1)="0",IF(RIGHT(TEXT(K9,"0.00"),1)="0","整",IF(ROUND(ABS(K9),2)<1,"","零")),TEXT(LEFT(RIGHT(TEXT(K9,"0.00"),2),1),"[dbnum2]")&"角")&IF(RIGHT(TEXT(K9,"0.00"),1)="0","",TEXT(RIGHT(TEXT(K9,"0.00"),1),"[dbnum2]")&"分")) 这里用到的几个函数有:TEXT(value,format_text) 将数值转换为按指定数字格式表示的文本。
Value 是待转换的数值,可直接替换为数值、计算结果为数字值的公式,或对包含数字值的单元格的引用。
Format_text 指定的显示格式,为“单元格格式”对话框中“数字”选项卡上“分类”框中的文本形式的数字格式。
上述函数中"[dbnum2]"是中文大写数字的格式标志。
ABS(number) 返回数字的绝对值。
绝对值没有符号。
Number 需要计算其绝对值的实数。
INT(number) 将数字向下舍入到最接近的整数也称为取整函数Number 需要进行向下舍入取整的实数。
IF(logical_test,value_if_true,value_if_false) 条件函数。
执行真假值判断,根据逻辑计算的真假值,返回不同结果。
Logical_test 表示计算结果为TRUE 或FALSE 的任意值或表达式。
Value_if_true logical_test 为TRUE 时函数返回值。
Value_if_false logical_test 为FALSE 时函数返回值。
ROUND(number,num_digits) 返回某个数字按指定位数取整后的数字。
Number 需要进行四舍五入的数字。
Num_digits 指定的位数,按此位数进行四舍五入。
本例中数字精确到小数后2位。
LEFT(text,num_chars) 取字符串左侧若干字符Text 是包含要提取字符的文本字符串。
Num_chars 指定要由LEFT 所提取的字符数。
RIGHT(text,num_chars) 取字符串右侧若干字符Text 是包含要提取字符的文本字符串。
Num_chars 指定希望RIGHT 提取的字符数。
& 是字符连接符。
港币的中文大写显示方法与人民币相同,美元因为没有角位,其辅币单位只有美分,因此中文大写函数如下:="美元"&IF(ROUND(G10,2)<0,"负","")&IF(ROUND(ABS(K9),2)=0,"",IF(ROUND(K9,2)<0,"负","")&IF(ROUND(K9,2)<0,"负","")&IF(ROUND(ABS(K9),2)<1,"",TEXT(INT(ROUND(ABS(K9),2)),"[dbnum2]")&"元")&IF(RIGHT(TEXT(K9,"0.00"),2)="00","整",TEXT(RIGHT(TEXT(K9,"0.00"),2),"[dbnum2]")&"分")) 日元没有辅币,可以直接使用Execl提供的大写中文表达格式加“元”字进行转换:=IF(ROUND(ABS(K9),2)=0,"",IF(ROUND(K9,2)<0,"负","")&IF(ROUND(K9,2)<0,"负","")&TEXT(INT(ABS(K9)),"[dbnum2]")&"元"&"整")在EXCEL中自动产生货币金额的大写形式作者:flyings EXCEL以其强大的制表功能深得广大用户得喜爱,尤其是需要经常制作表格得工作人员,如财会人员。
在财会人员所做的表格中,经常要将货币金额转化为大写形式,而EXCEL本身并不提供该功能。
笔者通过宏命令,制作了一个大写转换的程序,提供给需要的朋友们参考。
假设金额小写存放在"A1 "单元格中,大写保存在"A2 "单元格中,通过运行下列的宏命令,即可自动将小写金额转化为大写形式,如.12的大写形式为壹仟贰佰叁拾肆万伍仟陆佰柒拾捌元壹角贰分。
Sub 宏1() money = LTrim(Str(Workbooks( "Book2 "). Sheets( "Sheet1 ").Range( "A1 ").Value * 100)) ' 取单元格中的小写金额' "Book2 " 为文件名' "Sheet1 " 为工作表名' "A1 " 为存放小写金额的单元格名k = Len(money) l = 1 dxmc = "零壹贰叁肆伍陆柒捌玖" dwmc = "分角元拾佰仟万拾佰仟"umoney = " " Do While k > 0 Number = Val(Mid(money, l, 1)) If Number > 0 Then umoney = umoney + Mid(dxmc, Number + 1, 1) umoney = umoney + Mid(dwmc, k, 1) Else If k > 1 Then '如果没有分为零,则不显示分值及单位If k Mod 4 <> 3 Then '如果元、万上的值为零,则只显示单位umoney = umoney + Mid(dxmc, Number + 1, 1) Else umoney = umoney + Mid(dwmc, k, 1) End If End If End If k = k - 1 l = l + 1 Loop Workbooks( "Book2 ").Sheets( "Sheet1 "). Range( "A2 ").Value = umoney ' 将大写金额写入单元格' "Book2 " 为文件名' "Sheet1 " 为工作表名' "A2 " 为存放大写金额的单元格End Sub在D9中输入数字,粘贴以下内容到其他任意单元格内即可IF(D9<0,"金额为负无效",IF(AND((INT(D9*10)-INT(D9)*10)=0,(INT(D9*100)-INT(D9*10)*10)=0),TEXT(INT(D9), "[dbnum2]")&"元整",IF((INT(D9*100)-INT(D9*10)*10)=0,TEXT(INT(D9),"[dbnum2]")&"元"&TEXT(INT(D9*10)-INT(D9)*10,"[dbnum2]")&"角整",TEXT(INT(D9),"[dbnum2]")&"元"&TEXT(INT(D9*10)-INT(D9)*10,"[dbnum2]")&"角"&TEXT(IF((INT(D9*1000)-INT(D9*100)*10)>=5,(INT(D9*100)-INT(D9*10)*10)+1,INT(D9 *100)-INT(D9*10)*10),"[dbnum2]")&"分整")))标签: .假定你要在A5输入阿拉佰数字,B5转换成中文大写金额(含元角分),请在B5单元格输入如下公式:=IF((INT(A5*10)-INT(A5)*10)=0,TEXT(INT(A5),"[DBNum2]G/通用格式")&"元"&IF((INT(A5*100)-INT((A5)*10)*10)=0,"整","零"&TEXT(INT(A5*100)-INT(A5*10)*10,"[DBNum2]G/通用格式")&"分"),TEXT(INT(A5),"[DBNum2]G/通用格式")&"元"&IF((INT(A5*100)-INT((A5)*10)*10)=0,TEXT((INT(A5*10)-INT(A5)*10),"[DBNum2]G/通用格式")&"角整",TEXT((INT(A5*10)-INT(A5)*10),"[DBNum2]G/通用格式")&"角"&TEXT(INT(A5*100)-INT(A5*10)*10,"[DBNum2]G/通用格式")&"分"))=IF(ROUND(K11,2)<0,"负"&IF(ABS(ROUND(K11,2))<1,"",TEXT(INT(ABS(ROUND(K11,2))),"[dbnum2]")&"元")&IF(MOD(INT(ABS(ROUND(K11,2)*10)),10)=0,IF(INT(ABS(ROUND(K11,2)))*MOD(INT(ABS(RO UND(K11,2)*100)),10)=0,"","零"),TEXT(MOD(INT(ABS(ROUND(K11,2)*10)),10),"[dbnum2]")&"角")&IF(MOD(INT(ABS(ROUND(K11,2)*100)),10)=0,"整",TEXT(MOD(INT(ABS(ROUND(K11,2)*100)),10),"[dbnum2]")&"分"),IF(ROUND(K11,2)=0,"零",IF(ROUND(K11,2)<1,"",TEXT(INT(ROUND(K11,2)),"[dbnum2]")&"元")&IF(MOD(INT(ROUND(K11,2)*10),10)=0,IF(INT(ROUND(K11,2))*MOD(INT(ROUND(K11,2)*10 0),10)=0,"","零"),TEXT(MOD(INT(ROUND(K11,2)*10),10),"[dbnum2]")&"角")&IF(MOD(INT(ROUND(K11,2)*100),10)=0,"整",TEXT(MOD(INT(ROUND(K11,2)*100),10),"[dbnum2]")&"分")))。