ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
楼主: ldy888

[挑战]功能最全、最短(7行)的人民币大写函数

  [复制链接]

TA的精华主题

TA的得分主题

发表于 2006-9-19 14:34 | 显示全部楼层
EXCEL有个王八的屁股(龟腚),对于4舍5入的规定中,5是特殊处理的,若前一位是偶数,则5舍,若前一位为奇数,则5入,楼主试试1,388,999,999.715,2,388,999,999.735的结果看看

TA的精华主题

TA的得分主题

发表于 2006-9-19 16:21 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
谢谢,佩服!!

TA的精华主题

TA的得分主题

 楼主| 发表于 2006-9-20 02:17 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
这个龟腚太不能理解了

TA的精华主题

TA的得分主题

发表于 2006-9-27 10:40 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

好东西!~谢谢分享!

TA的精华主题

TA的得分主题

发表于 2006-10-17 18:57 | 显示全部楼层

我发一个网上常见的。

A. 使用方法:
在EXECL的“工具”菜单中,选择“加载宏”,将这两个文件加载进去,就可以实现数字转人民币大写了。
 
注:文件名为:RBM带小数.xla和RMB不带小数.xla
 
 
EXECL引用函数语法:
 
带小数:RMBpiont(单元格位置),比如是D12,函数写法为:=RMBpiont(D12)
不带小数:RMBdx(单元格位置),比如是D12,函数写法为:=RMBdx(D12)
 
附源码:
不带小数:
Function rmbdx(value, Optional m = 0)
On Error Resume Next
Dim a
Dim jf As String   '定义角分位
Dim j '定义角位
Dim f '定义分位
If value < 0 Then '处理正负数的情况
a = "负"
Else
a = ""
End If
If IsNumeric(value) = False Then '判断待转换的value是否为数值
rmbdx = "需转换的内容非数值"
Else
 value = Abs(CCur(value))
'当参数m不输入(默认为0)或为0时,小数点后的第三数不进行四舍五入处理
'当参数m为1或其它数值时,小数点后的第三数进行四舍五入处理
 If m = 0 Then
   jf = Fix((value - Fix(value)) * 100)
   value = Fix(value) + jf / 100
   Else '厘位进行四舍五入实践很少用到,但还是要照顾到
     value = Application.WorksheetFunction.Round(value, 2) '-->这句是关键!只用round有bug
     jf = Round((value - Fix(value)) * 100, 0)
 End If
 If value = 0 Or value = "" Then '当待转换数值为0或空时,不进行转换
 rmbdx = ""
 Else
 strrmbdx = Application.WorksheetFunction.Text(Int(value), "[DBNum2]") & "元" '转换整数位
   If Int(value) = 0 Then
   strrmbdx = ""
   End If
 If Int(value) <> value Then
     strrmbdx = strrmbdx & "整"
 End If
 rmbdx = a & strrmbdx '最后成型
 End If
End If
End Function
 
带小数:
Function RMBpiont(value, Optional m = 0)
On Error Resume Next
Dim a
Dim jf As String   '定义角分位
Dim j '定义角位
Dim f '定义分位
If value < 0 Then '处理正负数的情况
a = "负"
Else
a = ""
End If
If IsNumeric(value) = False Then '判断待转换的value是否为数值
RMBpiont = "需转换的内容非数值"
Else
 value = Abs(CCur(value))
'当参数m不输入(默认为0)或为0时,小数点后的第三数不进行四舍五入处理
'当参数m为1或其它数值时,小数点后的第三数进行四舍五入处理
 If m = 0 Then
   jf = Fix((value - Fix(value)) * 100)
   value = Fix(value) + jf / 100
   Else '厘位进行四舍五入实践很少用到,但还是要照顾到
     value = Application.WorksheetFunction.Round(value, 2) '-->这句是关键!只用round有bug
     jf = Round((value - Fix(value)) * 100, 0)
 End If
 If value = 0 Or value = "" Then '当待转换数值为0或空时,不进行转换
 RMBpiont = ""
 Else
 strRMBpiont = Application.WorksheetFunction.Text(Int(value), "[DBNum2]") & "元" '转换整数位
   If Int(value) = 0 Then
   strRMBpiont = ""
   End If
 If Int(value) <> value Then
   If jf > 9 Then '判断小数位
     j = Left(jf, 1)
     f = Right(jf, 1)
     Else
     j = 0
     f = jf
   End If
  If j <> 0 And f <> 0 Then '角分位都有时
    jf = Application.WorksheetFunction.Text(j, "[DBNum2]") & "角" _
    & Application.WorksheetFunction.Text(f, "[DBNum2]") & "分"
     Else
      '处理出现零几分的情况
      If Int(value) = 0 And j = 0 And f <> 0 Then
         jf = Application.WorksheetFunction.Text(f, "[DBNum2]") & "分"
         Else
           If j = 0 Then '有分无角时
            jf = "零" & Application.WorksheetFunction.Text(f, "[DBNum2]") & "分"
              Else
               If f = 0 Then '有角无分时
                jf = Application.WorksheetFunction.Text(j, "[DBNum2]") & "角整"
               End If
           End If
      End If
  End If
  strRMBpiont = strRMBpiont & jf '组装
 Else
     strRMBpiont = strRMBpiont & "整"
 End If
 RMBpiont = a & strRMBpiont '最后成型
 End If
End If
End Function
 

TA的精华主题

TA的得分主题

发表于 2006-10-17 20:46 | 显示全部楼层

Application.Text(y, "[DBNum2]") 这个写成

Application.WorksheetFunction.Text(y, "[DBNum2]")

很多人就能看懂了

TA的精华主题

TA的得分主题

发表于 2006-11-3 16:09 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2006-11-3 16:44 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

好東西應該給大家分享,早知道我也貼出來了。

TA的精华主题

TA的得分主题

发表于 2006-11-19 14:47 | 显示全部楼层

以前一直想做,但是都想不到有那么简单的算法,实在方便又实用,谢谢!

TA的精华主题

TA的得分主题

发表于 2006-11-19 16:23 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
不错!!最好做个注释吧!!!!!!!!!!
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-25 16:18 , Processed in 0.044007 second(s), 6 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表