Excel 會把儲存格內的換行符號,儲存成五種被辨識的權杖類型之一:CRLF(CHAR 13 + CHAR 10)、單獨的 CR(CHAR 13)、單獨的 LF(CHAR 10)、U+2028 行分隔符號,以及 U+2029 段落分隔符號。要移除它們,需要使用內建公式做法、搭配 Ctrl+J 技巧的「尋找及取代」對話方塊,或是一個能一次抓齊每一種形式的本機瀏覽器工具。每一種做法,對其餘文字留下的痕跡都不同。Excel 原生的方法,只會正規化 Excel 自己會產生的那兩種換行符號,這代表從網頁、PDF 或較舊的 Mac 檔案複製過來的字元,不論你套用多少公式都可能存活下來。專用的換行符號工具會辨識全部五種權杖形式,把 CRLF 當成單一組合權杖而非兩個,並確切回報偵測到、已移除,以及仍剩餘的數量,讓你能對照來源驗證清理結果。
對大多數 Excel 使用者來說,第一個直覺反應是加寬欄位,或開啟「自動換行」。這只能修好看得見的表徵,對底層字元完全沒有作用,這些字元仍然會讓 SEARCH、FIND、LEN 與 TEXTJOIN 這類公式出錯。接下來的段落會依序說明:換行符號一開始為什麼會出現在儲存格資料中、Excel 本身能怎麼移除它們,以及當 Excel 自己的工具做不到時,該如何在瀏覽器中完成剩下的工作。

換行符號實際上是如何出現在 Excel 儲存格中的
當你在儲存格中按下 Alt+Enter 時,Excel 會插入一個 LF 字元(CHAR 10)。「自動換行」依賴的正是這個單一字元,這也是 Excel 透過一般鍵盤輸入唯一會產生的換行符號。其餘的權杖類型,都是從外部進來的:
- CRLF出現的情況,是從 Windows 剪貼簿內容貼上儲存格,而這些內容原本來自 HTML、CSV 匯出,或是那些一律用兩個字元共同結束每筆紀錄的系統。
- 單獨的 CR會出現在從較舊版本的 Mac(OS X 之前)匯出的文字、大型主機報表,或某些資料饋送中。
- U+2028 行分隔符號與U+2029 段落分隔符號,則是透過從文書處理軟體複製的文字、JSON 匯出,或算繪引擎使用這些分隔符號而非 CRLF 的 JavaScript 產生內容進入儲存格。
這一點之所以重要,是因為之後當你依換行符號拆分欄位、計算字元數,或把儲存格內容送進 TEXTJOIN 時,分隔符號的選擇會改變結果。用 CHAR(10) 的 TEXTJOIN 會完全跳過 U+2028,讓看起來像是兩行的內容,被彆扭地以逗號連接在一起。要讓清理結果可預期,唯一的方法就是辨識出每一種形式。
Excel 內建移除換行符號的方式
Excel 提供三種可靠的內建做法。每一種都只處理五種權杖類型中的不同子集,這正是大多數「怎麼沒用」抱怨的根源。
搭配 Ctrl+J 的「尋找及取代」
- 選取你要清理的儲存格。按下Ctrl + H開啟「尋找及取代」。
- 點進Find what欄位,按下Ctrl + J。這個欄位看起來是空的,因為 LF 是不可列印字元,但它已經被輸入進去了。
- 在Replace with欄位中輸入一個空格,把每個換行符號都換成空格,或把欄位留空,直接把行合併起來。
- 點擊全部取代。Excel 會回報在目前選取範圍內完成了多少次取代。
這個做法能抓到 CRLF、單獨的 CR,以及單獨的 LF,因為「尋找及取代」是在字元層級運作的。它抓不到 U+2028 或 U+2029,在回報次數時,也無法區分不同的換行符號類型。
SUBSTITUTE 公式
SUBSTITUTE 一次處理一個字元,是在保留原始儲存格不變的同時,於輔助欄中產生清理後副本最乾淨的方式:
- =SUBSTITUTE(A1, CHAR(10), " ") 會把 LF 換成空格。
- =SUBSTITUTE(A1, CHAR(13), "") 會移除 CR。
- =TRIM(SUBSTITUTE(SUBSTITUTE(A1, CHAR(13), ""), CHAR(10), " ")) 會把 CRLF 拆成兩個步驟處理,並修剪多餘的空格。
這些公式碰不到 U+2028 或 U+2029,因為 CHAR() 只能產生到 255 為止的數值。要清除這些 Unicode 分隔符號,在現代版本的 Excel 中,需要使用能感知 Unicode 的函式,例如 U+2028 用 UNICHAR(8232),U+2029 用 UNICHAR(8233)。
CLEAN 函式
=CLEAN(A1) 會清除前 32 個不可列印的 ASCII 字元,其中包括 CHAR(13) 與 CHAR(10)。它不會影響 U+2028 或 U+2029。當你只需要移除換行符號,並想保留其他空白字元原樣時,可以使用它。
每種方法各自的不足之處
這種模式在三種 Excel 原生方法中一致存在:它們都能處理 CHAR(10) 與 CHAR(13),通常需要為 CRLF 額外執行一次,並完全忽略 Unicode 的行與段落分隔符號。再加上以下實務上的限制:
- 「尋找及取代」只作用於選取範圍。如果工作表有數百欄,你就得重複操作。
- SUBSTITUTE 公式會佔用一個輔助欄,而且必須先向下複製,之後才能刪除。
- CLEAN 會保留其他字元不動,但無法針對單一分隔符號類型做出精確計數。
當資料是從網頁、PDF,或由 JavaScript 算繪的文件中複製過來時,你在視覺上看到的換行符號,可能隱藏著這五種權杖類型的混合。一個能辨識每一種形式並回報準確計數的工具,能給你一個可驗證的結果,而不只是一個充滿希望的猜測。
| 方法 | CRLF | 單獨的 CR | 單獨的 LF | U+2028 | U+2029 |
|---|---|---|---|---|---|
| 搭配 Ctrl+J 的「尋找及取代」 | 是 | 是 | 是 | 否 | 否 |
| SUBSTITUTE(CHAR(10)) | 部分 | 否 | 是 | 否 | 否 |
| SUBSTITUTE(CHAR(13)) | 部分 | 是 | 否 | 否 | 否 |
| CLEAN | 是 | 是 | 是 | 否 | 否 |
| Line Break Remover | 是 | 是 | 是 | 是 | 是 |
透過瀏覽器工具處理一段 Excel 範圍
Line Break Remover完全在瀏覽器分頁內執行,最多可接受 1,000,000 個 UTF-16 碼元,並在每次執行後回報偵測到、已移除,以及剩餘的權杖數量。當你已經把範圍複製到剪貼簿,並想一次性貼回 Excel 時,可以使用它。
- 在 Excel 中開啟你的活頁簿,選取包含不需要的換行符號的儲存格。
- 用Ctrl + C複製選取範圍。
- 把內容貼進 Line Break Remover 的輸入區域。
- 從三種模式中選擇一種:適合應該連成一行的散文,使用Replace with one space;適合可以接受把字詞合併在一起的紀錄型數值,使用Remove completely;適合空白行用來分隔段落有意義的內容,使用Preserve paragraphs。
- 點擊處理動作以執行轉換。結果面板會更新為輸出內容,統計列會顯示三個數字:偵測到的權杖、已移除的權杖,以及剩餘的權杖。
- 點擊Copy output。如果瀏覽器封鎖了剪貼簿存取,就在結果面板中手動選取文字。
- 回到 Excel,選取原始範圍的第一個儲存格,用Ctrl + V把清理過的文字貼回原位。
剪貼簿這個步驟是非同步的:如果你在點擊複製之後又編輯輸入內容或變更模式,先前的確認就會失效,只有最新一次的操作能成功。結果會一直保持可見,直到你變更輸入內容或模式為止,這讓你有時間在貼回之前先做驗證。輸入額度會在任何配置動作之前先執行檢查,因此超過一百萬個 UTF-16 碼元的貼上動作,會收到明確的拒絕訊息,而不會被靜默截斷。
為你的資料選擇正確的模式
這三種模式,對於會改變什麼、會保留什麼,都說得很清楚。選錯模式,要麼會在資料中留下換行符號,要麼會在你需要保留段落結構時把它們移除。
| 模式 | 每個被辨識的權杖會發生什麼事 | 最適合 |
|---|---|---|
| Replace with one space | 每個 CRLF、CR、LF、U+2028、U+2029 都會變成一個一般空格。來源中重複的空格仍會維持重複。 | 硬換行的散文、儲存格內的句子片段,以及空格是正確分隔符號的地址。 |
| Remove completely | 每個權杖都會被刪除,不做任何取代。只由換行符號隔開的單字會直接合併在一起。 | 機器可讀的 ID、來源中被自動換行拆開的代碼,以及間距原本就沒有意義的匯出數值。 |
| Preserve paragraphs | 單一權杖會變成一個空格。連續兩個以上的權杖,會變成恰好兩個 LF 字元,正規化為一個空白行邊界。 | 匯入的段落內容,其中段落之間的空白行有意義,但單一的軟換行沒有意義。 |
這個工具絕不會修剪開頭或結尾、壓縮重複的空格、展開定位字元、改變不斷行空格、正規化 Unicode 文字,或改動標點符號與字母。正是這項規則,讓輸出結果能安全地貼回 Excel:只有被辨識出的換行符號權杖會被改變。
工具能辨識的權杖類型
這五種被辨識的權杖,在 JavaScript 與 ECMAScript 詞法語法規範中,被記載為標準的行結束符:
- CRLF(U+000D U+000A)——計為單一組合權杖,而不是兩次移除。
- 單獨的 CR(U+000D)——常見於較舊的 Mac 文字與某些大型主機匯出內容中。
- 單獨的 LF(U+000A)——正是 Excel 本身用 Alt+Enter 插入的字元。
- U+2028 行分隔符號——常見於由 JavaScript 算繪的文字與 JSON 匯出內容中。
- U+2029 段落分隔符號——常見於使用這對 Unicode 分隔符號的文件系統中。
根據 ECMAScript Language Specification 中關於行結束符的說明,這五個字元被視為各自獨立的權杖類型,而不是可以互換的換行方式,這正是為什麼一個以計數為基礎的工具,能給你一個精確的答案,而不是一個大概的估計。
用 Excel 公式驗證清理結果
結果進入剪貼簿之後,貼回你原本複製的同一個範圍。如果你需要保留原始儲存格不變,可以用「選擇性貼上 > 僅值」貼進一個空欄,再用 =LEN(B1) 對照 =LEN(A1) 進行驗證:只要真的移除了任何換行符號,乾淨的取代結果就會產生較小的長度數值。執行 =ISNUMBER(SEARCH(CHAR(10), B1)) 來確認沒有殘留的 LF,如果你的來源可能包含 U+2028 或 U+2029,也對 CHAR(8232) 與 CHAR(8233) 做同樣的檢查。
要對工具本身做健全性檢查,可以把已移除的權杖數量,與貼回之後觀察到的長度差異互相比對。在最近一次執行中,輸入內容含有三段各由三個連續權杖組成的段落邊界,段落模式的輸出結果回報的數字是:偵測到 9 個、移除 3 個、剩餘 6 個。9 = 3 + 6 這個算式成立,是因為每一段三個權杖的序列,都會被轉換成恰好兩個 LF 字元,每段移除一個權杖。
什麼時候該留在 Excel 裡處理
當資料都在同一欄中,而你只需要移除 CHAR(10) 字元時,請繼續使用 Excel 原生方法。當範圍很寬、來源不明,或你需要一個可驗證的、確實已移除數量的計數時,瀏覽器路徑就值得一用。對幾百列的一次性清理來說,在輔助欄中使用 SUBSTITUTE 更快。對其他所有情況來說,透過一個能辨識權杖的工具「複製-貼上-再貼回」,能給你一個可以對照來源稽核的結果。
如需更深入的說明,請參閱Count Lines in Excel Without Writing a Formula。
如需更深入的說明,請參閱Convert Number to Words in Excel in Rupees。