一开始,我想当然地以为,Excel这么强大的工具,肯定有个内置的函数,像=LOWER()
把文本变小写字母那样,直接 =NumberValue(A1)
嘭一下就给我变回来了。结果呢?摸索半天,查遍帮助文档,压根没有!它有的是把数字变大写格式的,像那个自定义格式里的[DBNum2]G/通用格式
,你输入个123,它能给你显示成“一百二十三”。但反过来?把“一百二十三”变回“123”,想都别想,那完全是两码事儿,一个是数字的显示方式,一个是把一串汉字识别成数值。
那怎么办?总不能对着几百上千行的大写数字,一行一行地手工输入吧?那不得把人逼疯?而且手输极容易出错,少输个零,多输个位,财务数据出了岔子,谁担得起?
于是,我就开始琢磨土办法。最笨的,就是用查找替换。把“壹”换成“1”,把“贰”换成“2”,以此类推。但这招儿,对付个位数还凑合。遇到“拾”、“佰”、“仟”、“万”、“亿”这些单位,瞬间抓瞎。“拾”有时候代表乘以10,有时候是十几的开头(如“拾伍”)。“零”更烦人,在中间表示空位,在末尾可能表示小数位。光靠简单的替换,根本玩不转。它不懂得数字的逻辑,只能做文字的机械替换。
折腾来折腾去,最终发现,解决Excel数字大写转换小写,最靠谱、最彻底的办法,还是得请出VBA,也就是写个用户自定义函数(User Defined Function,简称UDF)。这个听起来有点“高大上”的东西,其实就是一段小程序,你告诉Excel怎么做,它就照着做。
第一次接触VBA是在一个焦头烂额的下午,对着一份全是几万几十万大写数字的扫描件整理数据,简直绝望。在网上狂搜,终于找到了救命稻草——一段VBA代码。那感觉,就像在沙漠里找到了绿洲。
怎么弄呢?其实不难。打开你的Excel,按下Alt + F11
,这会弹出一个叫VBA编辑器的窗口。别被里面的各种菜单按钮吓到,找到左边那个项目窗口,在你的工作簿名称上点右键,选择“插入” -> “模块”。好了,就像给Excel装了一个空白的大脑扩展槽。然后,把网上找到的或者自己写的那个用于数字大写转换小写的VBA代码,一股脑儿复制粘贴进去。保存。注意保存时,如果你的Excel是比较新的版本,得选择“启用宏的工作簿(.xlsm)”格式,不然那个代码就白写了。
代码嘛,大体思路是这样的:它会定义一个新函数,比如叫 DaXieToXiaoXie
。你把那个大写数字(通常是以文本形式存在的)作为参数喂给它,比如放在A1单元格,你就在B1单元格输入 =DaXieToXiaoXie(A1)
。这个函数内部的代码就会开始“阅读”A1里的汉字。它得先识别“人民币”、“元”、“角”、“分”这些词,把它们剥离掉或者作为单位分隔符。然后,它会从高位到低位,或者反过来,一个字一个字地解析:“壹”是1,“贰”是2,“拾”是乘以10,“佰”乘以100…… 它还要聪明地处理“零”,比如“壹仟零贰拾”,它知道那个零是占位的;“壹仟零贰拾元整”,后面的“整”可以忽略;“壹拾元零伍分”,它得知道小数点后面跟着“零伍”。甚至一些中文数字的特殊习惯,“两千”有时候会写成“贰仟”,代码得认得。整个过程,就是把汉字代表的数值和单位,通过逻辑运算,还原成纯粹的阿拉伯数字。
说实话,写这么一个VBA函数,如果自己从头开始,那工作量和对逻辑的要求可不低,得考虑各种边缘情况和中文数字的表达习惯。所以绝大多数时候,我们都是站在巨人的肩膀上,直接用别人写好的成熟代码。网上有很多版本,搜一搜,找个评价不错的,直接拿来主义,效率最高。
用上了这个VBA函数之后,那种效率提升简直是飞跃。你只需要在旁边一列输入公式,然后向下拖动填充,砰砰砰,几百个大写数字瞬间就变成了方便计算的小写数字。那种感觉,怎么说呢,就像手里突然有了神兵利器,看那些密密麻麻的大写汉字,不再是令人头疼的障碍,而是待加工的原料,几秒钟就能转换完毕。
当然,用VBA也有点小麻烦。首先,你的Excel安全设置可能需要允许运行宏,这在一些公司里可能会有限制。其次,代码本身得正确,万一遇到个写得不严谨的函数,碰到些特殊的数字表达(比如混合了半角全角的符号,或者一些不规范的写法),可能会出错。不过绝大多数通用的代码版本,处理常见的数字大写转换小写已经绰绰有余了。
除了VBA,还有没有其他办法?理论上,如果你数据量不大,也可以借助一些在线工具或者第三方软件。你把大写数字复制进去,它给你转换出来再复制回Excel。但这步骤太繁琐了,而且涉及敏感数据的话,上传到第三方平台总归有点不放心。所以,折腾一圈,VBA函数还是处理Excel里大量数字大写转换小写最实用、最集成、效率最高的方式。
总而言之,别再盯着那些令人眼花缭乱的大写数字发愁了,也别想着Excel里会有个神奇的自定义格式能一步到位(真没有)。学着拥抱一下VBA,或者直接找到那个传说中的大写转小写函数代码,你会发现,处理这类问题,一下子就变得轻松愉快,效率翻倍。这年头,解放双手,靠的往往不是某个直观的按钮,而是藏在幕后的一段段逻辑代码。而解决Excel数字大写转换小写这个痛点,那个VBA函数,绝对是值得你拥有的一把瑞士军刀。下次再看到那些规范得要命的大写金额,心里就不慌了,我知道怎么分分钟把它们“打回原形”变成普通数字。
发表回复