Excel 計算單字出現次數的方式,會依照這個字所在的位置而有兩種不同做法:COUNTIF(range, "*word*") 回傳的是範圍中有多少個儲存格內含這個字,而 SUMPRODUCT(--ISNUMBER(SEARCH("word", range))) 回傳的則是有多少個儲存格把這個字當作子字串包含在內。當個別儲存格內可能不只出現一次這個字時,這兩個公式單獨都無法回報這個字在整個資料集中總共出現了幾次——要得到這個數字,你需要一個更長、以 SUBSTITUTE 為基礎的公式,或者把儲存格複製出 Excel,貼到一個逐字比對工具中,讓它同時回傳總次數,以及每次符合結果從零開始計算的起始位置。這篇指南會依序說明留在 Excel 內部的公式做法,以及能給出精確位置的瀏覽器工具做法,接著再說明重疊與大小寫敏感這兩個控制項,是如何在大多數讀者意想不到的情況下,悄悄改變答案的。
對於自由格式文字分散在許多儲存格中的資料集來說,要在 Excel 裡計算單字出現次數,需要的不只是單一儲存格的公式。COUNTIF 裡的萬用字元,能告訴你有多少列含有這個字;SUMPRODUCT 能告訴你有多少列至少出現過一次。但除非你為每個儲存格加上 SUBSTITUTE 公式,或是把文字整個移出 Excel,否則這兩者都無法告訴你「the」在第 4 列出現了 14 次、在第 7 列出現了 3 次。

為什麼單靠 COUNTIF 會漏算儲存格內的單字出現次數
Excel 的三個計數函式,乍看之下可以互換使用,直到你注意到「計算儲存格」和「計算單字」之間的差異。COUNT 只計算數字。COUNTA 計算任何類型的非空白儲存格。COUNTIF 計算符合條件的儲存格,而預設情況下,這個條件是套用在整個儲存格的值上。如果儲存格 A1 裡是「the quick brown fox jumps over the lazy dog」這句話,而你寫下 =COUNTIF(A1:A1, "the"),Excel 會回傳 0,因為整個儲存格的值並不等於字串「the」。要強迫 COUNTIF 計算文字內部的單字,你需要加上萬用字元:=COUNTIF(A1:A1, "*the*") 會回傳 1,因為範圍中恰好有一個儲存格,內含前後可以是任何內容的「the」。這代表的是一個儲存格符合,而不是兩次單字出現。範圍更大時,=COUNTIF(A1:A100, "*the*") 回報的是 100 個儲存格中有多少個內含「the」——這仍然是儲存格計數,而不是單字計數。
如果你真正需要的是第二個數字——某個特定單字在整份資料中總共出現的次數,包括在單一儲存格內出現多次的情況——COUNTIF 沒辦法直接給你這個答案。你必須自己建立更進階的公式,或是把文字移出 Excel。
用 SUMPRODUCT 與 SEARCH 計算儲存格內的單字
計算有多少儲存格把某個特定單字當作子字串包含在內,標準的 Excel 公式會結合使用 SUMPRODUCT、ISNUMBER 與 SEARCH。它的形式是:
=SUMPRODUCT(--ISNUMBER(SEARCH("the", A1:A100)))
每一次 SEARCH 呼叫,會回傳「the」在每個儲存格中的位置,或是在找不到這個字時回傳錯誤值。ISNUMBER 會把這個結果轉換成 TRUE 或 FALSE。雙重一元運算子(--)會把這些布林值轉成 1 與 0,再由 SUMPRODUCT 把它們加總起來,得到至少出現過一次這個字的儲存格總數。SEARCH 預設是不分大小寫的;如果你想要區分大小寫比對,可以換成 FIND。
如果一個儲存格內這個字出現了不只一次,而你想計算每一次出現,公式就會變得更長。常見的形式是:
=(LEN(A1) - LEN(SUBSTITUTE(A1, "the", ""))) / LEN("the")
這個公式計算的是,當每一個「the」都被移除後,消失了多少個字元,再除以搜尋字詞的長度,得到那個單一儲存格內的出現次數。把它包在 SUMPRODUCT 裡,就能套用到整個範圍。SUBSTITUTE 預設是區分大小寫的;把 A1 包在 LOWER 裡,或使用 SUBSTITUTE(LOWER(A1), "the", "") 並與轉成小寫的搜尋字詞比較,就能做到不分大小寫比對。
如果搜尋字詞是放在某個儲存格中(例如 B1),而不是直接寫進公式裡,把公式中的字面字串換成 B1,並鎖定該參照:=SUMPRODUCT((LEN(A1:A100) - LEN(SUBSTITUTE(A1:A100, B1, ""))) / LEN(B1))。這樣一來,換成不同的搜尋字詞時,公式就能重複使用,不需要重寫。
計算貼上的 Excel 儲存格中的單字出現次數
對於單字分散在不同儲存格的範圍,或者你只是想把一整欄文字從 Excel 複製出來、計算單字出現次數,而不想重新建立公式的情況,一個以瀏覽器為基礎的逐字比對工具,能在本機完成這項工作。這個 Count Occurrences 工具最多可接受一百萬個字元的來源文字,尋找一個完全相符的字面字串,並回報總次數,以及前 100 個從零開始計算的起始位置。因為這個搜尋是逐字比對,句點、星號、方括號與表情符號都不需要跳脫處理——搜尋字串中的星號,就是在比對文字中的星號。
- 在 Excel 中,選取你想計算的儲存格,按下 Ctrl+C 複製。如果單字都在同一欄,就只複製那一欄;如果分散在一個範圍中,就複製整個範圍。
- 在瀏覽器中打開 Count Occurrences,把複製的儲存格貼到來源文字欄位中。列與列之間的換行會被保留,因此每一個 Excel 列,仍然會各自佔一行。
- 在搜尋欄位中輸入你想計算的確切單字。不要加上萬用字元或星號——這個搜尋是逐字比對,星號輸入進去,就只會比對文字中的星號本身。
- 如果大小寫有差別,就選擇區分大小寫的比對;否則就維持不分大小寫,讓「The」與「the」被視為相同。
- 如果你想知道這個字可能開始的每一個位置——這對序列分析很有用——就選擇重疊模式;如果你想知道一次簡單的尋找並取代操作會產生多少個獨立的相符結果,就選擇不重疊模式。
- 查看總次數,再捲動瀏覽前 100 個從零開始計算的位置,確切了解每一次相符結果從哪裡開始。
所有處理都在瀏覽器內完成。貼上的來源文字與搜尋字詞都不會被上傳,而且只要修改任何輸入內容或選項,舊的輸出結果就會被清除,避免過時的計數被誤認為是目前設定下的結果。
重疊模式與不重疊模式:為什麼同一次搜尋會得到不同的數字
重疊開關,是讀者在比較同一份輸入的兩個計數結果時,最常感到困惑的地方。在不重疊模式下,搜尋位置在每次相符之後,會往前推進整個搜尋字串的長度,因此在來源「aaaa」中尋找「aa」,會得到兩次相符,起始位置分別是 0 與 2。在重疊模式下,搜尋位置在每次相符之後,只會往前推進一個 JavaScript 字串單位,因此同樣的輸入會得到三次相符,起始位置分別是 0、1、2。以下是這兩種結果的一個實際範例:
| 來源文字 | 搜尋字詞 | 模式 | 總次數 | 位置 |
|---|---|---|---|---|
| aaaa | aa | 不重疊 | 2 | 0, 2 |
| aaaa | aa | 重疊 | 3 | 0, 1, 2 |
對於序列分析——計算重複字元、在日誌行中尋找重複的權杖,或是檢查一個較長字串內能有多少個子字串起始點——重疊模式是正確的選擇。若要檢查一次簡單的尋找並取代操作會產生多少次取代,不重疊模式才能反映該操作的實際行為。這兩種模式只有在搜尋字串無法與自身重疊時,才會給出相同的答案,例如在「theatre」中搜尋「the」:不論選擇哪一種模式,都只有一個有效的起始位置。
大小寫敏感度、位置數量上限,以及其他實務細節
有幾個小細節,會改變總次數與位置的行為方式;一旦你開始在不同工具之間、或是在 Excel 與瀏覽器之間比較結果,這些細節就會變得很重要。
- 區分大小寫模式,會逐字元比對輸入的字串。不分大小寫模式,會先依照英文語系的小寫規則,把來源文字與搜尋輸入都轉換過再比較,但回報的位置仍然是以原始文字為基準。
- 位置數字是從零開始計算的 JavaScript 字串偏移量。大多數一般的英文字元只占用一個偏移量。以代理對(surrogate pair)表示的字元——包括許多表情符號——會占用兩個 UTF-16 編碼單位,因此後續字元的偏移量,可能會比人類直覺認定的「下一個字元」多出一個單位。
- 總次數永遠是精確的。只會列出前 100 個起始位置,因此當相符結果非常密集時,位置清單會被截斷,但總次數仍然反映輸入內容中每一次相符的結果。
- 空白的搜尋字串會被拒絕,因為它會在每一個邊界都相符,產生模糊不清的結果。搜尋字串長度超過剩餘來源文字長度時,自然會回傳零。
- 這個工具不會裁剪來源文字、更改換行符號、壓縮空白字元,或改寫輸入內容。大小寫轉換只會套用在用於比較的副本上。
這些規則遵循標準的 JavaScript 字串行為。底層的搜尋機制會重複呼叫 String.prototype.indexOf,直到再也找不到相符結果為止,重疊模式每次前進一個單位,其他情況則前進整個搜尋字串的長度。
為你的需求挑選正確的做法
下表整理了哪一種做法適合哪一種 Excel 計數情境。如果你要計算的是斷詞後的單字數,而不是特定字串,請使用 Word Counter。如果你要的是取代相符結果,而不只是計算,請使用 Find and Replace。
| 情境 | 建議做法 |
|---|---|
| 計算內含某個特定單字(不限位置)的儲存格數 | 在 Excel 中使用 =COUNTIF(range, "*word*") |
| 計算把這個字當作子字串、至少出現一次的儲存格數 | =SUMPRODUCT(--ISNUMBER(SEARCH("word", range))) |
| 計算每個儲存格內的每一次出現,包括重複出現的情況 | =SUMPRODUCT((LEN(range) - LEN(SUBSTITUTE(range, "word", ""))) / LEN("word")) |
| 計算貼上的 Excel 文字中逐字相符的結果,並檢視位置 | 在瀏覽器中使用 Count Occurrences |
| 以斷詞方式計算單字數,而不是計算特定字串 | 在瀏覽器中使用 Word Counter |
如果你比較想留在 Excel 中,計算的是單純的單字數,而不是特定單字的出現次數,Excel 30 秒單字計數捷徑 這篇文章涵蓋了相關的情況。如果你要計算的是 Excel 中數字(而不是單字)的出現次數,另一篇 在 Excel 中計算數字出現次數 的指南,會說明對應的公式做法。
對大多數搜尋「如何在 Excel 中計算單字出現次數」的讀者來說,實際的做法是先判斷自己需要的是儲存格計數、子字串計數,還是總出現次數,再挑選符合這個特定需求的公式或工具。這三種算法針對同一份資料集,會給出不同的數字,而這個差異一旦有關係人問起,為什麼第 4 列在一份報告中顯示 14、在另一份報告中卻顯示 1,就會變得很重要。