在Excel中实现中文大写数字
和一个朋友开发表单模板的时候,花了很多时间做了一个可以在Excel中构造数字的VB函数。事后看来,数字阅读的实现方式其实至少有三种,分别是VB编程、自动批改和工作表函数替换。其实用VB编程是最复杂的方法(但也是一劳永逸的方法),很多时候可以用更简单的方法实现。这些方法描述如下。
自动校正方法
使用自动更正功能可以简化用户输入大写汉字的操作。比如“1//”的定义可以更正为“一个”,那么当你想输入“一个”的时候,就可以输入“1//”。此外,该定义不仅在Excel中有效,在Word中也有效,因为“自动更正”程序在Office组件中很常见。
自动更正是最简单易行的方法,用户可以自由方便地输入要书写的大写发音。但其局限性也是显而易见的,即虽然为用户提供了便捷的输入大写数字的手段,但仍然需要手动输入,无法根据当前实际的数字结果自动实时更新。
函数替换法
要自动更新数值,我们通常会想到用VB构造函数的方法,但其实可以采用一个简单的方法,就是工作表函数的替换法。顾名思义,所谓的“工作表函数替换法”就是把原来的一些结果替换掉。那么改什么,怎么改呢?
我们知道,在Excel中,提供了多种数字显示格式。其实中文版也包含了数字的大写阅读的显示格式,但遗憾的是一般用户基本上无法使用这个功能,因为微软在实现这个数字显示格式时犯了一个小错误,比如数字“33.56”,显示的是“33.56”。显然,小数点没有得到有效的处理。
虽然这种显示格式是错误的,但它的劳动成果仍然可以为我们所用——只要我们能设法有效地处理小数点。做到这一点也不难。可以先在其内置的中文大写显示格式中将数字转换成文本格式,即使用TEXE()函数将结果转换成字符串,然后替换小数点“.”用汉字“点”(用SUBSTITUTE()函数)。
例如,要将B1单元格的内容重写为大写,可以在单元格中输入以下公式:
=替换(文本(B1,“g/通用格式”),“.”,“点”)
应该说用这么小的公式并不复杂。但在某些情况下还是达不到要求,因为用资本来表示金额一般只在会计上使用,其他很少这样做。在上面的例子中,对于数字“33.56”,结果往往要求写成“三十三元五十六分”。那么,“33.00”怎么写成“三十三元整”
实现这个功能的逻辑并不太复杂。我们可以看到,Excel显示格式中小数点前的数字读数没有问题,可以作为字符串取出来;小数点后面的数字比较麻烦,必须拿出来,然后通过低位数字是否全是“0”来判断是写“整”还是“零”。还要适当的插入“元”“角”“分”的弦,最后连几根弦。我们还是把B1单元格的内容转换成格式,具体实现如下:
=TEXT(INT(B1)," g/通用格式")& "元" &if ((int (b1 * 10)-int (b1) * 10) = 0,"",text (int (b1 * 10)-int (b1) * 10," g/"整体",text (int (B1 * 100)-int (B1 * 10) * 10," g/通用格式")& "分钟")
写这么长的公式列表似乎有点吓人。但如果在经常需要修改数据的表格或模板中用这种方法显示大写汉字,不仅省事而且容易出错。
对VB编程方法的思考
可以用VB写一个函数,以后可以像Excel内部函数一样直接调用,但是需要熟悉VB编程。在编程过程中,可以通过一般方法调用VB函数,也可以借用前面列举的“替换法”中的函数。但是之前的公式大多是Excel工作表函数,在VB中无法直接使用。如果没有,则只能通过层次关系(即“应用程序工作表功能”)来调用它们。
但是我是自己用VB函数写的,因为这样的话,更通用,更便携。如果只用VB函数,具体方法和替换法差不多,但是小数点前的处理要复杂很多,对应的代码也太长。
位律师回复
0条评论