本篇來練習如何在 Excel 裡計算一個儲存格裡的字串中數字個數。
【設計與解析】
先理解:每個數字的 ASCII 碼是介於 48 和 57 之間。
儲存格B4:
=LET(x,CODE(MID(A4,ROW(INDIRECT("1:"&LEN(A4))),1)),SUM(IF((x<=57)*(x>=48),1,0)))
(1) INDIRECT("1:"&LEN(A4))
因為 LEN(A4) 可以取得儲存格A4裡的字串長度(字元個數),所以利用 INDIRECT 函數將 "1:"&LEN(A4) 轉換為位址。例如:「abc6def」轉換為「1:7」。
(2) ROW(INDIRECT("1:"&LEN(A4)))
本例中,根據第(1)式的傳回值得到 ROW(1:7)。因為本公式為陣列公式,所以結果會得到:1,2,3,4,5,6,7。
(3) MID(A4,ROW(INDIRECT("1:"&LEN(A4))),1))
根據第(2)式的傳回值,透過 MID 函數由第1個位置至第7個位置,各取出1個字元。得到:a,b,c,6,d,e,f。
(4) CODE(MID(A4,ROW(INDIRECT("1:"&LEN(A4))),1))
根據第(3)式的傳回值,再透過 CODE 將每一個字元轉換為 ASCII 碼。
在 LET 函數中設定:x=CODE(MID(A4,ROW(INDIRECT("1:"&LEN(A4))),1))。
(5) SUM(IF((x<=57)*(x>=48),1,0)
判斷第(4)式的傳回值若是大於 48 且小於 57,則加 1。最後再以 SUM 函數予以加總,即為所求。
【特別注意】
(1) 觀察上圖,其中最特殊的是日期中顯示的數字和計算結果不一致,此乃因為日期在儲存格中儲存的是一個數值,所以數字的數量要以數值的大小而定。
(2) 全型的數字會被視為文字。