ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[分享]人民币大写函数TEXT终极版 1行(136字符)

  [复制链接]

TA的精华主题

TA的得分主题

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

用函数128个字符就可解决

本帖已被收录到知识树中,索引项:数据格式转换

用函数128个字符就可解决!引用A1

=IF(A1<0,"负",)&NUMBERSTRING(ABS(A1),2)&"元"&SUBSTITUTE(TEXT(MOD(ABS(A1)*100,100),"[=0]整;[<10][dbnum2]零0分;[dbnum2]0角0分"),"零分","整")

TA的精华主题

TA的得分主题

发表于 2008-7-26 22:16 | 显示全部楼层

也许是目前最短的函数法转换公式(103个字符)

也许是目前最短的函数法转换(大写),适应负值。(共127个字符)

=IF(A1<0,"负",)&NUMBERSTRING(ABS(A1),2)&"元"&SUBSTITUTE(TEXT(MOD(ABS(A1)/1%,100),"[=0]整;[<10][dbnum2]零0分;[dbnum2]0角0分"),"零分","整")

不考虑负值时,公式只有103个字符。

=NUMBERSTRING(A1,2)&"元"&SUBSTITUTE(TEXT(MOD(A1/1%,100),"[=0]整;[<10][dbnum2]零0分;[dbnum2]0角0分"),"零分","整")

请指教。

TA的精华主题

TA的得分主题

 楼主| 发表于 2008-7-27 03:33 | 显示全部楼层

呵呵 如果不考虑有小数的情况 =TEXT(A1,"[dbnum2]")&"圆整"  才25个字符

看来你对“函数”的概念没搞明白。函数是一个统称

=TEXT(A1,"[dbnum2]")&"圆整"  这个叫函数也叫公式

Function Dd(m) '''这个也叫函数 一般称之为自定义函数、方法
Dd  = m * 10
End Function

Sub test()''''''这个也叫函数 一般之为 过程、宏、代码
MsgBox "你好"
End Sub

具体也没有谁去统一,给个法定的叫法,

一般约定俗成称 单元格里的函数为公式、函数公式

VBE编辑器里写的代码叫 叫自编函数、自定义函数、过程、宏.....

用代码可以写公式 ,但用公式没法写代码

公式和代码各有各的用法,没有可比性。

另外不管是编写公式还是代码都应该通用一些。

尤其是人民币大写,几乎谁都知道该如何读写,因为财务上有统一标准。

整数部分TEXT 和 NUMBERSTRING 函数已经处理的绝对标准了.

复杂性就在角分的处理上,何时该有“零” 何时该有“整”都是有规定的,还有对一些边界值的处理。

不管对千分位进行 四舍五入 还是 截尾 操作 ,对于负数 显示“-” 还是“负” 都是可接受范围

但都不能出现以下明显的错误

0.999   壹元壹零角整
-0.001  负零元零整
-1.99   负贰元玖角玖分
0.56    壹元伍角陆分

以上是127 和 103 个字符的返回结果,如果用这个,估计会误导财务

我所见过能正处理上述数字最短的公式是36楼wshcw写的 181个字符的公式

=SUBSTITUTE(SUBSTITUTE(IF(A1>-0.5%,,"负")&TEXT(INT(ABS(A1)+0.5%),"[dbnum2]G/通用格式元;;")&TEXT(RIGHT(FIXED(A1),2),"[dbnum2]0角0分;;"&IF(ABS(A1)>1%,"整",)),"零角",IF(ABS(A1)<1,,"零")),"零分","整")

编写正确的公式和代码和多人都能做到,但要称最短那就要看兴趣和才智了。

TA的精华主题

TA的得分主题

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

TA的精华主题

TA的得分主题

发表于 2008-7-27 12:23 | 显示全部楼层

谢谢版主指教

版主太有才了,非常感谢版主指教!

[此贴子已经被作者于2008-7-27 12:53:15编辑过]

TA的精华主题

TA的得分主题

发表于 2008-7-29 00:23 | 显示全部楼层

我也来试试, 这不是最短的, 但是是我能独立完成最短的

1.01要说成  1元零1分时
    

0    

0.02
    
贰分

0.5   伍角整

0.21
    
贰角壹分

25    贰拾伍元整

1.05
    
壹元零伍分

5.36
    
伍元叁角陆分

-1.01       负壹元零壹分

=IF(A2<0,"负","")&IF(TRUNC(A2),TEXT(TRUNC(ABS(A2)),"[dbnum2]")&"元","")&SUBSTITUTE(SUBSTITUTE(RIGHT(TEXT(MOD(ABS(A2),1),"[dbnum2]0.0角0分"),4),"零分",IF(A2,"整","零")),"零角",IF((TRUNC(A2)*MOD(A2,1)),"零",""))

=IF(A2<0,"负","")&IF(TRUNC(A2),TEXT(TRUNC(ABS(A2)),"[dbnum2]")&"元","")&SUBSTITUTE(SUBSTITUTE(RIGHT(TEXT(MOD(ABS(A2),1),"[dbnum2]0.0角0分"),4),"零分",IF(A2,"整","零")),"零角",IF((TRUNC(A2)*MOD(A2,1)),"零",""))

不计"=" 197字

      

1.01 可以说成11分时  

0    

0.02
    
贰分

0.5   伍角整

0.21
    
贰角壹分

25    贰拾伍元整

1.05
    
壹元伍分

5.36
    
伍元叁角陆分

-1.01负壹元壹分

=IF(A2<0,"负","")&IF(TRUNC(A2),TEXT(TRUNC(ABS(A2)),"[dbnum2]")&"元","")&SUBSTITUTE(SUBSTITUTE(RIGHT(TEXT(MOD(ABS(A2),1),"[dbnum2]0.0角0分"),4),"零分",IF(A2,"整","零")),"零角","")

不计"=" 168字

不支持三位小数, 上亿也出错, 请指点, 重在参与与煅练

[此贴子已经被作者于2008-7-29 0:43:50编辑过]

TA的精华主题

TA的得分主题

 楼主| 发表于 2008-7-29 00:54 | 显示全部楼层

呃 这个 啊 哈哈 怕是“指点”不了

俺的函数水平和普通坛友差不多,不过这里是VBA版[em06]

你如果写自定义函数,我还能讨论讨论

???

你没试过 0.999

[此贴子已经被作者于2008-7-29 0:56:53编辑过]

TA的精华主题

TA的得分主题

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

"人民币大写",把它粘到VBA模块里就可以使用.

请各位试一下

 Function RMBDX(money As Variant)
    Dim m1 As Long, n1 As Long, n2 As Integer, n3 As Integer
    m1 = Application.WorksheetFunction.Round(money * 100, 0)
    n1 = Int(m1 / 100)
    n2 = Int(m1 / 10) - n1 * 10
    n3 = m1 - n1 * 100 - n2 * 10
    If n3 = 0 Then
    RMBDX = "整"
    Else
    RMBDX = Application.WorksheetFunction.Text(n3, "[DBnum2]") & "分"
    End If
    If n2 = 0 Then
    If n1 <> 0 And n3 <> 0 Then RMBDX = "零" & RMBDX
    Else
    RMBDX = Application.WorksheetFunction.Text(n2, "[DBnum2]") & "角" & RMBDX
    End If
    If n1 <> 0 Or m1 = 0 Then
    RMBDX = Application.WorksheetFunction.Text(n1, "[DBnum2]") & "元" & RMBDX
    End If
    End Function

TA的精华主题

TA的得分主题

发表于 2008-8-1 17:16 | 显示全部楼层
看到这么多的强手,我怎么今天才找到这个网站啊,叹啊,我以前都做了些什么啊.

TA的精华主题

TA的得分主题

发表于 2008-8-2 17:22 | 显示全部楼层

我菜鸟一个,没看懂,有自己的办法,回头再来学你的。

您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-5-18 12:15 , Processed in 0.044278 second(s), 8 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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