從 Google 試算表的文字中擷取數字,意思是從一個儲存格或一整個儲存格範圍中,把每一個數值標記全部抽出來——這些範圍通常還夾雜著文字、標點符號、貨幣符號、百分比或亂七八糟的字元——然後把這些數字整理成一份乾淨的清單,或是以數量、總和、最小值、最大值和平均值的形式回傳,讓你可以直接貼回工作表。這件事之所以比看起來還難,是因為真實的試算表資料很少是整齊的。一個叫做「備註」的欄位可能塞著像「訂單 #12345 共 3 件,每件 $48.50,總計 $145.50,於 2024-01-15 出貨」這樣的字串;從 CRM 匯入的單一儲存格,可能把日期、發票號碼、數量、價格和百分比全混在一起,中間還沒有任何分隔符號。內建函式像 VALUE 一次只能轉換一個值,REGEXEXTRACT 只抓它找到的第一個符合項目,而用 MID、FIND、LEN 和 IFERROR 手工拼出來的陣列,只要遇到第二或第三個數字就會整個崩潰。大多數人真正想要的,是一個能夠一次把整段文字走完、依照一組明確規則辨識出每個數字、然後把結果以一行一個,或以數量、總和、最小值、最大值和平均值形式回傳的工具。

extract numbers from text in google sheets
一次到位:從 Google 試算表文字中擷取數字

為什麼 Google 試算表的儲存格這麼難擷取數字

Google 試算表是為結構化表格設計的,而它內建的文字轉數字函式,都預設「一個儲存格等於一個數字」。一旦儲存格打破這個假設——而匯入的資料幾乎都會這樣——公式就會開始不準。

最常造成困擾的三種情境:

  • 匯入的 CRM 或客服系統資料,其中「備註」或「說明」欄位把客戶留言、訂單編號、電話號碼和日期全部塞進同一個儲存格。
  • 發票明細或訂單摘要,單一儲存格可能同時包含數量、單位、價格和小計,有時前面有貨幣符號,有時則沒有。
  • 問卷回覆與表單提交內容,自由填寫欄位會把年齡、數量或時間長度的答案,和「around」、「approx」或「x」這類字眼混在一起。

一般人會直接寫一個 REGEXEXTRACT 公式。它能抓到第一個數字,卻會在第二個數字上悄悄失敗——偏偏那才是真正重要的儲存格。用 MID、FIND、LEN 和 IFERROR 堆出來的陣列雖然能勉強擠出所有數字,但公式會變得很長、難以稽核,而且只要正負號、千分位分隔符或某個符號稍微換個位置,就會立刻壞掉。更合適的做法,是讓一個工具一次掃完整段內容,然後回報它找到多少數字,這樣在貼回工作表之前,你可以先核對輸出是否符合預期。

在混合文字中,什麼才算一個數字

擷取規則之所以重要,是因為定義錯了就會默默漏值或憑空生值。這個擷取工具的文法規則是直接寫在頁面上、而不是憑感覺猜的,而且每條規則都可以切換,讓你配合眼前的資料。

整數與小數預設就能辨識,包括用前置減號、前置加號寫成的負數,以及像 .5 或 -.25 這種沒有前置零的裸小數。正負號的規則刻意做得嚴格:減號只有在確實接在數字前面——也就是在行首、空格之後、或開括號和比較符號之後——才會保留。這就是為什麼算式 5-3 會回傳 5 和 3,以及「(5)」會回傳 5 而不會被當成錯誤。千分位分隔符在格式正確時會被正確辨識,所以 1,000,000 會被視為一個數字,而不是三個片段。另一個獨立的切換鈕可以切換到「逐字取數字」模式,適用於像歐洲小數寫法 1.234,56 這種逗號用途不同的資料。

科學記號有自己獨立的切換鈕,預設是關閉的,因為在一般文字中,1e5 通常是打錯字或某個代號,而不是十萬。嵌在其他文字中的數字,無論位置在哪裡都會被擷取出來:item123 會得到 123、$19.99 會得到 19.99、50% 會得到 50。數字擷取工具的工作就是把每個數字找出來,而不是去評論它的上下文。範圍只限 ASCII 數字。全形數字和其他文字系統的數字符號不會被擷取,頁面上也有明寫出來,而不是做半套的支援。「去除重複」切換鈕會把重複出現的值合併,但保留第一次出現的順序,這在處理同一份貼上內容中同一數量多次出現的報表時特別好用。

輸入輸出套用的規則
1,000,0001000000千分位分隔切換鈕開啟時,辨識格式正確的千分位群組
5-35 和 3減號只有在行首、空格之後或開括號之後才會保留
$19.9919.99貨幣符號後嵌入的數字
50%50百分號前嵌入的數字
item123123字母後嵌入的數字
1e5不擷取科學記號切換鈕預設為關閉

如何從 Google 試算表文字中擷取數字

在試算表之外作業,能讓你維持清楚的分工:Google 試算表依然是資料的唯一來源,而 從文字中擷取數字 工具則把一件事做好。它完全在瀏覽器中執行,所以不會上傳、不會儲存,也不會綁定任何帳號。

  1. 複製儲存格或整欄。在 Google 試算表中選取範圍,用 Ctrl+C 或 Cmd+C 複製,然後切換到擷取工具。
  2. 貼到輸入區。這個工具單次輸入最高可接受一百萬字元,且以單一線性掃描處理,所以大量貼上也能瞬間完成。
  3. 依資料需要調整規則。如果貼上的內容包含像 1e5 這類值,請開啟科學記號;如果你的資料用逗號當小數點,請關閉千分位分隔;如果想合併重複值並保留首次出現順序,請開啟「去除重複」。
  4. 選擇清單或統計輸出。清單模式會一行回傳一個數字,也可選擇以逗號分隔。統計模式會以標準雙精度浮點運算,回傳數量、總和、最小值、最大值和平均值。
  5. 確認找到的數量並複製結果。每次擷取都會回報找到多少個數字,所以在複製之前,你可以先核對輸出是否符合預期。接著把結果貼回 Google 試算表的新增欄,或餵給樞紐分析表、圖表使用。

統計區塊:數量、總和、最小值、最大值、平均值

如果要算總和,統計模式通常比一長串清單更實用。從銷售報表複製一整欄混合文字,切換到統計輸出,工具就會在同一頁回傳數量、總和、最小值、最大值和平均值。

有個值得了解的細節:JavaScript 使用雙精度浮點數進行運算,這是每個現代瀏覽器在一般數學運算時的做法。乾淨小數的總和,可能在精度範圍的最末端帶有像 0.0000000000001 這樣微乎其微的殘餘,大致落在第十五個有效位數左右。數量則永遠是精確的;若輸入中沒有可辨識的數字,系統會如實回報為零,而不是當成錯誤處理。這種對限制的誠實,比一個看似漂亮卻會誤導的數字更實用。對發票總額、客戶數量、記錄檔行測量值、問卷彙總這類用途來說,殘餘值遠遠落在任何讀者會在意的範圍之外,而數量本身就能獨立驗證結果。

超越第一輪掃描:讓公式出錯的邊界案例

那些總是讓試算表公式出錯的情境,正是這個擷取工具設計來處理的對象。

同一個儲存格裡有多個數字。「Order #12345 shipped 3 boxes at $48.50 each, total $145.50, delivered on 2024-01-15」會回傳 12345、3、48.50、145.50、2024、1 和 15。一個只抓數字串的正規表示式會停在第一個命中;而這個工具會走完整個儲存格。

貨幣與百分比。$19.99、€1.250、50% 和 9,99 € 都會回傳它們的數值,因為規則就是擷取每個數字,而不是判斷上下文。

負數與算式。算式 5-3 會回傳 5 和 3,而不是 5 和 -3,因為減號夾在兩個數字中間,並不是接在第二個數字前面。真正的負數,例如 -12 或開頭就是 -3 的那一行,則會以負數形式保留。

嵌入的數字。item123、version2.4、page 17 和 AB-009-CD 都會回傳它們的數值標記。如果那些嵌入的數字其實是你想忽略的料號,「去除重複」和輸出切換鈕並不能取代清理來源資料,但這個擷取工具至少會把資料裡有什麼顯示給你看——這正是擷取工具該做的事。

與 REGEXEXTRACT 的比較。像 \d+(\.\d+)? 這樣的樣式,每個儲存格只能抓到一個數字;在每格剛好只有一個數字時夠用,只要不是這樣就完全派不上用場。一個穩健的工作流程是:先擷取一次,再把結果貼回去,讓工作表本身保持簡單、方便稽核。

這個工具刻意不做的事

一個值得信賴的擷取工具,它的規則是你讀得到的。頁面上明列出四件它不做的事,事先講清楚能讓輸出更容易解讀。

  • 不做貨幣轉換。$48.50 無論前面是什麼貨幣符號,都會被視為 48.50;£48.50 和 €48.50 同樣都是 48.50。匯率是詮釋,不是擷取。
  • 不辨識單位。5kg、5 miles 和 5 °C 都只是 5。要的是數值標記本身。
  • 不做日期解析。2024-01-15 會被拆成 2024、1 和 15,而不是一個日期。日期是疊加在數字之上的詮釋。
  • 不憑空猜測。如果輸入中沒有可辨識的數字,工具會回報空白結果,而不是捏造一個預設值。

最後這一點,其實在實務上最為好用。空白輸出代表該欄位全是文字;有數字輸出則清楚告訴你抽出了多少個標記,讓你在採用任何下游總和之前,先比對這個數量是否符合預期。

想進一步了解,請看 如何從 WhatsApp 群組中擷取電話號碼。

想進一步了解,請看 特殊字元複製貼上速查表。