ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

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

  [复制链接]

TA的精华主题

TA的得分主题

发表于 2008-7-13 13:26 | 显示全部楼层 |阅读模式
本帖已被收录到知识树中,索引项:数据格式转换
本帖最后由 wshcw 于 2012-5-9 10:38 编辑

 

 

由于清理水贴,导致楼层有变化,原来的84楼跑到80楼去了.   2010-6-17

地址:

http://club.excelhome.net/viewthread.php?tid=337509&page=8#pid2210353

 

最后更新及 136 、155、 163 字符 以及最短的公式 167 和 161 字符在80楼

http://club.excelhome.net/forum.php?mod=redirect&goto=findpost&ptid=337509&pid=2210353

 

 

 

 

Function ldyDX(M)'205个字符
ldyDX = IIf(M > -0.005, "", "负") & IIf(Abs(M) < 0.005, "", Replace(Replace(Replace(Join(Application.Text(Split(Format(Abs(M), "0.00"), "."), Split("[DBNum2] [DBNum2]0角0分")), "元"), "零分", "整"), "零角", ""), "零元", ""))
End Function

居然还可以短一点 200个字符

Function DX(M)'200个字符
DX = IIf(Abs(M) < 0.005, "", Replace(Replace(Replace(Join(Application.Text(Split(Format(M, " 0. 00")), Split("@ [DBNum2];;0 [>9][dbnum2]圆0角0分;[=0]圆整;[dbnum2]圆零0分")), ""), "零分", "整"), "0圆零", ""), "0圆", ""))
End Function 

核心语句2 Join(Application.Text(Split(Format(M, " 0. 00")), Split("@ [DBNum2];;0 [>9][dbnum2]圆0角0分;[=0]圆整;[dbnum2]圆零0分")), "")

再细分一些居然又减少6个字符突破200了 08-7-23  

突然想到用 a 代替 “”再少4个   刀砍斧剁 再减5个  不知到是否还能减

Function DX(M)'185个字符
DX = IIf(Abs(M) < 0.005, a, Replace(Replace(Replace(Join(Application.Text(Split(Format(M, " 0. 0 0")), Split(" [DBnum2] [DBnum2]圆0角;;圆零 [DBnum2]0分;;整")), a), "零圆零", a), "零圆", a), "零整", "整"))
End Func
tion 

核心语句3 Join(Application.Text(Split(Format(M, " 0. 0 0")), Split("@ [DBNum2] [=]圆零;[dbnum2]圆0角 [=]整;[dbnum2]0分")), "")

-捌角贰分                     -0.82
-贰分                            -0.015
-壹佰圆零贰分             -100.02
壹万圆零贰分              10000.02
贰角整                         0.2
壹圆整                         0.995

 

恶补函数的副产品,纯粹的脑力体操。TEXT有如此多秒用!叹服

核心语句 Join(Application.Text(Split(Format(Abs(M), "0.00"), "."), Split("[DBNum2] [DBNum2]0角0分")), "元")

已经完成 X元X角X分 的转换 其他 iif replace 都是对细节的补充。

两年前我写的7 行,又有 gly1126 写的3行,到现在的1 行。欢迎测试挑错

呵呵 自己挑的事,自己终结[em01]

附一个 抄自 EXCEL吧 的公式 191字符

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

 

配套产品  :[分享]强力 人民币中文大写转数字 函数
 

 不是会计却干了不少会计活[em01]


[此贴子已经被作者于2008-8-14 22:30:16编辑过]

[ 本帖最后由 ldy 于 2010-6-17 21:39 编辑 ]

TA的精华主题

TA的得分主题

发表于 2008-7-13 13:56 | 显示全部楼层

参考:

如1000.25,没有零,壹仟元贰角伍分,看能提高一下?

有人是习惯于壹仟元零贰角伍分的。

[此贴子已经被作者于2008-7-13 13:57:34编辑过]

TA的精华主题

TA的得分主题

发表于 2008-7-13 14:20 | 显示全部楼层

非常祝贺LDY斑竹的大作,基本查实不出毛病。

我平时还是喜欢用这个版本,方便。(目标格a12),

你不知道,有好多好多的菜鸟,你的函数导出模块就要为难他们,用不成!

=IF(A12=0,"",IF(ABS(A12)>=1,IF(A12=TRUNC(A12),TEXT(TRUNC(A12),"[DBNUM2]")&"圆整",IF(A12*10=TRUNC(A12*10),TEXT(TRUNC(A12),"[DBNUM2]")&"圆"&TEXT(ABS(TRUNC(A12*10)-TRUNC(A12)*10),"[DBNUM2]")&"角整",TEXT(TRUNC(A12),"[DBNUM2]")&"圆"&IF(ABS(A12)-TRUNC(ABS(A12))<0.1,"零",TEXT(ABS(TRUNC(A12*10)-TRUNC(A12)*10),"[DBNUM2]")&"角")&TEXT(FIXED(ABS(A12)*100-INT(ABS(A12)*10)*10,0),"[DBNUM2]")&"分")),IF(ABS(A12)*10-INT(ABS(A12)*10)=0,TEXT(TRUNC(A12*10),"[DBNUM2]")&"角整",IF(ABS(ABS(A12)-TRUNC(ABS(A12)))<0.1,"",TEXT(TRUNC(A12*10),"[DBNUM2]")&"角")&TEXT(RIGHT(A12,1),"[DBNUM2]")&"分")))

TA的精华主题

TA的得分主题

发表于 2008-7-13 14:26 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
二楼说的我不赞同,1010元和1001元需要说“零”,1000.25元我咋就没听说过要说成1千元零二角五分?!

TA的精华主题

TA的得分主题

 楼主| 发表于 2008-7-13 14:34 | 显示全部楼层
QUOTE:
以下是引用name004在2008-7-13 14:20:51的发言:

非常祝贺LDY斑竹的大作,基本查实不出毛病。

我平时还是喜欢用这个版本,方便。(目标格a12),

你不知道,有好多好多的菜鸟,你的函数导出模块就要为难他们,用不成!

=IF(A12=0,"",IF(ABS(A12)>=1,IF(A12=TRUNC(A12),TEXT(TRUNC(A12),"[DBNUM2]")&"圆整",IF(A12*10=TRUNC(A12*10),TEXT(TRUNC(A12),"[DBNUM2]")&"圆"&TEXT(ABS(TRUNC(A12*10)-TRUNC(A12)*10),"[DBNUM2]")&"角整",TEXT(TRUNC(A12),"[DBNUM2]")&"圆"&IF(ABS(A12)-TRUNC(ABS(A12))<0.1,"零",TEXT(ABS(TRUNC(A12*10)-TRUNC(A12)*10),"[DBNUM2]")&"角")&TEXT(FIXED(ABS(A12)*100-INT(ABS(A12)*10)*10,0),"[DBNUM2]")&"分")),IF(ABS(A12)*10-INT(ABS(A12)*10)=0,TEXT(TRUNC(A12*10),"[DBNUM2]")&"角整",IF(ABS(ABS(A12)-TRUNC(ABS(A12)))<0.1,"",TEXT(TRUNC(A12*10),"[DBNUM2]")&"角")&TEXT(RIGHT(A12,1),"[DBNUM2]")&"分")))

这个是不是更好? 抄自EXCEL吧

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

[此贴子已经被作者于2008-7-13 14:43:53编辑过]

[ 本帖最后由 ldy 于 2009-1-25 23:55 编辑 ]

TA的精华主题

TA的得分主题

发表于 2008-7-13 14:35 | 显示全部楼层
人民币的读法和写法是有规范要求的。我记得我专门学过,时间长了,无从查阅。

TA的精华主题

TA的得分主题

 楼主| 发表于 2008-7-13 14:39 | 显示全部楼层
QUOTE:
正确填写票据和结算凭证的基本规定

答:银行、单位和个人填写的各种票据和结算凭证是办理支付结算和现金收付的重要依据,直接关系到支付结算的准确、及时和安全。票据和结算凭证是银行、单位和个人凭以记载帐务的会计凭证,是记载经济业务和明确经济责任的一种书面证明。因此,填写票据和结算凭证,必须做到标准化、规范化,要要素齐全、数字正确、字迹清晰、不错漏、不潦草,防止涂改。

一、 中文大写金额数字应用正楷或行书填写,如壹(壹)、贰(贰)、叁、肆(肆)、伍(伍)、陆(陆)、柒、捌、玖、拾、伯、仟、万(万)、亿、元、角、分、零、整(正)等字样。不得用一、二(两)、三、四、五、六、七、八、九、十、念、毛、另(或0)填写,不得自造简化字。如果金额数字书写中使用繁体字,也应受理。

二、 中文大写金额数字到"元"为止的,在"元"之后,应写"整"(或"正")字,在"角"之后可以不写"整"(或"正")字。数字有"分"的,"分"后面不写"整"(或"正")字。

三、 中文大写金额数字前应标明"人民币"字样,大写金额数字应紧接"人民币"字样填写,不得留有空白。大写金额数字前未印"人民币"字样的,应加填"人民币"三字。在票据和结算凭证大写金额栏内不得预印固定的"仟、佰、拾、万、仟、佰、拾、元、角、?quot;字样。

四、阿拉伯小写金额数字中有"0"时, 中文大写应按照汉语语言规律、金额数字构成和防止涂改的要求进行书写。举例如下:

(一)阿拉伯数字中间有"0"时,中文大写金额要写"零"字。如¥1,409.50,应写成人民币壹仟肆佰零玖元伍角。
(二)阿拉伯数字中间连续有几个"0"时,中文大写金额中间可以只写一个"零"字。如¥6,007.14,应写成人民币陆仟零柒元壹角肆分。
(三)阿拉伯金额数字万位或元位是"0",或者数字中间连续有几个"0",万位、元位也是"0",但千位、角位不是"0"时,中文大写金额中可以只写一个零字,也可以不写"零"字。如¥1,680.32,应写成人民币壹仟陆佰捌拾元零叁角贰分,或者写成人民币壹仟陆佰捌拾元叁角贰分;又如¥107,000.53,应写成人民币壹拾万柒仟元零伍角叁分,或者写成人民币壹拾万零柒仟元伍角叁分。
(四)阿拉伯金额数字角位是"0",而分位不是"0"时,中文大写金额"元"后面应写"零"字。如¥16,409.02,应写成人民币壹万陆仟肆佰零玖元零贰分;又如¥325.04,应写成人民币叁佰贰拾伍元零肆分。

五、阿拉伯小写金额数字前面,均应填写人民币符号"¥"(或草写)。阿拉伯小写金额数字要认真填写,不得连写分辨不清。

六、票据的出票日期必须使用中文大写。为防止变造票据的出票日期,在填写月、日时,月为壹、贰和壹拾的,日为壹至玖和壹拾、贰拾和叁拾的,应在其前加"零"; 日为拾壹至拾玖的,应在其前加"壹"。如1月15日,应写成零壹月壹拾伍日。再如10月20日,应写成零壹拾月零贰拾日。

七、票据出票日期使用小写填写的,银行不予受理。大写日期未按要求规范填写的,银行可予受理,但由此造成损失的,由出票人自行承担。


该文引自中国人民银行会计司编写的最新《企业、银行正确办理支付结算指南》的第114页-第115页。

[此贴子已经被作者于2008-8-9 22:03:56编辑过]

[ 本帖最后由 ldy 于 2009-1-25 23:54 编辑 ]

TA的精华主题

TA的得分主题

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

笑死人了,这地方(exelhome)能人忒多。资源丰富,潜在的能量极其巨大!!!

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

 

要不然,论坛能出N多本书。 ---      ldy

[此贴子已经被ldy于2008-7-13 14:47:41编辑过]

TA的精华主题

TA的得分主题

发表于 2008-7-14 15:12 | 显示全部楼层
QUOTE:
以下是引用ldy在2008-7-13 13:26:52的发言:

居然还可以短一点 200个字符

Function DX200(M)
DX200 = IIf(Abs(M) < 0.005, "", Replace(Replace(Replace(Join(Application.Text(Split(Format(M, " 0. 00")), Split("@ [DBNum2];;0 [>9][dbnum2]圆0角0分;[=0]圆整;[dbnum2]圆零0分")), ""), "零分", "整"), "0圆零", ""), "0圆", ""))
End Function 

ldy版主:

200个字符的好像不行耶:

  4YcHu6MC.rar (7.26 KB, 下载次数: 264)

这个现象很奇怪,在VBA里调用没问题。

在单元格里,自定义函数名不能用 “Dx ”+ 数字 ,把DX200 改为 kk200 就或其他OK了。

“Dx ”+ 数字 还有其他一些也不行,可能是BUG?   ------ldy

[此贴子已经被ldy于2008-7-15 4:52:12编辑过]

TA的精华主题

TA的得分主题

发表于 2008-7-15 15:24 | 显示全部楼层
QUOTE:
以下是引用huchunmei在2008-7-14 15:12:20的发言:

ldy版主:

200个字符的好像不行耶:

 

这个现象很奇怪,在VBA里调用没问题。

在单元格里,自定义函数名不能用 “Dx ”+ 数字 ,把DX200 改为 kk200 就或其他OK了。

“Dx ”+ 数字 还有其他一些也不行,可能是BUG?   ------ldy


类似单元格引用的名称不能作为函数名称或定义为名称的.

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

本版积分规则

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

GMT+8, 2024-11-25 12:27 , Processed in 0.044352 second(s), 13 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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