用TEXT 函數對字符格式化
TEXT函數是使用頻率非常高的文本函數之一,雖然函數的基本語法十分簡單,但它的參數規則變化多端,因此能夠演變出十分精妙的應用。
1. TEXT函數的基本語法
TEXT函數的基本語法如下。
第一參數value,要轉換為指定格式文本的數值,也可以是文本型數字。
第二參數format_text,用於指定格式代碼,與單元格數字格式中的大部分代碼基本相同。有少部分代碼僅適用於自定義格式,不能在TEXT函數中使用。
例如,TEXT函數無法使用星號(*)來實現重複某個字符以填滿單元格的效果。同時也無法實現以某種顏色顯示數值的效果,如格式代碼「#,##0;[紅色]-#,##0」等。
但TEXT函數較自定義格式更加靈活,如可以在格式參數中引入變量,實現動態的格式設置。
除此之外,設置單元格格式與TEXT函數還有以下區別。
(1)設置單元格的格式僅僅是數字顯示外觀的改變,其實質仍然是數值本身,不影響進一步的匯總計算,即得到的是顯示的效果。
(2)使用TEXT函數可以將數值轉換為帶格式的文本,其實質已經是文本,不再具有數值的特性,即得到的是實際的效果。
2. 了解TEXT函數的格式代碼
TEXT函數的格式代碼分為4個條件區段,各區段之間用半角分號間隔,默認情況下,這四個區段的定義如下。
示例10-46 按條件返回結果
圖10-92為某單位員工技能考核的成績,B列、C列分別是兩次考試結果,D列為C列數值減去B列的結果,缺席考核的人員記為「缺席」。需要在E列將D列中的結果大於0的顯示為「升」,小於0的顯示為「降」,等於0的顯示為「持平」,文本仍顯示為「缺席」。
在E2單元格中輸入以下公式,向下複製到E9單元格。
=TEXT(D2,"升;降;持平;缺席")
3. 省略部分條件區段
在實際使用中,可以根據需要省略TEXT函數第二參數的部分條件區段,條件含義也會發生相應變化。
自定義條件的四區段可以表示如下。
示例10-47 使用TEXT函數判斷產品是否合格
圖10-93為某公司生產的鋰電池容量測試結果,產品標稱容量為8Ah,實際容量大於等於8Ah為合格,需要在B列標識出A列對應的容量是否合格。
在B2單元格中輸入以下公式,向下複製到B9單元格。
=TEXT(A2,"[>=8]合格;不合格")
公式中TEXT函數的第二參數使用兩區圖10-93 使用TEXT判斷產品是否合格段的自定義條件:當A2單元格數值大於等於8時,返回「合格」,否則返回「不合格」。
公式中以一對半角中括號包含的內容為判斷的條件,中括號後緊跟著的是符合該條件時返回的結果。
示例10-48 使用TEXT函數評定員工考核成績
圖10-94為某公司員工考核結果,需要按照B列的「考核成績」對應評級。評級標準為大於等於90分顯示為「優秀」,大於等於80分小於90分顯示為「良好」,大於等於70分小於80分顯示為「中等」,大於等於60分小於70分顯示為「及格」,小於60分顯示為「不及格」。
在C2單元格中輸入以下公式,向下複製到C9單元格。
=TEXT(TEXT(B2,"[>=90]優秀;[>=80]良好;0"),"[>=70 ]中等;[>=60]及格;不及格")
這是TEXT函數嵌套使用的典型用法,由於評級的條件一共為5個,而TEXT自定義條件的數量最多為3個,故使用兩次TEXT函數,第一次TEXT函數解決前三個條件的顯示方式,其他的內容將返回原始字符串。再利用TEXT函數解決對剩餘條件的判斷。
TEXT(B2,"[>=90]優秀;[>=80]良好;0")表示當成績大於等於90分時返回「優秀」,成績大於等於80分時返回「良好」,其他情況返回原值。這裡默認成績都為整數,如果包含小數,則第三區段的格式應寫為相應的小數位數,如兩位小數位「0.00」。否則返回的結果按照四捨五入進行計算。
外層使用TEXT將內層符合第三區段的值再次進行區分,大於等於70分時返回「中等」,大於等於60分時返回「及格」,其他情況返回「不及格」。
使用TEXT函數設置不同的數字格式
TEXT函數可用於實現類似於Excel自定義格式的功能,使用部分自定義格式代碼,作為TEXT函數第二參數,將數字設置為不同的格式。
TEXT函數中幾種常用的符號如下。
0:數字佔位符,數量不足的需補齊,如「000」則返回的整數不能小於3位數字。
#:數字佔位符,數量不足的無須補齊。
@:文本佔位符,連續使用表示重複顯示文本。
!或\:強制顯示符,如需在公式結果中顯示有特定含義的字符,需在字符前加「!」或「\」以強制其顯示出來。如果要在結果中始終顯示某個特定「0」,需寫為「!0」。如圖10-95所示,不同的TEXT函數的第二參數將數字設置為不同的格式。
示例10-49 根據條件進行判斷
圖10-96中的A列包含數字和文本,需要在B列進行判斷,如果A列為文本,則返回「文本」。如果為數字 ,正數返回「>0」,負數返回「<0」,等於0時返回「=0」。
在B2單元格中輸入以下公式,向下複製到B8單元格。
=TEXT(A2,">!0;<!0;=!0;文本")
公式中第二參數使用默認的四個區段格式定義,分別定 義第一參數大於0、小於0、等於0和為文本格式時的顯示方式。
當A2單元格中的數字大於0時,返回「>0」,但由於0在TEXT函數中是數字佔位符,要讓其在最終結果中顯示出來,需要在前面加半角感嘆號「!」。第二和第三區段的格式同理。
示例10-50 使用TEXT函數設置樓門號格式
圖10-97為某小區樓門號,A列中的數字包含樓號、單元號及門牌號。需要在B列將其格式修改為x樓x單元xxx的格式。這裡默認所有的門牌號都是3位數字,單元號都是一位數字,樓號位數不等。
在B2單元格中輸入以下公式,向下複製到B8單元格。
=TEXT(A2,"0號樓0單元000")
TEXT函數中多位數字分段顯示時,從右向左依次 滿足格式要求。公式中「"0號樓0單元000"」會優先滿足將最右側3位數顯示在「單元」後面,倒數第4位數字顯示在
「號樓」和「單元」之間,剩餘的數字顯示最前面。
因為公式中設置顯示「0號樓」,所以此處至少顯示一位數字,如果設置為「00號樓」則至少顯示兩位數字。例如,「1號樓」會顯示為「01號樓」。
示例10-51 使用TEXT函數設置項目日期格式
圖10-98為某公司項目存檔的部分內容,其中A列為項目編號,B列為項目的結束日期。需要在C列將A列和B列中的內容一起顯示,同時加上「項目編號:」和「結束日期:」作為引導。
在C2單元格中輸入以下公式,向下複製到C7單元格。
=$A$1&":"&A2&$B$1&":"&TEXT(B2,"YYYY/MM/DD")
公式中的「 $A$1&":"&A2&$B$1&":"」部分表示用「&」符號將A1單元格與冒號「:」、B1單元格中的標題及冒號「:」連接在一起。A1、B1單元格使用絕對引用使公式在向下複製時,此單元格引用不會發生變化。
「TEXT(B2,"YYYY/MM/DD")」部分將B2單元格中的日期顯示為文本格式的日期。如果不使用TEXT函數,日期在使用「&」符號與其他文本連接時,會顯示為日期的序列號。
TEXT函數使用變量參數
TEXT函數中的第二參數除了可以引用單元格格式代碼或使用自定義格式代碼字符串外,還可以通過引入變量或公式運算結果,構造符合代碼格式的文本字符串,使TEXT函數具有動態的第二參數。
參數中的「條件」區段或「格式」區段單獨引入變量,或「條件」「格式」區段同時引入變量均可。引入變量的區段格式書寫需注意,變量前後需用「&」符號與其他字符串相連;「&」符號及變量不包含在標識第二參數的半角雙引號內。
為保證書寫正確,可以先按正常順序寫完參數代碼,再添加上應有的「&」符號及雙引號。例如, 如果A2單元格減去60大於0則返回「合格」,否則返回「不合格」。可以先書寫以下公式。
然後在第二參數的A2前後分別添加「"&」和「&"」構成完整的參數。
示例10-52 TEXT函數使用變量參數
圖10-99為某項實驗記錄的部分內容,其中B列、C列分別是同批樣品兩次的測試結果。如果第二次較第一次數值有所增長,則在D列顯示第二次的測試結果且保留3位小數,如果第二次與第一次的值相等或小於第一次的結果,則返回「未增長」。
在D2單元格中輸入以下公式,向下複製到D6單元格。
=TEXT(C2,"[>"&B2&"]0.000;未增長")
公式中使用判斷條件「>B2」則顯示為3 位小數的數字,否則顯示「未增長」。
由於B2在公式中是單元格引用的變量,因此,在「B2」前後需要用「&」符號與其他字符進行相連。
數值與中文數字的轉換
TEXT函數不僅可以設置數字格式,還可以將數值與中文數字進行轉換。
示例10-53 使用TEXT函數轉換中文格式的日期
圖10-100中A列是某項目各個合同的籤訂日期,需要在B列將其修改為中文的日期格式。
在B2單元格中輸入以下公式,向下複製到B7單元格。
=TEXT(A2,"[DBnum1]yyyy年m月d日")
格式代碼「yyyy年m月d日」 用於提取A2單元格中的日期,並且年份以4位數字表示。再使用格式代碼「[DBnum1]」將其轉換為中文小寫數字格式。
示例10-54 將中文小寫數字轉換為數值
如圖10-101所示,需要將A列中的中文小寫數字轉換
為數值。
在B2單元格中輸入以下數組公式,按<Ctrl+Shift+Enter>組合鍵,向下複製到B7單元格。
{=MATCH(A2,TEXT(ROW($1:$99 99),[DBnum1]"),0)}
「ROW($1:$9999)」用於生成1~9999的自然數序列。
TEXT函數使用格式代碼[DBnum1]將其全部轉換為中文小寫格式。再由MATCH函數從中精確查找A2單元格字符所處的位置,變相完成從中文到數值的轉換。
公式適用於一至九千九百九十九的整數中文小寫數字轉換,可根據需要調整ROW函數的參數範圍。
使用RMB函數轉換貨幣格式
RMB函數可以將數字轉換為貨幣格式,同時設置指定的小數位數,其語法如下:
第一參數number為必需參數,可以是數字、包含數字的單元格的引用或計算結果為數字的公式。
第二參數decimals為可選參數,表示保留的小數位數。如果為負數,則第一參數從小數點往左按相應位數四捨五入。如果省略,則默認其值為2。
此函數依照貨幣格式將小數四捨五入到指定的位數並轉換成文本。例如,「=RMB(4528.75,2)」,返回結果「¥4,528.75」。
NUMBERSTRING函數可以將數值轉換為中文小寫數字,共有3種不同的數字格式。函數僅支持正整數,不支持包含小數的數字。基本語法如下:
第一參數為要轉換的數字或單元格引用。
第二參數為轉換類型,分別為如下結果。
「=NUMBERSTRING (1234567890,1)」返回結果為一十二億三千四百五十六萬七千八百九十。
「=NUMBERSTRING (1234567890,2)」返回結果為壹拾貳億叄仟肆佰伍拾陸萬柒仟捌佰玖拾。
「=NUMBERSTRING (1234567890,3)」返回結果為一二三四五六七八九〇。
示例10-55 使用TEXT函數生成中文大寫金額
為滿足《中華人民共和國票據法》中對中文大寫金額的書寫要求,可以使用TEXT函數將數字格式轉換為中文大寫金額。圖10-102中A列是小寫的金額,需要在B列使用公式將其轉換為中文大寫金額。
在B2單元格中輸入以下公式,向下複製到B6單元格。
=SUBSTITUTE(SUBSTITUTE(IF(-RMB(A2,2),TEXT(A2,";負")&TEXT (INT(ABS(A2)+
0.5%),"[dbnum2]G/通用格式元;;")&TEXT(RIGHT(RMB(A2,2),2),"[dbnum2]0角0分;;
整"),),"零角",IF(A2^2<1,,"零")),"零分","整")
公式中「RMB(A2,2)」部分的作用是依照貨幣格式將數值四捨五入到兩位小數並轉換成文本。
使用TEXT函數分別將金額數值的整數部分和小數部分及正負符號進行格式轉換。
「TEXT(A2,";負")」部分的作用是,如果A2單元格的金額小於0則返回字符「負」。
「TEXT(INT(ABS(A2)+0.5%),"[dbnum2]G/通用格式元;;")」部分的作用是將金額取絕對值後的整數部分轉換為大寫。+0.5%的作用是為了避免0.999元、1.999元等情況下出現的計算錯誤。
「TEXT(RIGHT(RMB(A2,2),2),"[dbnum2]0角0分;;整")」部分的作用是,將金額的小數部分轉換為大寫。
再使用連接符號「&」連接3個TEXT函數的結果。
IF函數對「-RMB(A2,2)」進行判斷,如果金額大於等於1分,則返回連接TEXT函數的轉換結果,否則返回空值。
最後使用兩個SUBSTITUTE函數將「零角」替換為「零」或空值,將「零分」替換為「整」。
用T函數返回值引用的文字
T函數返回值引用的文字,函數語法為:
函數隻用一個參數value,當參數為文字或引用文字,將返回該文字,如果為數字或邏輯值,將返回空文本。如果參數為錯誤值,仍返回錯誤值,如圖10 -103所示。
使用宏表函數時,由於計算結果不能實時更新,通常會在公式最後加上「&T(NOW())」。
NOW()是易失性函數,可以通過在單元格中的輸入、編輯等操作刷新結果。再 用T函數將NOW生成的日期時間返回空文本。因此&T(NOW())雖然不生成文本數據,但組合使用時可以起到自動刷新的功能。
另外,在數組公式中,T函數還被用於將OFFSET、INDIRECT等函數形成的三維引用轉為二維引用。
*註:本文部分圖片來源於網際網路,僅供學習、交流使用。不具有任何商業用途,若有侵權,請聯繫刪除。全書分為四大部分,完整詳盡地介紹了Excel函數與公式的技術特點和應用方法。本書從公式與函數的基礎開始,逐步展開到查找引用、統計求和等常用函數應用,以及數組公式、多維引用等,形成了一套結構清晰、內容豐富的Excel函數與公式知識體系。