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

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

特点:1.汉语数字支持大写数字和小写数字,甚至大小写混写的情况。

特点:2.数字支持正数、负数、整数、小数、有或没有计数单位,数字前后有其他文字等情况。

有效的汉字形式:
小写汉字例子:"三百九十四亿〇五百九十九万〇二十二亿四千万〇三千五百九十亿〇四百九十五"
大写汉字例子:"贰佰肆拾陆亿陆仟贰佰陆拾伍万肆仟陆佰捌拾陆亿贰仟陆佰叁拾贰万肆仟陆佰"
混写的例子:"三百九十四亿零五百九十九万零二十伍万肆仟陆佰捌拾陆亿〇贰仟陆佰叁拾贰万"
正数的例子:"正三百零四"
负数的例子:"负三千九百四十"
整数的例子:"三千九百四十"
小数的例子:"三千九百四十点叁肆零伍"
不使用计数单位的例子:"一三七七二五六八九〇三"
汉字数字中,整数部分对〇不敏感:整数部分的〇少写或多写,只要符合读数习惯,不影响返回结果,小数部分〇会影响结果的。

特点:3.返回结果可以是文本,也可以是数值。

'以下是关于格式的举例说明:
FFXieshu (汉语数字)
FFXieshu ("十二亿三千四百五十六万七千八百九十点一二三四五六七八")
返回结果为文本型阿拉伯数字: _"1234567890.12345678"
FFXieshu(汉语数字,2)
FFXieshu("十二亿三千四百五十六万七千八百九十点一二三四五六七八", 2)
返回结果为数值型阿拉伯数字,对于位数太多的数字,会返回近似值。: _1234567890.12346
FFXieshu("十二亿三千四百五十六万七千八百九十点一二三四五六七八", 3)
返回结果为文本型阿拉伯数字,整数部分每3位由逗号隔开,符合国际习惯。 _"1,234,567,890.12345678"
FFXieshu(汉语数字,4)
FFXieshu("十二亿三千四百五十六万七千八百九十点一二三四五六七八", 4)
返回结果为文本型阿拉伯数字,整数部分每4位由空格隔开,方便汉语读数。 _"12 3456 7890.12345678"
将上面的所有小写汉字换成大写汉字,可以得到相同结果。
FFXieshu("壹拾贰亿叁仟肆佰伍拾六万柒仟捌佰玖拾点壹二叁四伍陆七捌", 4)
返回结果如下: _"12 3456 7890.12345678"
如果数字前后有说明性文字,且说明性文字中不含数字关键字,也可以转换, _其中数字关键字包括: _"〇一二三四五六七八九零壹贰叁肆伍陆柒捌玖点十百千万亿拾佰仟萬什"
FFXieshu("张某资产:壹拾贰亿叁仟肆佰伍拾六万柒仟捌佰玖拾点壹二叁四伍陆七捌元", 3)
返回结果如下: _"张某资产:1,234,567,890.12345678元"
注意上面用张某没有用张三是因为“三”是关键字,不能使用,否则会出错。

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

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

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

具体函数如下:

Function FFXieshu(Str1, Optional ByVal Leixing1zhi4 As Integer = 1)'Excel宏代码原创分享,转发请注明来源,作者:王欢为,WX:13772568903。'以下是关于格式的举例说明:'FFXieshu (汉语数字)'FFXieshu ("十二亿三千四百五十六万七千八百九十点一二三四五六七八")'返回结果为文本型阿拉伯数字: _"1234567890.12345678"'FFXieshu(汉语数字,2)'FFXieshu("十二亿三千四百五十六万七千八百九十点一二三四五六七八", 2)'返回结果为数值型阿拉伯数字,对于位数太多的数字,会返回近似值。: _1234567890.12346'FFXieshu("十二亿三千四百五十六万七千八百九十点一二三四五六七八", 3)'返回结果为文本型阿拉伯数字,整数部分每3位由逗号隔开,符合国际习惯。 _"1,234,567,890.12345678"'FFXieshu(汉语数字,4)'FFXieshu("十二亿三千四百五十六万七千八百九十点一二三四五六七八", 4)'返回结果为文本型阿拉伯数字,整数部分每4位由空格隔开,方便汉语读数。 _"12 3456 7890.12345678"'将上面的所有小写汉字换成大写汉字,可以得到相同结果。'FFXieshu("壹拾贰亿叁仟肆佰伍拾六万柒仟捌佰玖拾点壹二叁四伍陆七捌", 4)'返回结果如下: _"12 3456 7890.12345678"'如果数字前后有说明性文字,且说明性文字中不含数字关键字,也可以转换, _其中数字关键字包括: _"〇一二三四五六七八九零壹贰叁肆伍陆柒捌玖点十百千万亿拾佰仟萬什"'FFXieshu("张某资产:壹拾贰亿叁仟肆佰伍拾六万柒仟捌佰玖拾点壹二叁四伍陆七捌元", 3)'返回结果如下: _"张某资产:1,234,567,890.12345678元"'注意上面用张某没有用张三是因为“三”是关键字,不能使用,否则会出错。Dim Str2$, Str3$, Str4$, ii&, jj&, Num1&, Numy&, Stralb1$, Strhan1$, Strq1$, Strh1$, Strjsdw1$, Numjsdw1&'默认返回结果为字符串,此结果为准确表达式,对数字的位数几乎不限。 _如果可选参数Leixing1huo2赋值为2,则返回结果为数值,当数字位数太多时, _返回结果为近似值,甚至有可能无法得到想要的结果。'Str2开始等于Str1,后来剥离左侧非数字部分,剥离右侧非数字部分, _剥离小数部分,用来表示Str1中的整数部分,转换完毕后,为空字符串。'Str3在转换过程中表示Str2整数部分的每一个字符。'Str4表示Str2转换过程中整数部分的每一次转换结果。'Num1表示转换过程中Str2整数部分的每一个数字。'Numy表示转换过程中Str2整数部分每次凑够亿位数的结果。'Stralb1用来存放阿拉伯数字用到的符号。'Strhan1用来存放汉语数字用到的符号。'Strq1用来存放Str1左侧非数字部分文字和正负号。'Strh1用来存放Str1右侧非数字部分文字和小数部分数字。'Strjsdw1用来存放计数单位Str2 = "" & Str1If Str2 = "" ThenFFXieshu = ""Exit FunctionEnd IfStralb1 = "01234567890123456789.十百千万亿十百千万十"Strhan1 = "〇一二三四五六七八九零壹贰叁肆伍陆柒捌玖点十百千万亿拾佰仟萬什"Strq1 = ""Strh1 = ""Strjsdw1 = "十百千万亿"Numjsdw1 = 0ii = 1Do While ii <= Len(Str2)jj = InStr(1, Strhan1, Mid(Str2, ii, 1))If jj > 0 ThenIf InStr(1, Strjsdw1, Mid(Stralb1, InStr(1, Strhan1, Mid(Str2, ii, 1)), 1)) > 0 ThenNumjsdw1 = Numjsdw1 + 1End IfStr2 = Left(Str2, ii - 1) & Mid(Stralb1, InStr(1, Strhan1, Mid(Str2, ii, 1)), 1) & _Right(Str2, Len(Str2) - ii)ii = ii + 1ElseIf ii = 1 ThenIf Mid(Str2, ii, 1) = "负" And InStr(1, Strhan1, Mid(Str2, 2, 1)) > 0 ThenStrq1 = Strq1 & "-"ElseIf Mid(Str2, ii, 1) = "正" And InStr(1, Strhan1, Mid(Str2, 2, 1)) > 0 ThenStrq1 = Strq1 & "+"ElseStrq1 = Strq1 & Mid(Str2, ii, 1)End IfElseStrh1 = Strh1 & Mid(Str2, ii, 1)End IfStr2 = Left(Str2, ii - 1) & Right(Str2, Len(Str2) - ii)End IfLoopIf Numjsdw1 = 0 Thenii = InStr(1, Str2, ".")If ii > 0 ThenStr4 = Left(Str2, ii - 1)Str2 = Right(Str2, Len(Str2) - ii + 1)ElseStr4 = Str2Str2 = ""End IfElseIf Left(Str2, 1) = "十" ThenStr2 = "1" & Str2End IfNumy = 0 '用来累积够亿Num1 = 0 '用来获取每位数Str4 = ""Do While Len(Str2) > 0Str3 = Left(Str2, 1)If Asc(Str3) > Asc("0") And Asc(Str3) - Asc("0") < 10 ThenNum1 = Asc(Str3) - Asc("0")ElseSelect Case Str3Case Is = "十"Numy = Numy + Num1 * 10Num1 = 0Case Is = "百"Numy = Numy + Num1 * 100Num1 = 0Case Is = "千"Numy = Numy + Num1 * 1000Num1 = 0Case Is = "万"Numy = (Numy + Num1) * 10000Num1 = 0Case Is = "亿" '下一行如果增加一个变量可以写的紧凑一些。Str4 = Str4 & Right("" & (Numy + Num1 + 100000000), _Len("" & (Numy + Num1 + 100000000)) - 1)Numy = 0Num1 = 0Case Is = "."Exit DoEnd SelectEnd IfStr2 = Right(Str2, Len(Str2) - 1)LoopIf Numy + Num1 > 0 ThenStr4 = Str4 & Right("" & (Numy + Num1 + 100000000), _Len("" & (Numy + Num1 + 100000000)) - 1)ElseIf Str4 <> "" ThenStr4 = Str4 & "00000000"End IfEnd IfDo While Left(Str4, 1) = "0"Str4 = Right(Str4, Len(Str4) - 1)LoopEnd IfIf Leixing1zhi4 = 3 Thenii = Len(Str4) - 3Do While ii > 0Str4 = Left(Str4, ii) & "," & Right(Str4, Len(Str4) - ii)ii = ii - 3LoopElseIf Leixing1zhi4 = 4 Thenii = Len(Str4) - 4Do While ii > 0Str4 = Left(Str4, ii) & " " & Right(Str4, Len(Str4) - ii)ii = ii - 4LoopEnd IfStr4 = Strq1 & Str4 & Str2 & Strh1If Str4 = "" ThenStr4 = "0"End IfIf Leixing1zhi4 = 2 ThenFFXieshu = Val(Str4)ElseFFXieshu = Str4End If
End Function

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

  1. 如何将汉语数字转换成阿拉伯数字!

    其实这个题目本身都还有点问题.汉语数字的表达方式何止一两种,而且还有很多不规范的称呼.所以,转换起来也是比较麻烦的.并且由于每个人的叫法不同,因此也不容易判定用户的输入是否合符常理和规范.这就只能靠大 ...

  2. 中文数字转换成阿拉伯数字(一千二百三十四万五千六百七十八-->12345678)

    昨天老大问我又没有写过中文数字转换成阿拉伯数字,我说没有,我说那应该简单啊,就是将中文对应的数字换成阿拉伯数字就好了啊,比如一就换成1,二就换成2-十换成10.可是那么问题来了- 一十二呢-不能是11 ...

  3. 如何把excel里面中文小写数字转换成阿拉伯数字

    今天跟大家分享一下如何把excel里面中文小写数字转换成阿拉伯数字 1.打开要处理的Excel文件 2.将E列数据复制一份到F列中并选中 3.点击下图选项(Excel工具箱,百度即可了解详细下载安装信 ...

  4. python将英文单词表示的数字转换成阿拉伯数字的代码

    下边内容内容是关于python将英文单词表示的数字转换成阿拉伯数字的内容. import re _known = { 'zero': 0, 'one': 1, 'two': 2, 'three': 3 ...

  5. python123数字转换_Python将汉字数字转换成阿拉伯数字的方法

    用Python将汉字数字转换成阿拉伯数字的方法.汉字数字就是我们的大写数字:零.壹.贰.叁.肆.伍.陆.柒.捌.玖.拾,这种只有在会计人员才会常用的数字. Python把用汉字表示的数字转换为阿拉伯数 ...

  6. Python将汉字数字转换成阿拉伯数字的方法

    Python将汉字数字转换成阿拉伯数字的方法 - 玩蛇网 http://www.iplaypy.com/code/base/b2600.html 用Python语言来为不同数字之间做转换之前就有介绍过 ...

  7. 把英文转换成数字python_python实现将英文单词表示的数字转换成阿拉伯数字的方法...

    本文实例讲述了python实现将英文单词表示的数字转换成阿拉伯数字的方法.分享给大家供大家参考.具体实现方法如下: import re _known = { 'zero': 0, 'one': 1, ...

  8. 面试题06:一串英文数字转换成阿拉伯数字

    已知:zero,one,two,three,four,five,six,seven,eight,nine分别对应0,1,2,3,4,5,6,7,8,9,对每一段含有这几种字符串的字符串进行转换,如: ...

  9. 中文转换成阿拉伯数字

    原文发布时间为:2010-07-15 -- 来源于本人的百度文章 [由搬家工具导入] #region 中文转换成阿拉伯数字 /// <summary> /// 中文转换成阿拉伯数字 /// ...

  10. 中文格式_财务必会Excel技巧,将数字转换成中文的5种方式

    你还在纠结如何把数字转换成中文大小写吗?下面和大家一起来学习把数字转换成中文的5种方法. 方式一:NUMBERSTRING函数 语法=NUMBERSTRING(数值,选项) 数值:被转换为中文字符串的 ...

最新文章

  1. php html自动打开新页面大小,HTML_html 用超链接打开新窗口其可控制窗口属性,1、html超链接打开的窗口大小 - phpStudy...
  2. mysql中出现 xC4 xDD_mysql数据库调优总结(二)
  3. 机器学习经典书籍小结
  4. java技术秘籍 转摘
  5. cnpm安装webpack_【6000字】从0到1,配置webpack
  6. Git学代码之学会运行别人的代码
  7. 巨头不想再将“命脉”交给微信、支付宝
  8. JavaScript的注释
  9. 微信小程序的基础实现
  10. 功率和能量换算公式、如何换算,W和J如何转换,power和energy转换
  11. ping网络通不通、ttl讲解、查询ip归属地、tracert路由分析诊断
  12. 人工智能与大数据就业前景_大数据与人工智能方面专业未来前途
  13. 批量手机号码状态检测【已失效】
  14. 华为云服务器型号解析——通用计算型
  15. 继承----有关虚函数和虚拟继承
  16. Prophet文档中文翻译--multiplicative_seasonality
  17. 刘金琨智能控制(第2版)仿真实例代码整理
  18. 【web项目】前端生日礼物--主页面篇
  19. 非线性控制1.4——图论及拉普拉斯矩阵
  20. 倒计时抢(数据分析)

热门文章

  1. 中芯国际的喜与忧:扣非后盈利后将脱帽,管理层分歧、有进有退
  2. mac怎么无线打印机连接到服务器,Mac如何连接打印机-Mac连接打印机教程 - 河东软件园...
  3. FPGA学习.7——DDS信号发生器
  4. html 静止横屏_移动端开发-禁止横屏
  5. 解决问题:Parameter 0 of method modifyRequestBodyGatewayFilterFactory inorg.springframework.cloud.gateway
  6. 【python】使用in判断元素是否在列表(list)中,如何提升搜索效率?
  7. android7.0 投屏,流水断崖安卓投屏
  8. 第一行输入一个正整数N,随后的N行各输入一个人的姓名和年龄,中间用空格分隔(形如 “Tom 18“),将字符串转为形如 {“name“:“Tom“,“age“:18} 的字典,按顺序加入到列表中,得到
  9. 如何0代码快速搭建教育平台,实现线上直播教学【内附源码/Demo】
  10. 自制简易浏览器(Python)