ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[讨论] 中文数字大写自定义函数

[复制链接]

TA的精华主题

TA的得分主题

发表于 2018-3-28 12:42 | 显示全部楼层 |阅读模式
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 loquat 于 2018-3-31 00:51 编辑

本帖缘起413191246se的帖子:
http://club.excelhome.net/thread-1220654-1-1.html
根据其思路改成了自定义函数,做了一些兼容处理
具体看代码注释
破除审核第1招,发码只发图
大牛一笑而过,新手请自己敲代码测试
欢迎大家提问题
1.png

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-3-28 12:43 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2018-3-28 13:32 | 显示全部楼层
这个问题还是参考经典吧
Function RMBDX(M)
y = Int(Round(100 * Abs(M)) / 100)
j = Round(100 * Abs(M) + 0.00001) - y * 100
f = Round((j / 10 - Int(j / 10)) * 10)
A = IIf(y < 1, "", Application.Text(y, "[DBNum2]") & "元")
b = IIf(j > 9.4, Application.Text(Int(j / 10), "[DBNum2]") & "角", IIf(y < 1, "", IIf(f > 0.4, "零", "")))
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

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-3-28 17:48 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
levey 发表于 2018-3-28 13:32
这个问题还是参考经典吧
Function RMBDX(M)
y = Int(Round(100 * Abs(M)) / 100)

不错,这个是ldy老师的作品吧?

这个有几点想说一下
1、这个函数的使用依赖Excel
2、角整,角后面的整可以写也可以不写
3、中间有一些位置的“零”,有些人说要加上,有些人说不要,我也没有找到相关规范

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-3-28 22:12 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
初步测了一下,问题多多啊,先记录,回头再修正。。。
1、要处理诸多兼容问题,例如不是数字的情况
    IsNumeric这货的坑又不是一般的多,double超过一定大小之后,会强制变成科学计数法
2、要能完全按标准规则来,规则参考http://www.atool.org/rmbdx.php
     有一点,之前我一直有误区,把一亿亿当成是兆,或者像ldy那个函数里一样把一万亿当做兆,好像没有参考依据,在金额里好像并没有兆这个单位

TA的精华主题

TA的得分主题

发表于 2018-3-29 00:48 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
* 祝贺 loquat 朋友、老师 又出新成果!辛苦了!
* 函数到目前为止,我还不会写一个。用 Sub 也挺好的。
* 最近我又更新了几个自动排版的宏,特别是 Range 对象的应用,感觉很好;多用 Range,少用 Selection/Select;现在比较注重优化、简化。
* 又跟 杜先生 学了一些简写手法,现在很不喜欢长篇大论式的代码,喜欢模块式短代码。

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-3-29 18:58 | 显示全部楼层
已经修复了,欢迎验证。。。

TA的精华主题

TA的得分主题

发表于 2018-3-29 23:35 | 显示全部楼层
loquat 朋友、老师:函数一点儿也不懂,根本不会用,无法验证。另外,函数到底有什么用?能否给我们低手普及一下。

TA的精华主题

TA的得分主题

发表于 2018-3-30 06:51 来自手机 | 显示全部楼层
413191246se 发表于 2018-3-29 23:35
loquat 朋友、老师:函数一点儿也不懂,根本不会用,无法验证。另外,函数到底有什么用?能否给我们低手普 ...

函数可以防止出现大量重复的代码。
如一百个sub过程,其中80%都是相同的部分,总不至于重复100次吧!所以可以将相同部分用函数表示。这样100个sub相同部分只需要一句call 函数即可。
函数开头又可以分为sub开头和function开头:
两者区别就在于是否需要返回参数。如计算两个数的和,提供两个参数,希望返回结果时,就是用function,function 求和(a,b)这样。若是写成sub 求和(a,b)则无法返回值。参数也是可选择的。
基本就是这两点
一个是减少重复代码量,一个是返回值,传递给其他sub。

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-3-30 10:20 | 显示全部楼层
zhanglei1371 发表于 2018-3-30 06:51
函数可以防止出现大量重复的代码。
如一百个sub过程,其中80%都是相同的部分,总不至于重复100次吧!所 ...

function和sub其实在底层是一样的
sub类似c的void func
function类似c的int func
如果sub想返回值,只需要传址就可以了,而且使用sub传址来返回结果效率更高,且返回值数量不受限制
不过一般用户,很少用sub来返回值

回楼上413191246se兄弟,自定义函数和自定义过程是程序设计模块化的必备基础
把使用率较高的通用代码段,分割成小模块,在各个位置分别拔插
使得代码方便维护,更具可读性
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-5-28 01:22 , Processed in 0.035656 second(s), 13 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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