跳到主要內容跳到頁尾

位元組版文字函式:LENB、LEFTB、RIGHTB、MIDB、FINDB、SEARCHB 與 REPLACEB

5 分鐘閱讀Lv.3 中級摘要與日期

整理 Google 試算表 LENB、LEFTB、RIGHTB、MIDB、FINDB、SEARCHB、REPLACEB 的長度與位置單位,釐清 MIDB、REPLACEB 起點按字元、長度按位元組的差異,並用中文與英文混排示範。

發布 更新

文章目錄

今天來看一組名字長得像 LEN、LEFT、FIND,但結尾多了一個 B 的函式:LENB、LEFTB、RIGHTB、MIDB、FINDB、SEARCHB、REPLACEB。

B 是 byte(位元組)的意思。以這篇的例子來說,LEN 把一個中文字或英文字母算成 1;LENB 把「蘋果紅茶」每字算成 2,半形英數字和空格算成 1。這是 Sheets 這組函式的計數方式,不是檔案的 UTF-8 編碼長度。

坦白說,我個人在工作上幾乎不用這一組。會想到它們的情況很固定:系統欄位使用與這組函式相同的位元組計數規則,或是想檢查字元在這組函式裡算 1 還是 2。這篇當作工具書,需要時回來查。

最容易誤會的是:有些參數按字元,有些按位元組,不能只看函式名稱有 B 就把位置全部當成位元組。

怎麼選

先看各參數的單位。尤其 MIDB、REPLACEB 的起點按字元,長度才按位元組:

函式單位對應的字元版用途
LENB位元組LEN算長度
LEFTB、RIGHTB長度:位元組LEFT、RIGHT從兩端擷取文字
MIDB起點:字元;長度:位元組MID從指定字元開始擷取
FINDB、SEARCHB回傳:位元組位置FIND、SEARCH找出文字位置;起搜參數見下方說明
REPLACEB起點:字元;長度:位元組REPLACE從指定字元開始取代

字元版的用法請看 文字函式基礎,這篇不重講。

下面的例子都用同一批品名,先看長度對照:

品名字元數(LEN)位元組(LENB)
蘋果紅茶48
Apple 紅茶810
Tea33

「Apple 紅茶」的算法是 Apple 5 個、空格 1 個,共 6 個位元組,加上「紅茶」2 個字乘 2,一共 10。

算長度

LENB

回傳文字的位元組數。

語法:

Google 試算表公式
fx

蘋果紅茶有幾個位元組

=LENB("蘋果紅茶")

這四個中文字各算 2,4 × 2 = 8,結果是 8。同一個字串的 LEN 是 4。

在本文中文與英文混排的範例中,LENB 減 LEN 可算出被計為 2 的字元有幾個;這不等同通用的全形字判定。

Google 試算表公式
fx

Apple 紅茶裡有幾個計為 2 的字元

=LENB("Apple 紅茶") - LEN("Apple 紅茶")

10 − 8 = 2,得到 2,對應這裡的「紅茶」。不要把這個差值直接當作全形字數:半形片假名 ア 的 LENB 也是 2。

擷取

LEFTB

從左邊取指定位元組數的文字。

語法:

Google 試算表公式
fx

從蘋果紅茶左邊取 4 個位元組

=LEFTB("蘋果紅茶", 4)

4 個位元組剛好是這裡的 2 個中文字,得到「蘋果」。

位元組數切在中文字中間時,不要假設會截成半個字。 仍得到「蘋果」, 則得到「紅茶」;結果的位元組數可能超過指定值。若需求是取幾個完整字,直接用 LEFT、RIGHT 比較清楚。

RIGHTB

從右邊取指定位元組數的文字。

語法:

Google 試算表公式
fx

從蘋果紅茶右邊取 4 個位元組

=RIGHTB("蘋果紅茶", 4)

結果是「紅茶」。

MIDB

從指定的字元位置開始,依指定位元組數擷取文字。

語法:

  • 開始位置:從 1 開始,單位是字元。
  • 位元組數:擷取的長度,單位是位元組。

MIDB 跟 MID 一樣需要三個參數,寫法照 MID。

Google 試算表公式
fx

從第 3 個字元開始取 4 個位元組

=MIDB("蘋果紅茶", 3, 4)

第 3 個字元是「紅」,從這裡取 4 個位元組,得到「紅茶」,與 MIDB 官方定義 的字元起點一致。若改成 ,才會得到「果紅」。 也會得到完整的「紅茶」,不要把位元組長度當成一定不會超過的截斷上限。

搜尋

FINDB

找出一段文字從第幾個位元組開始,區分大小寫。

語法:

  • 開始位置:選填,指定從第幾個字元開始找;回傳值仍是整串文字中的位元組位置。

例如 得到 3;起點改為 3 就會跳過「果」而找不到。

Google 試算表公式
fx

紅在蘋果紅茶的第幾個位元組

=FINDB("紅", "蘋果紅茶")

「蘋」佔 1 到 2、「果」佔 3 到 4,「紅」從第 5 個位元組開始,得到 5。換成 FIND 的話,答案是第 3 個字。

找不到的時候跟 FIND 一樣是 #VALUE!。

SEARCHB

跟 FINDB 一樣回傳位元組位置,差別是不分大小寫,而且可以用萬用字元(? 和 *)。

語法:

Google 試算表公式
fx

茶在 Apple 紅茶的第幾個位元組

=SEARCHB("茶", "Apple 紅茶")

Apple 加空格佔 6 個位元組,「紅」是 7 到 8,「茶」從第 9 個位元組開始,得到 9。同一個字串用 SEARCH 會是 8,因為它數的是第 8 個字。

取代

REPLACEB

從指定的字元位置開始,依位元組長度選取一段文字,再換成新文字。

語法:

Google 試算表公式
fx

把紅茶換成綠茶

=REPLACEB("蘋果紅茶", 3, 4, "綠茶")

「紅」是第 3 個字元,接下來的「紅茶」共 4 個位元組,所以得到「蘋果綠茶」。如果把起點寫成 5,會從原字串末尾之後開始,結果變成「蘋果紅茶綠茶」。

什麼時候真的需要它們

要把搜尋結果交給 MIDB 或 REPLACEB 當起點時,用 FIND 算字元位置。例如 FIND("紅", "蘋果紅茶") 得到 3,可以作為起點;FINDB 得到的 5 是位元組位置,直接套入就會切錯。

我的做法是:沒有位元組計數需求的話,使用字元版。需要 B 版本時,逐一確認起點、長度、回傳值的單位;若要符合外部系統的檔案長度限制,還要先核對它使用的編碼與計數規則。

好,工具書就到這邊,下次需要再回來查囉!

分享:
#LENB#LEFTB#雙位元組#全形半形
喜特先生 Mr. Sheet

喜特先生 Mr. Sheet

數據分析師/商業分析師

八年工作經驗,跨不同業界解決數據需求。做過的案例都整理在作品集。

接下來可以

相關文章

查看所有文章

留言討論

共 0 則留言

訂閱電子報,新文章上線就通知你

免費,隨時可取消。

送出即表示同意服務條款與隱私權政策。