分享

Excel人民小写金额转换成大写金额

 精灵图书馆124 2019-03-22
最完美的函数公式,强烈推荐大家使用
=SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(IF(-RMB(C2,2),TEXT(C2,";负")&TEXT(INT(ABS(C2)+0.5%),"[dbnum2]G/通用格式元;;")&TEXT(RIGHT(RMB(C2,2),2),"[dbnum2]0角0分;;整"),),"零角",IF(C2^2<1,,"零")),"万",IF(AND(MOD(ABS(C2%),1000)<100,MOD(ABS(C2%),1000)>=10),"万零","万")),"零分","整")

测试数据:
100020.3
4568
800200.9
9009000.9
0.01
100868.61
以下函数公式及VBA自定义函数公式供学习使用,不建议使用(大家可以用9009000.9、0.01、100.01之类的数据进行测试,下面的部分公式存在BUG
公式1(仅供研究学习使用,不建议使用)
=IF(AND(A1<=-0.01,A1>=-0.99),"负","")&SUBSTITUTE(SUBSTITUTE(TEXT(TRUNC(A1),"[dbnum2]G/通用格式元;负[dbnum2]G/通用格式元")&TEXT(RIGHT(FIXED(A1),2),"[dbnum2]0角0分;[dbnum2]0角;[dbnum2]整"),"零角","零"),"零分",)

公式2(仅供研究学习使用,不建议使用)
=IF(AND(A1<=-0.01,A1>=-0.99),"负","")&TEXT(TRUNC(FIXED(A2)),"[dbnum2]g/通用格式元;负[dbnum2]g/通用格式元")&SUBSTITUTE(TEXT(RIGHT(FIXED(A2),2),"[=0][dbnum2]整;[<10][dbnum2]零0分;[dbnum2]0角0分"),"零分",)

公式3(仅供研究学习使用,不建议使用)
=SUBSTITUTE(IF(RIGHT(FIXED(A1)*100,2)*1=0,TEXT(FIXED(A1),"[dbnum2]")&"元整",SUBSTITUTE(SUBSTITUTE(REPLACE(TEXT(FIXED(A1),"[dbnum2]"),LEN(TEXT(FIXED(A1),"[dbnum2]")),0,"角")&"分",".","元"),"零角","零")),"-","负")        此公式处理小于-0.99与-0.1之间的数据有问题

补充1:
EXCEL中隐藏了一个数字转大写的函数NUMBERSTRING,但它仅支持正整数,用中文版的朋友可以试试这个函数:
=NUMBERSTRING(VALUE,TYPE)
NumberString(1234567890,1) = 一十二亿三千四百五十六万七千八百九十
NumberString(1234567890,2) = 壹拾贰亿叁仟肆佰伍拾陆万柒仟捌佰玖拾
NumberString(1234567890,3) = 一二三四五六七八九〇 
=IF(A1<0,"负",)&NUMBERSTRING(ABS(A1),2)&"元"&SUBSTITUTE(TEXT(MOD(ABS(A1)/1%,100),"[=0]整;[<10][dbnum2]零0分;[dbnum2]0角0分"),"零分",)

角后面无分,后面可有“整”,也可无“整”,实际应用中,无“整”的情况更多一些。“整”也可写成“正”。

 补充2:在转换成大写金额前,最好用round(a1,2)将小写金额数字四舍五入保留两位小数。

补充3:
使用自定义函数的方法:

Function DX(ByVal Num)       ' 人民币中文大写函数
    Application.Volatile True
    Place = "分角元拾佰仟万拾佰仟亿拾佰仟万"
    Dn = "壹贰叁肆伍陆柒捌玖"
    D1 = "整零元零零零万零零零亿零零零万"
    If Num < 0 Then FuHao = "负"
    Num = Format(Abs(Num), "###0.00") * 100
    If Num > 999999999999999# Then: DX = "超出转换范围!!": Exit Function
    If Num = 0 Then: DX = "零元零分": Exit Function
    NumA = Trim(Str(Num))
    NumLen = Len(NumA)
    For J = NumLen To 1 Step -1     ' 转换过程
      Temp = Val(Mid(NumA, NumLen - J + 1, 1))
      If Temp <> 0 Then             ' 非零数字转换
         NumC = NumC & Mid(Dn, Temp, 1) & Mid(Place, J, 1)
      Else                          ' 数字零的转换
         If Right(NumC, 1) <> "零" Then
           NumC = NumC & Mid(D1, J, 1)
         Else
           Select Case J            ' 特殊数位转换
                Case 1
                  NumC = Left(NumC, Len(NumC) - 1) & Mid(D1, J, 1)
                Case 3, 11
                  NumC = Left(NumC, Len(NumC) - 1) & Mid(D1, J, 1) & "零"
                Case 7
                  If Mid(NumC, Len(NumC) - 1, 1) <> "亿" Then
                     NumC = Left(NumC, Len(NumC) - 1) & Mid(D1, J, 1) & "零"
                  End If
                Case Else
           End Select
         End If
      End If
    Next
    DX = FuHao & Trim(NumC)
End Function

使用自定义函数另外最简洁的方法如下:

Function RMBDX(M)

    Y = Int(Round(100 * Abs(M)) / 100)
    j = Round(100 * Abs(M) + 0.00001) - Y * 100
    f = (j / 10 - Int(j / 10)) * 10
    A = IIf(Y < 1, "", Application.Text(Y, "[DBNum2]") & "元")
    B = IIf(j > 9.5, Application.Text(Int(j / 10), "[DBNum2]") & "角", IIf(Y < 1, "", IIf(f > 1, "零", "")))
    c = IIf(f < 1, "整", Application.Text(Round(f, 0), "[DBNum2]") & "分")
    RMBDX = IIf(Abs(M) < 0.005, "", IIf(M < 0, "负" & A & B & c, A & B & c))
End Function

Function rmbd(m)
  y = Int(Round(Abs(m), 2))  '整数部分
  j = Right(Round(Abs(m) * 100), 2) * 0.01
  j1 = IIf(j < 0.1 And j <> 0, "零" & Application.Text(j * 100, "[dbnum2]") & "分", "") '零几分
  j2 = IIf(Int(j * 10) = j * 10 And j <> 0, Application.Text(j * 10, "[dbnum2]") & "角整", "")
  j3 = IIf(j = 0, "整", "")
  j4 = IIf(Int(j * 10) <> j * 10 And j > 0.1, Application.Text(Int(j * 10), "[dbnum2]") & "角" & Application.Text(j * 100 - Int(j * 10) * 10, "[dbnum2]") & "分", "")
  rmbd = IIf(m < 0, "负", "") & Application.Text(y, "[dbnum2]") & "元" & j3 & j2 & j1 & j4
End Function


很多在职人员经常写错人民币大写金额,甚至有些高级职称的财务人员也写错(这样都写错应该感到很脸红的),以下内容建议学习掌握

人民币大写规范
一、 标准字样
壹、贰、叁、肆、伍、陆、柒、捌、玖、拾、佰、仟、万、 亿、元、角、分、零、整(正)
二、 正确填写票据和结算凭证的基本规定
   银行、单位和个人填写的各种票据和结算凭证是办理支付结 算和现金收付的重要依据,直接关系到支付结算的准确、及时和 安全。票据和结算凭证是银行、单位和个人凭以记载账务的会计 凭证,是记载经济业务和明确经济责任的一种书面证明。因此, 填写票据和结算凭证,必须做到标准化、规范化,要要素齐全、 数字正确、字迹清晰、不错漏、不潦草,防止涂改。中文大写金 额数字应用正楷或行书填写,如壹、贰、叁、肆、 伍、陆、柒、捌、玖、拾、佰、仟、万、亿、 元、角、分、零、整(正)等字样。不得用一、二(两)、三、 四、五、六、七、八、九、十、念、毛、另(或〇)填写,不得自造简化字。如果金额数字书写中使用繁体字,如貮(貳)、圆的,也应受理,但个人认为:最好不要使用貮(貳)、圆
  1.中文大写金额数字到“元”为止的,在“元”之后,应写 “整”(或“正”)字,在“角”之后,可以不写“整”(或“正”) 字。大写金额数字有“分”的,“分”后面不写”整”(或“正”) 字。
  2.中文大写金额数字前应标明“人民币”字样,大写金额数字有“分”的,“分”后面不写“整”(或“正”)字。
  3.中文大写金额数字前应标明“人民币”字样,大写金额数 字应紧接“人民币”字样填写,不得留有空白。大写金额数字前 未印“人民币’’字样的,应加填“人民币”三字。在票据和结算 凭证大写金额栏内不得预印围定的“仟、佰、拾、万、仟、佰、 拾、元、角、分”字样。
  4.阿拉伯数字小写金额数字中有“0”时,中文大写应按照 汉语语言规律、金额数字构成和防止涂改的要求进行书写。举例 如下:
  (1)阿拉伯数字中间有“0”时,中文大写要写“零”字,如 ¥1409.50,应写成人民币陆壹仟肆佰零玫元伍角。
  (2)阿拉伯数字中间连续有几个“0”时,中文大写金额中间可 以只写--个“零”字,如¥6007.14,应写成人民币陆仟零柒元 壹角肆分。
  (3)阿拉伯金额数字万位和元位是“0”,或者数字中间连续有 几个“0”,万位、元位也是“0”,但千位、角位不是“0”时, 中文大写金额中可以只写一个零字,也可以不写”零”字。如 Y1680.32,应写成人民币壹仟陆佰捌拾元零叁角贰分,或者写 成人民币壹仟陆佰捌拾元叁角贰分,又如¥107000.53,应写成 人民币壹拾万柒仟元零伍角卷分,或者写成人民币壹拾万零柒仟 元伍角卷分。
  (4)阿拉伯金额数字角位是“0”,而分位不是“0”时,中文大写金额“元”后面应写“零”字。如¥16409.02,应写成人民币壹万陆仟肆佰零玖元零贰分;又如Y325.04,应写成人民币叁佰贰拾伍元零肆分,
  (5)阿拉伯小写金额数字前面,均应填写人民币符号“Y”。阿拉伯小写金额数字要认真填写,不得连写分辨不清。特别注意:人民币符号“Y”,不能写成¥。仔细观察,少一横是人民币符号,多一横是日元符号(小日本用的),在N年之前,人民币符号与日元符号一样,自从计算机与网络普及以后,中国人民银行作出了规定,用人民币符号“Y”,与日元符号相区别

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多