ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[分享] 【12-24 Eve版大更新】大一统!空前强大的中文大小写-财务金额-阿拉伯数字互转函数

[复制链接]

TA的精华主题

TA的得分主题

发表于 2019-12-17 10:43 | 显示全部楼层 |阅读模式
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 月关 于 2019-12-25 10:20 编辑

两个原因促使我昨天下午沉下心来仔仔细细重新打磨了一番,还是有点效果的,所以,
如果有在使用此函数的同学,强烈建议更新到此版。
2019-12-24 更新:
① 调整內部逻辑,真正实现5种状态任意转换(一步到位,不需要嵌套);
② 引入第三参数,增加易失性开关(默认为关,我本人觉得一打开就重算还是有点讨厌的);
③ 大幅精简代码,删除部分冗余判断及废代码;
④ 改为向后兼容性结构,即使不懂代码的人,也可以通过复制两句简单的代码瞬间实现次方级扩容;
—— 为什么第③条说精简而不是优化呢?因为确实没有优化,在某方面来说,我甚至觉得有点小倒退。③④条解释几句:这个函数最开始的设计逻辑就是通过查找关键字(单位)将源数据切割为左右(L|F)"两"部分,左右两侧分别递归最后得出结果。所以,从理论上来讲,十位以后皆可通过层层递归来实现(十位有点特殊,需要单独写)。有看过上一版代码的人会发现,千位以后所有的小函数都是一模一样的,变化的仅仅是单位而已。至于为什么当时百位和千位不直接递归,是因为我觉得这两个变化比较少,直接就能写出来,为了效率起见就没再使用不必要的递归循环。
这次为了向后兼容及精炼代码,加了一个参数将单位传递进来,将原来的一堆小拖油瓶整合为一个函数,使代码看起来整齐划一,不懂代码的人要扩容的话不至于被那一堆小拖油瓶所吓住。所谓鱼和熊掌不可兼得,是孟子他老人家非这么说的,有问题你们得找他老人家理论。(扩容的地方代码中有提示。当然了,如果勤快点百位/千位还是可以在一个函数中单独写的,十位就是一个很好的例子,这个这个这个……还是继续往下说吧……);
⑤ 改写二-3、二-5参数的实现方式;原来的代码是通过循环替换来实现的,通过观察,使点小手段套路了一下内置函数,省了俩循环 ^)^
⑥ 进一步增强了兼容性。(实际上只是添加了源数据中有空格的处理,但因为结构的调整,兼容性确实是增强了不少  ^)^)
如果逻辑上不反人类,应该是没有什么不能转换的了吧?
微信截图_20191225090555.png
微信截图_20191225090611.png

说一下两个原因:第一个我前面说过这原本只是一个打发时间的作品,但是意料之外的得到了老师们不挑剔的鼓励,让我有点受宠若惊;再一个就是,接到[上][级]指示,让我抓紧学一下3D Max以“辅助”一下她的设计工作,所以,可能得有一段时间来这里没那么勤了,所以尽自己目前的能力尽可能的将这个函数完善了一下。昨天晚上有事没来得及发,正好今天圣诞节权当是个圣诞小礼物了。

NumSwitch数字转换函数Eve版.rar (25.18 KB, 下载次数: 131)


一、转换类型:中文大小写→财务数字/金额→阿拉伯数字 三者之间相互转换
1.png

二、支持位数:我(原来)知道最大的单位是兆,目前的代码支持到千兆(999999999999万亿),可以自主扩容(单位转换参照 6# zopey 老师提供的资料)
zc.png

三、容错:
rc.png
如上图。
那么,拾万零两佰3拾圆五角4分  → 这种可不可以呢?
实际上是可以的,相互转化么,函数自身嵌套一下即可(附件中有示例)。
再就是,我以前一直以为千亿之后应该是万亿才对,然后万万亿才是兆…… 写这个函数的时候才知道千亿之后就是兆了。
但是依稀记得好像电视新闻联播上经常听到万亿的说法,也对万亿(转阿拉伯数字)做了兼容。

四、函数参数:NumSwitch(待转换值,1,2,3,4,5)
1  默认值可省略,所有中文/财务数字转阿拉伯数字;
2  转财务金额(例:壹元贰角叁分肆厘)
3  转财务数字(例:壹贰叁肆)
4  转中文数字一(例:一千二百三十四)
5  转中文数字二(例:一二三四)

五、为什么写这个函数:因为巧合。
简单点说,我本来不喜欢自定义函数,因为一道竞赛题硬逼着使用自定义函数后来别别扭扭的学会了,然后昨天看到一个帖子寻求帮助中文大写转数字然后还没看完公司突然断网了,这就是最重要的原因,因为断网了!
插一句,学完自定义函数我也觉得不过如此,直到写这个自定义函数的过程中,我才体会到它的灵活和强大,也愈发对自己以前的浅薄和无知感到无地自容……
其实昨天上午就写好了,然后,下午网络还是没有修好。
然后还得找点事啊,干脆把财务数字也一并转了吧,于是推倒重来,用正则重写。中间被人喊出去好几趟,烦!想着,能不能不重写,还用上午的代码?于是聪明绝顶的我想到了先把财务数字转化成中文大写不就行了么?(啧啧~聪明如我……)
这就是为什么代码看起来有点头重脚轻的原因了……
改好了,调试完了,依旧没网,依旧下班还早,再干脆点,把微软的阿拉伯数字转中文的功能一并整合进来!
破天荒我第一次知道原来微软阿拉伯转中文的函数是不支持小数点的,于是简单处理了一下,算是狗尾续貂吧。

六、最后,我自己工作中几乎不跟上面那些数字打交道,所以是按照自己的理解写的,自己完全不可能发现错误,分享给用得到的人,若有问题请反馈。


2019-12-18更新:支持单纯的转为财务数字(非金额);
                          复制了一句代码 兼容“万亿”
2.png



2019-12-19更新:
1.添加易失性,动态捕获源数据变化;
2.增加了对"陸"、"萬"、"億"的兼容;

我想了下,决定还是不再增加对数字混排的直接支持,如我上面例子中说到的:拾万零两佰3拾圆五角4分,这是历史的倒退。
一百五(150)、两千二(2200)这种都可以理解,因为中国人一直都这么说。
——虽然,要兼容的话丝毫不会增加额外的代码,只要在兼容数组里添上即可。

另外,看了后面诸多老师的前作,比我这个都要简洁不少。很明显的是,他们都是用理科的思维写的,我这个一看就是文科的思维。
对文科的学生来讲,类似 10^4等等这类的东东应用只能是望洋兴叹了。还好的是,我这个兼容性还算不错。
再就是,这个受众也小,而且一般用到财务数字的了素质都不会太差,所以如果没有错误的话,后面就不再更新了。












评分

9

查看全部评分

TA的精华主题

TA的得分主题

发表于 2019-12-17 12:31 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2019-12-17 12:42 | 显示全部楼层
本帖最后由 1055751654 于 2019-12-17 12:57 编辑

谢谢楼主分享,几年几月的转换这里面没有呀,哈哈,另一个帖子没出来

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-12-17 13:04 | 显示全部楼层
1055751654 发表于 2019-12-17 12:42
谢谢楼主分享,几年几月的转换这里面没有呀,哈哈,另一个帖子没出来

把“几”输入进来不就有了?那个题的关键不是年和月,而是它们前面的数字

TA的精华主题

TA的得分主题

发表于 2019-12-17 13:10 | 显示全部楼层
月关 发表于 2019-12-17 13:04
把“几”输入进来不就有了?那个题的关键不是年和月,而是它们前面的数字

嗯嗯,试了下,可以
QQ截图20191217130935.png

TA的精华主题

TA的得分主题

发表于 2019-12-17 20:48 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
整数 单位 *10000,小数 单位 /1000

658.jpg

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-12-18 14:18 | 显示全部楼层
zopey 发表于 2019-12-17 20:48
整数 单位 *10000,小数 单位 /1000

这个………… 学生驽钝,老师是在帮学生扩充数量单位的知识么?
这份单位表平生第一次见识了

另外,我想了想,我这个其实支持无限大

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-12-18 14:30 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
zopey 发表于 2019-12-17 20:48
整数 单位 *10000,小数 单位 /1000



微信截图_20191218143038.png

TA的精华主题

TA的得分主题

发表于 2019-12-18 14:46 | 显示全部楼层
zopey 发表于 2019-12-17 20:48
整数 单位 *10000,小数 单位 /1000

长知识了,关注一下。

TA的精华主题

TA的得分主题

发表于 2019-12-18 14:54 | 显示全部楼层
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

关闭

最新热点上一条 /1 下一条

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

GMT+8, 2024-4-24 09:59 , Processed in 0.053001 second(s), 17 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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