用 Excel 公式從文字中擷取數字,通常意味著一連串 TEXTJOIN、MID、ROW、INDIRECT 與 IFERROR 函數,巢狀套用在陣列公式中——而且即使能順利執行,也無法區分 $19.99 與 19.99、1,000,000 與三個獨立的數字,或是 5-3 與 -5。之所以有這麼多人搜尋這類公式最後都失望而歸,是因為 Excel 內建函數的設計是用來處理「已定義資料類型」的儲存格,而不是用來解析任意的文字內容。從文字中擷取數字是一款專為此用途打造的瀏覽器工具,正確地完成這項解析工作,並提供明確的開關來控制正負號、小數點、千分位分隔符號、科學記號,以及去重複處理,還內建一個統計區塊,可計算總和、數量、最小值、最大值與平均值。它完全在你的瀏覽器中執行,所以不會上傳任何資料,擷取出的數字會依據你所選擇的輸出模式,以逐行一筆、逗號分隔清單,或統計摘要的形式回傳。

為何 Excel 擷取數字的公式總是漏洞百出
傳統的做法是使用 MID 逐一走訪每個字元,再利用 ISNUMBER 判斷該字元是否為數字,最後用 TEXTJOIN 把符合的結果串接起來。實際的公式如下:
=TEXTJOIN("",TRUE,IFERROR((MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1)*1),""))
它能在純粹的數字字串上正常運作,但對於數字周圍的內容卻完全沒有判斷能力。它無法分辨一個減號到底是數字的一部分,還是算術運算式中的減法運算子。它會把每個逗號都視為分隔符號,所以 1,000,000 會被拆成三段斷掉的數字。它會去掉錢號,但卻不知道 US $ 31330.00 應該是一個完整的數字,而不是某個分數。它會默默地略過以科學記號表示的數字,而且無論是向下複製到整個欄位,或是在輸入格式改變時進行修正,都需要相當程度的儲存格維護工作。
對於日常工作就是從發票、問卷匯出檔、記錄檔或一次性的大段文字中抽取出數字的人來說,一個每次輸入一變就要重新修復的公式,根本不是合適的工具。較好的做法是採用一套規則明確、可切換、且經過文件化測試案例驗證的解析器——也就是 Excel 並未內建的那種解析器。
真正決定「什麼才算一個數字」的三條規則
每一個數字擷取器都必須回答三個問題:數字從哪裡開始、在哪裡結束,以及那些看起來像數字但其實不是的東西該怎麼處理。這款瀏覽器工具以明確的規則開關來回答這些問題,而不是依賴隱藏的假設。
| 規則範圍 | 預設行為 | 是否可切換 |
|---|---|---|
| 正負號 | 減號只在附加於數字時才會保留——也就是位於行首、空白之後,或左括號、比較運算子之後 | 是(正負號開關) |
| 小數 | 可辨識整數、小數、負值、前置加號,以及像 .5 這類獨立的小數 | 是(小數開關) |
| 千分位分隔符號 | 格式正確的分組(1,000,000)算一個數字;格式錯誤的分組則在錯誤處切開 | 是(分隔符號開關) |
| 科學記號 | 預設為關閉,因為在文字內容中 1e5 通常是打錯字或識別碼,而非十萬 | 是(科學記號開關) |
| 去重複 | 重複出現的值會依照首次出現的順序保留 | 是(去重複開關) |
| 字元範圍 | 僅限 ASCII 數字;全形數字以及其他文字系統的數字符號會原樣通過而不被擷取 | 範圍固定,並於頁面上標示 |
上表就是這份合約。頁面上每一次擷取都遵循它,舉例來說,處理減號的規則,也就是處理測試案例 5-3 時所使用的那一條。沒有任何隱藏在旗標背後的第二種解讀。
如何在三個步驟內從貼上的文字中擷取數字
這個工具只要三個簡短的步驟就能執行,無論你貼上多大篇幅的內容,同樣的三個步驟都適用。
- 把含有你想擷取之數字的文字貼到輸入框中。
- 視需要調整規則:正負號、千分位分隔符號、科學記號,以及去重複處理。預設值已可處理大多數常見情況。
- 選擇清單或統計輸出模式,檢查找到的數量,然後複製結果。
每一次擷取都會回報找到了幾個數字,所以在複製出去之前,輸出結果就能對照你的預期進行稽核。如果數量看起來偏少,最可能的原因是某條規則對你的輸入來說太嚴格——只要切換對應的開關,數字就會重新出現。如果數量看起來偏多,表示該規則對這份資料來說太鬆,把同一個開關切回去即可。
在同一頁面內從清單轉為統計資料
一旦數字擷取出來,你不一定要把它們複製到 Excel 才能看出端倪。統計輸出模式會從同一組數字回傳數量、總和、最小值、最大值與平均值,並在瀏覽器中以一般的 JavaScript 雙精度浮點數運算完成。
| 統計項目 | 意義說明 | 精度備註 |
|---|---|---|
| 數量 | 擷取出的數值總數 | 永遠精確 |
| 總和 | 所有擷取數值的合計 | 雙精度浮點數;在第 15 位有效數字可能帶有殘差 |
| 最小值 | 這組數字中的最小值 | 精確 |
| 最大值 | 這組數字中的最大值 | 精確 |
| 平均值 | 總和除以數量 | 與總和相同的殘差,並會一併傳遞 |
數量是精確的,因為完全不涉及四捨五入。總和與平均值可能帶有你在試算表合計中曾經見過的浮點數殘差:0.1 + 0.2 會顯示為 0.30000000000000004 而不是 0.3。對於發票總額、記錄檔的數值,以及量測範圍來說,這種誤差根本看不出來。頁面對這項限制據實以告,且只有在第十五位有效數字才會產生影響,這早已遠超過大多數貼上文字中數字實際會觸及的有效位數。
工具明確處理的特殊情況
有幾種輸入會讓臨時湊出來的擷取器踢到鐵板。這個工具對每一種情況都以文件化的規則來處理,而非憑感覺猜測,而這些規則正是解析器測試案例所依據的依歸。
| 輸入 | 文件化規則 |
|---|---|
| 5-3 | 得到 5 和 3,而非 5 和 -3,因為這個減號並未附加於其後的數字 |
| 1,000,000 | 當分組格式正確且千分位分隔符號開關開啟時,算作一個數字 |
| 1,00,000 | 在格式錯誤的分組處切開 |
| $19.99 | 19.99 |
| 50% | 50 |
| item123 | 123 |
以上都是已文件化的行為,而不是工具偶爾才會處理對的特例。頁面把這些行為列為規則合約的一部分,而解析器由超過二十個隨實作一起交付的測試案例所把關,因此頁面上的規則就是工具實際套用的規則。
一個快速的實際操作範例
要看這些規則實際運作的情形,請把以下這段簡短內容貼到工具中:
Order #12345 paid $19.99, change 0.01, total -5 (sample)
使用預設規則時,擷取出的清單為:
- 12345
- 19.99
- 0.01
- -5
四個數字,回報的數量為 4。-5 的前導負號之所以被保留,是因為它出現在空白之後。錢號、"paid" 這個字、沒有百分號的小數,以及結尾括號中的內容,全都會被捨棄,而不會干擾到旁邊的數字。開啟統計模式後,同樣的輸入會回傳:數量 4、總和 12360.00、最小值 -5、最大值 12345、平均值 3090.00。這些精確數值來自於工具本身——貼上同一行內容自行驗證即可。
該選 Excel 公式還是瀏覽器工具?
如果只是單一儲存格的純文字,Excel 陣列公式還算堪用,也有不少不錯的教學文章可參考。但如果是一次性的貼上內容,混雜了貨幣、百分比、識別碼與算術運算式,公式就會開始與你為敵。這個工具完全跳過公式,改為將輸入視為純文字,套用文件化的規則,並回傳乾淨的清單,或是可以直接貼入試算表的即時統計區塊。
對於想避開公式來處理其他文字工作的 Excel 使用者而言,同一個網站也提供了在 Excel 中不用公式計算文字出現次數的指南,採用相同的「工具優先」作法。
「從文字中擷取數字」屬於一個小型擷取工具家族的一員,該家族還涵蓋了電子郵件、網址與電話號碼的擷取。每一個工具都在本機執行,採用相同的單次掃描與同樣可稽核的數量回報機制,每一個工具也都由同類型的測試案例加以文件化,把數字文法的規則牢牢釘住。
延伸閱讀:如何在 Excel 中不用公式進行尋找與取代文字。