要在 Excel 中計算行數,你可以在工作表裡寫一條 LEN/SUBSTITUTE 公式,也可以把文字貼出來,讓瀏覽器工具替你完成運算。公式的做法,計算的是單一儲存格內的換行數;瀏覽器的做法,計算的則是你剪貼簿上任何內容的完整行結構,不論那是從工作表複製出來的一欄、一個帶有 Alt-Enter 換行的儲存格內容、一份 CSV 匯出檔,還是一欄由 TEXTJOIN 拼接而成的合併文字。這兩種做法都可行,但它們回答的是不同的問題,而許多 Excel 使用者其實需要的是後者,卻不自知。如果你曾經把工作表裡的一欄貼進記事本,只是為了看看自己到底有幾筆資料,或懷疑自己複製的那一列是不是多了一行尾端空白,答案就是一個能在你瀏覽器中於本機執行、能立即回傳四項指標的行數計算工具,讓你在它運算的同時,仍然可以繼續在 Excel 中工作。

how to count lines in excel
how to count lines in excel

為什麼光靠 Excel 本身計算行數會很麻煩

Excel 並沒有內建一個一鍵就能算出「這個選取範圍有幾行」的指令。教科書上的變通做法,是一條形如=LEN(A1)-LEN(SUBSTITUTE(A1,CHAR(10),""))+1的公式,它回傳的是單一儲存格內換行的數量再加一。這在應急時可行,但在你把它套用到一整欄之前,值得先了解它真正的限制。

  • 它只看得到你指定的單一儲存格。要計算整欄的行數,就得把公式往下拖曳,或把它包在 SUMPRODUCT 裡。
  • 它只計算 LF 字元(CHAR(10))。貼進來的 Windows CRLF 序列,即使技術上是兩個位元組,在 Excel 中也只會被算作一個換行。
  • 它不會告訴你這個儲存格是否以尾端換行結束,而這正是總數多算或少算一個的最常見原因。
  • 它完全不會告訴你哪一行最長,而這對欄寬、自動換行,或匯入格式的決定都很重要。

如果你的文字是透過複製貼上、CSV 匯出,或用 TEXTJOIN 把多列拼接起來後從 Excel 取出的,你通常想要的是這個結果的行數,而不是單一儲存格的行數。一個能一次讀取整個剪貼簿內容的本機瀏覽器工具,就能消除這個限制。如果你需要的是反方向的操作——把單一儲存格中自動換行的文字還原成一行——Excel line-break removal guide涵蓋了這種工作流程。

Line Counter 實際測量的是什麼

Line Counter 會針對你貼進編輯器的任何內容,顯示四個數字:總行數、非空白行數、空白或僅含空白字元的行數,以及最長一行的長度。總行數、非空白行數與空白行數三者永遠能對得上,因為依定義,總行數就等於非空白行數加上空白行數。這個加總檢查,是你確認這個工具是否正確理解你輸入內容最快的方法。空白輸入被定義為零行,因此一個清空的編輯器並不是「一個空白行」,而是完全沒有行。

最長一行的數字,標示的單位是碼點,而不是字元或位元組,而這個標示很重要。一個位於輔助平面的 😀 表情符號,在記憶體中佔用兩個 UTF-16 code unit,但在這裡只算一個碼點;一個分解後的帶重音字母,例如e後面接上一個組合用的銳音符,即使呈現出來只是一個字符,也會被算作兩個碼點。這項指標計算的不是字符集群數、視覺寬度、終端機欄數,也不是磁碟上的位元組數。

用三個步驟計算 Excel 文字的行數

  1. 把文字從 Excel 複製出來。 選取儲存格、整欄,或單一多行儲存格,然後按 Ctrl+C。如果你的流程最終是匯出工作表,請用「另存新檔」→「CSV (UTF-8)」,再用文字編輯器開啟產生出來的 .csv 檔案,這樣你就能複製看得到的那些列。
  2. 貼進 Line Counter 的編輯框。 直接把文字丟進這個方框。這裡沒有送出按鈕,也不會上傳任何內容;文字一落地,統計數字就會立刻更新。一切都在你的瀏覽器中於本機執行,因此剪貼簿內容絕不會離開這個分頁。
  3. 讀取這四項統計數字並互相核對。 確認總行數等於非空白行數加上空白行數,接著把最長一行的數字,拿去和你最寬那一列的寬度比對。如果總行數出乎你的意料,可以捲動到下方的規則段落,看看是不是尾端換行,或一個貼成單一 LF 的 CRLF,改變了計數結果。

如果你只是想針對同一份貼上內容做快速的字元或字數檢查,一個與 Line Counter 並排使用的character counter是最快的搭配方式,因為兩者都會隨著你編輯即時更新。

換行符如何改變你的總數

Excel 本身在儲存格內部是以 LF(CHAR(10))儲存換行的。然而一旦這段文字跨過剪貼簿,作業系統與接收端的程式就可能改寫它。從 Excel 貼到 Windows 上的記事本,通常會保留 LF;貼進 Word 文件或瀏覽器欄位,則可能把它正規化成 CRLF;從 Mac 版 Excel 活頁簿貼出來的內容,則可能帶有單獨的 CR。Line Counter 這三種都能接受,並把每一種都當作恰好一個邊界處理:

輸入內容總行數非空白空白
空白的編輯器000
alpha(沒有尾端換行)110
alpha + 一個 LF211
單獨一個 CRLF202

CRLF 會被當作單一個分隔符,絕不會被算成兩個。同一份貼上內容中混雜不同的換行方式也能被接受,這在文字曾經在 Unix、Windows、傳統 Mac 與剪貼簿之間傳遞時很有用。尾端的換行邊界,永遠會產生一個最後的空白片段;這個計算工具絕不會默默捨棄它,即使你編輯器裡最後一行看起來像是有內容。這種一致性,正是 Excel 貼上內容有時會比你預期多出一行的主要原因。

空白行、非空白行與僅含空白字元的行

這個計算工具使用單一規則:如果 JavaScript 的 trim 讓一行變成空的,這一行就是空白行。空格、定位字元,以及瀏覽器能辨識的任何其他 Unicode 空白字元,全都算作空白。一行只含三個空格是空白行;一行在單一字母前後各有三個空格則是非空白行。原始字元不會從輸入內容中被移除,它們仍然會影響最長一行的長度,因此一列五十個空格,仍然會把最長一行的數字往上推,即使它會被算進空白行的總數中。

這種切分是精確的,並且依照文字的可見結構進行。如果你從 Excel 貼上的一欄,結尾是一個空白儲存格,你會在底部看到多出一個空白行。如果你貼上的一欄每一列都有可見文字,空白行數就會維持在零。如果你貼上一份手動建立、記錄之間夾雜零散空白列的 CSV,這些列會顯示在空白總數裡,總行數也會正好增加相同的數量。

正確解讀最長一行的數字

因為這項指標是以碼點計算的,第一次拿它和其他工具比較時,有三件事可能會讓你意外。一個 😀 表情符號是一個碼點,不是兩個,即使 JavaScript 在內部是用兩個 UTF-16 code unit 儲存它;同一個表情符號,在以 UTF-16 為基礎的計算工具中會被算成兩個字元,而在這裡則相當於一個位元組等值的長度。一個以零寬度連接符組合而成的家庭表情符號,包含好幾個碼點,卻只呈現為一個符號。一個定位字元是一個碼點,即使在等寬字型的編輯器中,它可能會呈現成四或八欄的寬度。以上這些都不是錯誤;它們是碼點指標刻意呈現的行為,而這個介面也在結果下方重複說明這項限制,避免讓人誤以為它代表視覺寬度。

輸入上限是一百萬個 UTF-16 code unit,這是與碼點指標分開測量的。一個表情符號可能會用掉其中兩個 code unit,卻只為最長一行的數字貢獻一個碼點。恰好等於上限的文字會被處理;只要超出上限一個 code unit,就會回傳錯誤,並清除先前的統計結果,不會顯示部分計數。若想針對同一份貼上內容取得字數與字元總數,把同樣的文字丟進專門的word counter,你就能看到針對你這份特定輸入,「字元」與「碼點」之間的差異。

若想更深入了解,請參閱How to Randomize a List in C# Without Writing Code