把阿拉伯數字轉化成中文小寫數字,我們都知道,通過單元格格式設置就可以實現,如下圖:
但是上面的轉化有時并不能滿足我們的需求,比如,我們需要把13轉化成十三,而不是一十三,這時我們該怎麼辦呢?
下面我們先學習下把阿拉伯數字轉化成中文數字的一個函數。
一、NUMBERSTRING
功能:
EXCEL中隐藏了一個将小寫數字轉換成中文大寫數字的函數:NUMBERSTRING,此函數可以方便的實現小寫數字到中文大寫數字的轉化,而且有三個參數可以選擇,以展現三種不同的大寫方式。此函數僅支持正整數,不支持有小數的數字。
語法:
=NUMBERSTRING(VALUE,TYPE)
value:要轉化的數字
type:返回結果的類型,有三種:1,2,3
示例:
=NumberString(1234567890,1) 返回結果:一十二億三千四百五十六萬七千八百九十
=NumberString(1234567890,2) 返回結果:壹拾貳億叁仟肆佰伍拾陸萬柒仟捌佰玖拾
=NumberString(1234567890,3) 返回結果:一二三四五六七八九〇
二:[dbnum]的幾種格式
[dbnum1]是将阿拉伯數字轉換為漢字,如:123轉換為一二三
[dbbun2]是轉換成大寫漢字,如:123轉換為壹貳叁
[dbnum3]是轉換為全角數字,如:123轉換為 123
d代表日期之中的日,m日期中的月,y日期中的年,h日期中的小時,m日期中的分,s是日期中的秒,e也表示年,b表示佛曆年。
=TEXT(10,"[DBnum1]")
結果為“一十”,
=TEXT(10,"[DBnum1]d")
結果為“十”
到這裡大家就知道怎麼把13變為十三了吧!
三、中文小寫轉阿拉伯
如下圖:
上圖中列舉了阿拉伯數字轉中文小寫數字的兩種思路:
公式一:
=MATCH(A2,TEXT(ROW($1:$151),"[dbnum1]"),0)
先用row函數構造一個1到151的序列号數組,然後用text把這個數組轉化為中文小寫的數字序列,最後用match查找目标單元格在這個序列中的位置即為該中文小寫數字對應的阿拉伯數字。思路很巧妙。
當然row構造的數字序列号,上例中我用的是1:151,自己可以根據實際情況确定。
公式二:
=MAX((TEXT(ROW($1:$151),"[dbnum1]")=A2)*ROW($1:$151))
先用row函數構造一個1到151的序列号數組,然後用text把這個數組轉化為中文小寫的數字序列,然後通過等于目标單元格來獲得一組邏輯值組成的數組,隻有等于目标單元個值為true,其他均為false,然後用這組邏輯值與數字序列數組相乘,得到一個新的數組,新數組裡隻有true對應的數字和FALSE,最後用max找出這個數字。
四、實例
如下圖:
把A列和B列的内容合并轉化為下面的格式
這是一道綜合練習題:
用到
文本連接符 &
自定義日期格式
文本提取
中文數字轉化為阿拉伯數字
自定義數字格式
第一步:将日期轉化為目标格式,提取B列文本中的中文數字
第二步:将中文數字轉化為阿拉伯數字并設置為目标格式
第三步:用連接符&将各個結果連接在一起。綜合起來公式如下;
="XXDD-"&TEXT(A1,"yyyy-mm-dd")&"-"&TEXT(MATCH(LEFT(B1,LEN(B1)-1),TEXT(ROW($1:$20),"[dbnum1]d"),0),"00000")
[dbnum1]d 相當于把數字當作日期中天數的序列号來處理,因為一個月最多隻有31天,所以當數字大于31時這個公式的結果就會出錯!
所以我們修改下公式:
="XXDD-"&TEXT(A1,"yyyy-mm-dd")&"-"&TEXT(MATCH(LEFT(B1,LEN(B1)-1),TEXT(ROW($1:$20),"[>31][dbnum1];[dbnum1]d"),0),"00000")
上面text的自定義格式這樣的寫法相當牛,大家注意領會。
下面是群友咫尺天涯提供的一條公式
=TEXT(A1,"!X!S!D!D!-e-mm-dd-")&TEXT(LOOKUP(1,0/(SUBSTITUTE(TEXT(ROW($1:$100),"[dbnum1]"),"一十","十")&"單"=B1),ROW($1:$100)),"00000")
後半段的處理方式使用了LOOKUP,也不難理解,我們應該學習的是前半段的處理方式。
自定義年的格式可以用
=TEXT(A1,"yyyy-mm-dd")
也可以
=TEXT(A1,"e-mm-dd")
日期前面強制性加入XSDD-,可以!X!S!D!D!- ,每個要加入的字符前面加個!
綜合一下,我們可以把公式更加精煉點!
=TEXT(A1,"!X!S!D!D!-yyyy-mm-dd")&"-"&TEXT(MATCH(LEFT(B1,LEN(B1)-1),TEXT(ROW($1:$50),"[>31][dbnum1];[dbnum1]d"),0),"00000")
轉自:米宏Office
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!