'Excel宏代码原创分享,转发请注明来源,作者:王欢为,WX:13772568903。

功能:将阿拉伯数字转换成汉语数字。

特点:1.可以转换成小写汉字和大写汉字两种常用表达方式中的一种。效果如下:

FFDushu(阿拉伯数字)
'返回“〇一二三四五六七八九十百千万亿”这样的数字
FFDushu(阿拉伯数字,2)
'返回“零壹贰叁肆伍陆柒捌玖拾佰仟万亿”这样的数字

特点:2.阿拉伯数字可以是整数或小数,可以是正数或负数,同一个数字中间也可以用逗号或空格分段。

特点:3.输入的阿拉伯数字可以是字符串,也可以是手写小数形式,不支持其它数学表达式,不支持科学记数法。

有效的阿拉伯数字形式如下:
整数例子:1572
小数例子:38.45
正数例子:2453
负数例子:-592.56
字符串形式的阿拉伯数字:"1526462981.264"
空格或逗号分段的例子:"369 25634,56 597569 452,48218.356 695"
一个阿拉伯数字数字前后均有说明性汉字的例子:张三净资产-894.50元

特点:4.输入字符串形式的字符串,长度几乎无限(不是真的无限)。

缺点:1.此函数一次只能转换一个数字,不过在Excel表格中使用的话,够用了。

缺点:2.此函数运行效率不一定高,自己用是够用了,主要是分享编程思想。

Function FFDushu(Str1$, Optional ByVal Leixing1huo2 As Integer = 1)Dim Str2$, Str3$, Str4$, Str5$, Jieguo1$, Shuji1%, Stralb1$, _Strq1$, Strh1$, Strhan1$, Strhan2$, Strquling1$, Strquling2$, _Strfenduan1$, ii%, Weizhi1%'Excel宏代码原创分享,转发请注明来源,作者:王欢为,WX:13772568903。'默认返回结果为小写汉字表达式,如果可选参数Leixing1huo2赋值为2,则返回结果为大写汉字表达式。'Str2开始等于Str1,后来剥离左侧非数字部分,剥离右侧非数字部分, _剥离小数部分,用来表示Str1中的整数部分,转换完毕后,为空字符串。'Str3在转换过程中用来重复提取Str2后四位。'Str4表示Str2转换过程中Str3的转换结果。'Str5用来存放Str1的小数部分。'Jieguo1用来存放转换结果的数值部分。'Shuji1用来标记所选取的Str3在原来Str1中的数级,0是个级、1是万级、2是亿级。'Num1表示转换过程中Str2整数部分的每一个数字。'Numy表示转换过程中Str2整数部分每次凑够亿位数的结果。'Stralb1用来存放阿拉伯数字用到的符号。'Strhan1用来存放汉语数字用到的符号。'Strq1用来存放Str1左侧非数字部分文字和正负号。'Strh1用来存放Str1右侧非数字部分文字和小数部分数字。'Strquling1用来存放一些特殊字段,该字段用来删除多于的〇, _使用该字段是为了简化两种转换的代码总量。'Strhan2和Strquling2分别是Strhan1和Strquling1的大写表达形式,备用。'Strfenduan1用来标记可能出现的数字之间的分段符号。Stralb1 = "0123456789"Strhan1 = "〇一二三四五六七八九"Strhan2 = "零壹贰叁肆伍陆柒捌玖"Strquling1 = "〇千〇百〇十〇〇"Strquling2 = "零仟零佰零拾零零"Strfenduan1 = ", , "If Leixing1huo2 = 2 ThenStrhan1 = Strhan2Strquling1 = Strquling2End IfStr2 = "" & Str1If Str2 = "" ThenFFDushu = ""Exit FunctionEnd If'判断数字前面是否有内容Strq1 = ""Do While InStr(1, Stralb1, Left(Str2, 1)) < 1If Left(Str2, 1) = "-" And InStr(1, Stralb1, Mid(Str2, 2, 1)) > 0 ThenStrq1 = Strq1 & "负" ''Strq1用来存放结果的正负号以及数字前的其他内容。ElseIf Left(Str2, 1) = "+" And InStr(1, Stralb1, Mid(Str2, 2, 1)) > 0 ThenStrq1 = Strq1 & "正" ''Strq1用来存放结果的正负号以及数字前的其他内容。ElseStrq1 = Strq1 & Left(Str2, 1)End IfStr2 = Right(Str2, Len(Str2) - 1) 'Str2暂时存放绝对值If Str2 = "" ThenFFDushu = Strq1Exit FunctionEnd IfLoop'判断数字后面是否有内容Strh1 = ""Do While InStr(1, Stralb1, Right(Str2, 1)) < 1Strh1 = Strh1 & Right(Str2, 1)Str2 = Left(Str2, Len(Str2) - 1) 'Str2暂时存放绝对值Loop'去除Str2中间的分段符For ii = 1 To Len(Strfenduan1)Weizhi1 = InStr(Str2, Mid(Strfenduan1, ii, 1))Do While Weizhi1 > 0Str2 = Left(Str2, Weizhi1 - 1) & Right(Str2, Len(Str2) - Weizhi1)Weizhi1 = InStr(Str2, Mid(Strfenduan1, ii, 1))LoopNext'去除Str2开头的0Do While Left(Str2, 1) = "0"Str2 = Right(Str2, Len(Str2) - 1)LoopShuji1 = 0 'Shuji1用来标记数级,0是个级、1是万级、2是亿级。Jieguo1 = "" 'Jieguo1用来存放结果的数值部分。'如果不是整数,拆分这个数字的整数部分和小数部分Str5 = "" 'Str5用来存放小数部分Weizhi1 = InStr(Str2, ".")If Weizhi1 > 0 ThenStr5 = Right(Str2, Len(Str2) - Weizhi1) 'Str5用来存放小数部分Str2 = Left(Str2, Weizhi1 - 1) 'Str2用来存放整数部分End IfDo While Len(Str2) > 0'每次读取后Str2四位数字到Str3,Str2剔除后四位If Len(Str2) <= 4 ThenStr3 = Str2Str2 = ""ElseStr3 = Right(Str2, 4) 'Str3用来存放Str2的后四位Str2 = Left(Str2, Len(Str2) - 4) '剔除Str2的后四位End If'按照Str3的长度插入“千,百,十”Str4 = "" 'Str4用来临时存放Str3的读法If Len(Str3) = 4 Then'下面用子函数会更紧凑。考虑到读数有两种表达式,所以写复杂了。Str4 = Mid(Strhan1, InStr(1, Stralb1, (Mid(Str3, 1, 1))), 1) & Mid(Strquling1, 2, 1) & _Mid(Strhan1, InStr(1, Stralb1, (Mid(Str3, 2, 1))), 1) & Mid(Strquling1, 4, 1) & _Mid(Strhan1, InStr(1, Stralb1, (Mid(Str3, 3, 1))), 1) & Mid(Strquling1, 6, 1) & _Mid(Strhan1, InStr(1, Stralb1, (Mid(Str3, 4, 1))), 1) & Str4ElseIf Len(Str3) = 3 ThenStr4 = Mid(Strhan1, InStr(1, Stralb1, (Mid(Str3, 1, 1))), 1) & Mid(Strquling1, 4, 1) & _Mid(Strhan1, InStr(1, Stralb1, (Mid(Str3, 2, 1))), 1) & Mid(Strquling1, 6, 1) & _Mid(Strhan1, InStr(1, Stralb1, (Mid(Str3, 3, 1))), 1) & Str4ElseIf Len(Str3) = 2 ThenStr4 = Mid(Strhan1, InStr(1, Stralb1, (Mid(Str3, 1, 1))), 1) & Mid(Strquling1, 6, 1) & _Mid(Strhan1, InStr(1, Stralb1, (Mid(Str3, 2, 1))), 1) & Str4ElseIf Len(Str3) = 1 ThenStr4 = Mid(Strhan1, InStr(1, Stralb1, (Mid(Str3, 1, 1))), 1) & Str4End If'去除中间多余的〇'Str4 = FFQuling(Str4)For ii = 1 To Len(Strquling1) Step 2Do While InStr(1, Str4, Mid(Strquling1, ii, 2)) > 0Str4 = Left(Str4, InStr(1, Str4, Mid(Strquling1, ii, 2))) & _Right(Str4, Len(Str4) - InStr(1, Str4, Mid(Strquling1, ii, 2)) - 1)LoopNext'去除末尾的〇Do While Right(Str4, 1) = Left(Strhan1, 1)Str4 = Left(Str4, Len(Str4) - 1)Loop'根据Shuji1的情况插入“万,亿”If Shuji1 = 0 ThenShuji1 = 1Jieguo1 = Str4 & Jieguo1ElseIf Str4 = "" ThenIf Shuji1 = 1 ThenJieguo1 = Left(Strhan1, 1) & Jieguo1ElseJieguo1 = Mid("万亿", Shuji1, 1) & Jieguo1End IfElseJieguo1 = Str4 & Mid("万亿", Shuji1, 1) & Jieguo1End IfShuji1 = 3 - Shuji1End If'去除中间多余的〇'Str4 = FFQuling(Jieguo1)For ii = 1 To Len(Strquling1) Step 2Do While InStr(1, Jieguo1, Mid(Strquling1, ii, 2)) > 0Jieguo1 = Left(Jieguo1, InStr(1, Jieguo1, Mid(Strquling1, ii, 2))) & _Right(Jieguo1, Len(Jieguo1) - InStr(1, Jieguo1, Mid(Strquling1, ii, 2)) - 1)LoopNextStr4 = Jieguo1Loop'去除末尾的〇Do While Right(Jieguo1, 1) = Left(Strhan1, 1)Jieguo1 = Left(Jieguo1, Len(Jieguo1) - 1)LoopIf Jieguo1 = "" ThenJieguo1 = Left(Strhan1, 1)End IfIf Left(Jieguo1, 2) = "一十" ThenJieguo1 = Right(Jieguo1, Len(Jieguo1) - 1)End IfIf Len(Str5) > 0 Then '判断是不是有小数部分Jieguo1 = Jieguo1 & "点"For ii = 1 To Len(Str5)Jieguo1 = Jieguo1 & Mid(Strhan1, InStr(1, Stralb1, (Mid(Str5, ii, 1))), 1)NextEnd IfFFDushu = Strq1 & Jieguo1 & Strh1
End Function

阿拉伯数字转换成汉语数字相关推荐

  1. python练习题--阿拉伯数字转换成中文数字

    python练习题–阿拉伯数字转换成中文数字 用户输入任意阿拉伯数字,如[123456],把它转换成中文数字[壹拾贰万叁仟肆佰伍拾陆] 以前面试时面试官问的问题,当时没能答出来,今天初步解决,把它记录 ...

  2. win7计算机名改成大写,处置win7系统将word中的阿拉伯数字转换成大写数字的还原方案...

    随着电脑的使用率越来越高,我们有时候可能会遇到对win7系统将word中的阿拉伯数字转换成大写数字进行设置,如果我们需要对win7系统将word中的阿拉伯数字转换成大写数字进行设置时,要怎么处理win ...

  3. 《读九章算术学Python》如何用Python编程实现阿拉伯数字转换成汉字数字?

    第6章 数量转换 Python编程基础 字典 字符串操作 if-elif-else语句 递归 前面的输入和输出都是阿拉伯数字,这一章我们来看一下如何实现阿拉伯数字和汉字数字之间的相互转换. 6.1 阿 ...

  4. 阿拉伯数字转换成大写数字

    本文转载自http://blog.csdn.net/yeah86/article/details/3456706 之前在CSDN论坛里,看有人Show了一些把中文大写转换成阿拉伯数字的程序代码,自己也 ...

  5. 将阿拉伯数字转换成汉字数字(小写)

    将之前找到的代码加以完善和修改,可以支持亿级别的数字转换,有更好的可以给些建议,谢谢 public static String ToCH(int intInput) {String si = Stri ...

  6. 【工具封装】Python 实现将阿拉伯数字 === 转换成中文大写数字

    一.序言:   工具封装第四弹,阿拉伯数字 ===> 转换成 ===> 中文大写数字,喜欢就赶紧收藏+点赞+关注吧 !!! ---- Nick.Peng 二.实现代码如下: #!/usr/ ...

  7. 将数字转换成中文数字

    将阿拉伯数字转换成中文数字,大家可以看我的测试数据,应该没有BUG. /** * 将数字转换成中文数字 * @author Prosper * */ public class IntToCN { pu ...

  8. js将阿拉伯数字转换成中文的大写数字

    js将阿拉伯数字转换成中文的大写数字 export const numberToChinese = (num) => {var AA = new Array("零", &qu ...

  9. php大写数字转换,PHP将阿拉伯数字转换成汉字大写支持小数点

    PHP将带有小数点的一串阿拉伯数字转换成汉字大写形式,就像转换人民币大写类似.加入了小数点的处理,只要是一连串的数字,不管是否带有小数点,通过本函数都能完美转换. PHP将阿拉伯数字转换成汉字大写支持 ...

  10. 将一组阿拉伯数字转换成中文大写数字

    题目大概:  将一组阿拉伯数字转换成中文大写数字  52306 ==> 伍万贰千叁百零陆 我实现了将文件中的一组数字(每行为一个数)  形如: Java代码   25364 466932300 ...

最新文章

  1. 中兴今年的毕业生面试题,给大家参考参考
  2. [Bat]UNC路径不支持的2种解决方法
  3. 中国研究的超级系统计算机,[公告]超级系统恢复--学习电脑 Book 3 V1.1
  4. nginx rtmp 编码_基于Nginx的媒体服务器技术
  5. VTK:PolyData之ReverseSense
  6. 《走遍中国》珍藏版(十)
  7. 国内远程医疗市场快速增长
  8. Markdown中插入图片及图注
  9. 李彦宏再立 Flag:人工智能将让人类不再需要手机!
  10. 安装CentOS的注意事项
  11. 理解ASP.NET MVC中的ActionResult
  12. 推荐几个e书下载地址
  13. itools苹果录屏大师_录屏可以有声音,发照片可以免流量,计算器输错可回删
  14. Python四六级考试,快来测试一下自己的编程水平吧
  15. hdrp_HDRP:在2019.3版中无法预览
  16. 我的世界boat运行库JAVA10_boat运行库导入下载
  17. 【Audio】声临其境——杜比音效介绍
  18. 后台权限管理层级分配两个必要的递归函数
  19. html图片靠右浮动 文字左侧环绕,CSS 模拟float实现center文字左右环绕图片的效果...
  20. SYS_Oracle Erp的基本知识点(概念)

热门文章

  1. win10开机桌面假死鼠标能动怎么办
  2. 隐藏在浏览器背后的“黑手”
  3. Excel绘制折线图--更新中。。。
  4. Windows L2TP设置 2022-06-01
  5. 移动端h5页面监听手机横屏
  6. linux vim编辑矩阵乘,VIM使用系列:二进制文件编辑
  7. 500个爆文标题_爆文标题创作思路——来自100个10W+的标题的总结
  8. 前端开发可视化编辑神器mxDev又更新了
  9. 如何使用PDF编辑软件给PDF删除页码
  10. unity 制作小汽车跑起来