把阿拉伯数字转化成中文小写数字,我们都知道,通过单元格格式设置就可以实现,如下图:
但是上面的转化有时并不能满足我们的需求,比如,我们需要把13转化成十三,而不是一十三,这时我们该怎么办呢?
下面我们先学习下把阿拉伯数字转化成中文数字的一个函数。
EXCEL中隐藏了一个将小写数字转换成中文大写数字的函数:NUMBERSTRING,此函数可以方便的实现小写数字到中文大写数字的转化,而且有三个参数可以选择,以展现三种不同的大写方式。此函数仅支持正整数,不支持有小数的数字。
value:要转化的数字
type:返回结果的类型,有三种:1,2,3
=NumberString(,1) 返回结果:一十二亿三千四百五十六万七千八百九十
=NumberString(,2) 返回结果:壹拾贰亿叁仟肆佰伍拾陆万柒仟捌佰玖拾
[dbnum1]是将阿拉伯数字转换为汉字,如:123转换为一二三
[dbbun2]是转换成大写汉字,如:123转换为壹贰叁
[dbnum3]是转换为全角数字,如:123转换为 123
d代表日期之中的日,m日期中的月,y日期中的年,h日期中的小时,m日期中的分,s是日期中的秒,e也表示年,b表示佛历年。
到这里大家就知道怎么把13变为十三了吧!
上图中列举了阿拉伯数字转中文小写数字的两种思路:
先用row函数构造一个1到151的序列号数组,然后用text把这个数组转化为中文小写的数字序列,最后用match查找目标单元格在这个序列中的位置即为该中文小写数字对应的阿拉伯数字。思路很巧妙。
当然row构造的数字序列号,上例中我用的是1:151,自己可以根据实际情况确定。
先用row函数构造一个1到151的序列号数组,然后用text把这个数组转化为中文小写的数字序列,然后通过等于目标单元格来获得一组逻辑值组成的数组,只有等于目标单元个值为true,其他均为false,然后用这组逻辑值与数字序列数组相乘,得到一个新的数组,新数组里只有true对应的数字和FALSE,最后用max找出这个数字。
把A列和B列的内容合并转化为下面的格式
中文数字转化为阿拉伯数字
第一步:将日期转化为目标格式,提取B列文本中的中文数字
第二步:将中文数字转化为阿拉伯数字并设置为目标格式
第三步:用连接符&将各个结果连接在一起。综合起来公式如下;
[dbnum1]d 相当于把数字当作日期中天数的序列号来处理,因为一个月最多只有31天,所以当数字大于31时这个公式的结果就会出错!
上面text的自定义格式这样的写法相当牛,大家注意领会。
下面是群友咫尺天涯提供的一条公式
后半段的处理方式使用了LOOKUP,也不难理解,我们应该学习的是前半段的处理方式。
日期前面强制性加入XSDD-,可以!X!S!D!D!- ,每个要加入的字符前面加个!
综合一下,我们可以把公式更加精炼点!