商品編號 TEA-0123-L 裡,我只想要前面的 TEA,或是中間的 0123,或是最後代表尺寸的 L,要怎麼從一格文字裡切出來?
這時候就是 LEFT、MID、RIGHT 的場合,再加上算長度的 LEN,以及找位置的 FIND 和 SEARCH。這篇當作函式參考,把六個放在一起查。轉成特定格式的 TEXT 在 TEXT 入門 講過,清理空格和取代在 文字清理函式,這邊不重複。
怎麼選
| 函式 | 做什麼 | 常搭配 |
|---|---|---|
LEFT | 從左邊取幾個字 | FIND |
RIGHT | 從右邊取幾個字 | LEN |
MID | 從指定位置取幾個字 | FIND |
LEN | 算有幾個字 | RIGHT、MID |
FIND | 找位置,分大小寫 | LEFT、MID |
SEARCH | 找位置,不分大小寫 | LEFT、MID |
這篇用同一份小資料,是三個商品編號,放在 A2:A4:
| A | |
|---|---|
| 1 | 編號 |
| 2 | TEA-0123-L |
| 3 | TEA-45-M |
| 4 | MLK-0678-XL |
三個編號都是「品類 - 流水號 - 尺寸」,但流水號長度不一樣,這會讓事情變得有趣。
LEFT
從文字的左邊取出指定個數的字。
語法:
- 文字:要截取的文字,或儲存格。
- 字數:選填,沒寫的話預設是 1。
取編號的前 3 個字
=LEFT(A2, 3)結果是 TEA。不寫字數的 只會取第一個字 T。
中文也是一個字算一個, 會得到 蘋果。字數寫 0 會得到空字串,寫負數則會出現 #VALUE!。
MID
從指定的位置開始,取出指定個數的字。
語法:
- 起始位置:第一個字是 1。
- 字數:必填,要取幾個字。
從第 5 個字開始取 4 個字
=MID(A2, 5, 4)先數:T 是 1、E 是 2、A 是 3、「-」是 4,所以流水號從第 5 個字開始,4 個字,結果是 0123。
字數寫得比剩下的還多不會出錯, 會一路取到結尾,得到 0123-L。起始位置超過文字長度,會得到空字串。
RIGHT
從文字的右邊取出指定個數的字,用法跟 LEFT 對稱。
語法:
取編號最後 2 個字
=RIGHT(A4, 2)結果是 XL。字數沒寫的話預設是 1, 是 L。
合成帳號只留末五碼:這是遮罩
在另一塊空白區的 D2 輸入 、D3 輸入 ,確保來源是文字、前導零還在。E2 放這條,再填到 E3:
長度不足五碼時不產生負數重複次數,原文字保留
=REPT("*", MAX(0, LEN(D2)-5))&RIGHT(D2, 5)結果是 *****45678、0012。這裡用合成帳號;如果前導零已在輸入時被當數字丟掉,後面的文字函式不會憑空找回來。
這是顯示遮罩,不是加密:來源格仍有完整內容,遮罩欄不會改變分享權限。外發時只交付允許公開的結果並檢查檔案,不能以隱藏來源欄當成保護。
LEN
算出文字有幾個字,空格也算。
語法:
編號的長度
=LEN(A2)TEA-0123-L 一共 10 個字,結果是 10。
數字也可以丟進去, 是 4。中文一個字算 1, 是 4。空字串 是 0,前後多空格的 是 3,資料看起來一樣但 LEN 不一樣的時候,通常就是藏了空格。
LEN 還有個我很常用的招,算某個符號出現幾次:整段長度減掉把符號拿掉之後的長度。
編號裡有幾個「-」
=LEN(A2) - LEN(SUBSTITUTE(A2, "-", ""))結果是 2。SUBSTITUTE 的用法請看 文字清理函式。
FIND
找出一段文字在另一段文字裡第一次出現的位置,分大小寫,沒有萬用字元。
語法:
- 要找的文字:想找的字或符號。
- 搜尋的文字:在哪一段文字裡找。
- 起始位置:選填,從第幾個字開始找,預設從頭。
第一個「-」的位置
=FIND("-", A2)結果是 4。想找第二個「-」,就從第 5 個字開始找:
第二個「-」的位置
=FIND("-", A2, 5)結果是 9。找不到的時候會得到錯誤, 因為大小寫不同,是 #VALUE!,包一層 IFERROR 就可以處理。
第 N 次出現:用可見的替代符號定位
第 2 次、第 3 次一直巢狀 FIND,很快就難讀。另一種方法是讓 SUBSTITUTE 只替換第 N 次,再找替代符號。另開空白表,A2 填 a/a/a、A3 填 a/a,B2 放下式後複製到 B3:
只替換第 2 個斜線,找不到時明確顯示提示
=IFERROR(
FIND("♦", SUBSTITUTE(A2, "/", "♦", 2)),
"找不到"
)B2 得到 4,B3 得到「找不到」。最後一個 2 就是出現次數;改成其他正整數前,也要確認該次真的存在。
替代符號不能已經出現在原文。若 A4 填 a♦/a/a,複製公式會先找到原有的 ♦,得到 2;真正第 2 個斜線卻在第 5 個位置。先檢查來源、換一個不存在的單字元,不要把錯誤結果拿去切字。
SEARCH
跟 FIND 一樣找位置,差別是不分大小寫,而且可以用萬用字元。
語法:
不分大小寫找 tea
=SEARCH("tea", A2)結果是 1。萬用字元的 ? 代表任一個字、* 代表任意長度,所以 也是 1。
我個人的習慣是:符號和固定格式用 FIND,因為不會被大小寫騙;找英文字、不確定大小寫的時候用 SEARCH。
組起來:拆商品編號
回到一開始的題目。品類固定 3 個字,直接 LEFT:
取品類
=LEFT(A2, 3)三列依序得到 TEA、TEA、MLK。要一次填滿 A2:A4 可以用 ARRAYFORMULA,寫成 。
流水號的長度不固定(0123、45、0678),就要靠 FIND 找兩個「-」的位置,中間那段從第一個「-」之後開始,長度是兩個「-」位置的差再減 1:
取中間的流水號
=MID(
A2,
FIND("-", A2)+1,
FIND("-", A2, FIND("-", A2)+1)-FIND("-", A2)-1
)FIND("-", A2) + 1:第一個「-」之後,也就是流水號的起點。FIND("-", A2, FIND("-", A2) + 1):從起點開始找下一個「-」。- 兩者相減再減 1,就是流水號的字數。
A2 到 A4 的結果依序是 0123、45、0678。這裡要注意,MID 的結果是文字,前面的 0 會保留;要拿來算數字,乘以 1 或用 VALUE,例如 會得到 123。
尺寸在最後一個「-」之後,長度不固定。把第二個「-」換成別的符號再找它的位置,用 RIGHT 取後面的部分:
取尺寸
=RIGHT(A2, LEN(A2) - FIND("~", SUBSTITUTE(A2, "-", "~", 2)))這個尺寸範例同樣假設原編號沒有 ~;若原本就有,需先換一個未出現的單字元,否則可能找錯位置。
SUBSTITUTE(A2, "-", "~", 2) 只把第 2 個「-」換成波浪號,變成 TEA-0123~L,FIND 找到波浪號在第 9 個字,總長 10 減 9 剩 1 個字。三列依序得到 L、M、XL。
寫起來有點長,我個人如果規則更複雜,會改用正規表示式,在 正規表示式抓文字 有教。簡單的固定格式,這幾個函式組起來就夠用了,試著貼進自己的資料看看吧!
接下來可以
相關文章
查看所有文章文字清理函式參考:TRIM、CLEAN、SUBSTITUTE、PROPER 與看不見的空格
整理 TRIM、CLEAN、SUBSTITUTE、REPLACE、UPPER、LOWER、PROPER 的語法與限制,包含 TRIM 清不掉全形空格與 CHAR(160)、CLEAN 只清 ASCII 0 到 31、SUBSTITUTE 第 4 參數只換第 N 次,以及用 UNICODE 找出看不見的字元。
收款訊息、收據編號與月份分組:用 TEXT 把日期金額組成文字
用 TEXT 把日期和金額組成一句話的訊息範本、產生 INV-2026-0012 這種補零的收據編號、做出依月份分組的鍵來加總,再加上不看語系的中文星期寫法。
電話、地址、單號、Email:四種混亂文字的 REGEX 實戰整理
拿一份客服回饋的混亂文字,用 REGEXEXTRACT、REGEXMATCH、REGEXREPLACE 擷取台灣手機與市話、拆出縣市與行政區、抓訂單單號、取出 Email 網域,最後用 ARRAYFORMULA 處理整欄。
留言討論
共 0 則留言
