你说说这不让人头大吗?一开始接触那会儿,哪知道有什么函数、什么格式的魔法?老老实实,眼睛瞪得溜圆,一个字一个字、一个数字一个数字地对着输。壹对应1,贰对应2…… 哎呀,别提了!输着输着就乱了,特别是那种带“零”的,比如“壹仟零伍拾圆”,你得想着这是 1050.00,脑子里得转好几个弯儿。更要命的是,金额大了,“万”啊,“亿”啊来了,还有那些“角”、“分”,眼睛看花了,手一抖,一个数字就错了,比如把伍圆伍角(5.50)输成 伍拾伍分(0.55),或者把 贰佰元整(200.00)输成 贰拾元整(20.00)。这种错误,你说它离谱吧,在手忙脚乱的时候还真就容易发生!等着吧,轻则数据对不上返工,重则影响核算,挨批那是妥妥的。
所以啊,把大写数字“弄”成小写数字,或者说确保你处理大写数字时能快速准确地拿到对应的小写数字,这绝对是Excel使用者,尤其是跟钱打交道的人,一个绕不过去的老大难问题。
很多人可能首先想到的是Excel自带的那个功能:选中一个小写数字单元格,右键,“设置单元格格式”,然后在“数字”分类下找到“特殊”或者自定义格式里输入 [DBNum2]G/通用格式
之类的代码。这样做,确实能把你的小写数字,比如 123,瞬间变成大写数字的显示形式:壹佰贰拾叁。后面加个“圆”或者“元整”也都能弄出来。没错,这个功能是挺方便的,它帮你解决了“我有小写数字,怎么让它显示成大写”的问题。输入 1234.56,它显示成 壹仟贰佰叁拾肆圆伍角陆分。这很好,很省事儿。
但!请注意这个BUT!现实中更让你抓狂的场景往往是反过来的:你手上只有那个大写数字的文本——它可能是一个从扫描件上识别出来的文字,可能是别人发给你一个表格里的文字内容,就写着壹万陆仟伍佰圆整,而你!需要把这个文本内容变成那个可以参与计算的、真正的小写数字:16500.00。这才是真正的挑战,是那个让无数人挠头、甚至想骂人的地方!
Excel 它的内建函数,真的很抱歉,没有一个现成的、能直接把“壹仟贰佰叁拾肆圆伍角陆分”这串中文文本,“理解”并“转换”成1234.56这个数字的神奇函数。它不认这串汉字代表的数值意义。那些汉字“壹”、“贰”、“拾”、“佰”、“圆”,在它眼里就是普通的文本字符,跟“你好”、“世界”没啥区别。这下傻眼了吧?那种指望一个函数搞定一切的美好愿望,破灭了。
那怎么办?难道只能硬着头皮人工输?如果数据量小,咬咬牙也就干了。可要是成百上千条,或者这是你日常工作的一部分,每天都要处理这种转换呢?人工操作不仅效率低下,更要命的是错误率高得吓人。这种时候,你就得想别的辙了,而且通常,这辙不会太简单。
一种比较“土”但也勉强算条路的方法,就是用一系列的函数去“扒拉”这个大写数字文本。你想啊,壹就是1,贰就是2,拾是乘10,佰是乘100…… 你得先用函数把大写数字里的“壹”替换成“1”,“贰”替换成“2”,以此类推。但这还没完!你还得处理单位啊!怎么知道“拾”是跟在哪个数字后面?怎么处理“零”?“壹仟零伍拾”,那个“零”意味着百位上没有数字,但它又不能少写。还有“圆”后面的“角”、“分”,怎么把它们的小数部分提取出来?用函数去判断“圆”字在哪儿,然后取它前面的部分作为整数,取它后面的部分作为小数,再分别处理角和分…… 光是脑子里想想这个逻辑,就足以让人晕头转向。真要写出这样的函数公式,得用到 SUBSTITUTE
、FIND
、LEFT
、RIGHT
、MID
、IF
等等一大堆函数嵌套,那个公式的长度和复杂程度,啧啧,堪比天书!而且它非常脆弱,原始文本里多一个空格、少一个“零”、或者格式稍微变一点点,公式立马失效,给你一堆错误值。维护和修改这种公式,绝对是噩梦级别的。这种方法,除了证明你能把函数玩得出神入化(或者自虐),通用性和实用性其实不高。
那有没有更靠谱的办法呢?有!就是VBA。写一段宏代码,这东西就能真正地“读懂”大写数字文本的含义。你可以让VBA代码遍历大写数字字符串的每一个字符,判断它是“壹”、“贰”、“拾”、“圆”还是别的,然后根据这些判断,一步步地计算出对应的小写数字。这就像是你在用编程语言教Excel怎么“读”大写数字。写好的VBA函数可以非常强大,处理各种复杂的大写数字格式,包括带“零”、带小数、带单位(万、亿)等等。一旦写好或者找到一个靠谱的VBA代码导入到你的Excel里,你就可以像使用Excel自带函数一样使用它,输入大写数字文本,嗖一下,小写数字就出来了。
网上其实能搜到不少好心人分享的VBA代码,专门用来解决“大写数字文本转小写数字”这个问题的。比如你可以搜“Excel VBA 大写转小写”,能找到不少资源。但这事的门槛在于,你需要了解怎么启用Excel的“开发工具”选项卡,怎么打开VBA编辑器,怎么把代码复制粘贴进去,怎么保存,怎么在工作表里调用这个自定义的VBA函数。对于完全没接触过VBA的小白来说,这本身就是一道坎。而且找到的代码是不是完全符合你的需求,有没有bug,兼容性如何,都需要自己去验证。但话说回来,如果你的工作真的需要频繁处理大写数字转小写数字的问题,花点时间研究一下VBA或者找个现成的VBA函数来用,绝对是提升效率、减少错误的一劳永逸的办法。比起每次都提心吊胆地人工输入或者写那些脆弱不堪的嵌套函数,VBA无疑是更优雅、更可靠的选择。
所以你看,Excel里大写数字变小写数字,听起来是一个问题,实际上可能是两个:一个是用格式把小写数字“显示”成大写(这个容易),另一个是把大写数字的中文文本“转换”成可计算的小写数字(这个才是真挑战)。解决后一个问题,没有捷径,得靠复杂的函数逻辑(不推荐)或者强大的VBA代码(推荐,但有门槛)。归根结底,咱们折腾这一切,不就是为了那个准确无误的、可以参与加减乘除、可以排序筛选、可以生成图表的,那个基础的小写数字嘛。为了它,学点新东西,折腾一下VBA,我觉得值!至少,再也不用盯着一串儿大写金额,心里发慌,手指打颤了。
发表回复