KutoolsforOffice — 一套方案,五大工具。事半功倍。三月特賣:20% 折扣

如何在 Excel 中,當相鄰儲存格非空白時自動為列編號?

作者Xiaoyang修改日期
若相鄰儲存格非空白,則自動編號列

在 Excel 中,使用填滿控點手動建立數字序列是產生清單序號或索引的常見做法。然而,您可能經常遇到這樣的情況:僅當相鄰儲存格含有資料時,才希望對該列進行編號。例如,您或許希望在清單中自動產生對應的行號,但若相鄰的資料儲存格為空,則跳過編號。此外,您可能還期望這些編號能在輸入或刪除資料時立即自動更新,始終維持最新序列,無需任何手動調整。

使用公式自動在相鄰儲存格非空白時對列編號

使用 VBA 程式碼自動在相鄰儲存格非空白時對列編號


藍色右向箭頭氣泡使用公式自動在相鄰儲存格非空白時對列編號

根據相鄰儲存格的內容實現動態列編號的有效方法,是運用 Excel 公式。此方法能確保僅在相鄰儲存格含有資料時,才顯示對應的行號;當您在這些儲存格中新增或刪除資料時,編號也會自動更新,隨時保持同步。以下為您整理出幾種實用做法:

1. 選取您希望開始編號的儲存格(例如,若您的資料從 )B2 開始,請選取 A2),並輸入下列公式:

=IF(B2<>"",COUNTA($B$2:B2),"")
提示:此公式會檢查儲存格 B2 是否非空白。若 B2 包含資料,則計算從 B2 到目前列之間所有非空白儲存格的數量,為包含值的列建立連續序列。若 B2 為空,公式會傳回空白,使序列儲存格保持空白。

2. 接下來,沿著您的資料向下拖曳填滿控點,即可將公式套用至其他列。編號會自動調整,僅在 B 欄有資料的列顯示數字。

若非空白則使用公式自動編號

注意:此方法特別適用於隨時可能插入、刪除或修改新資料的清單,因為序列始終能保持準確,無需任何手動重新編號或重新計算。但請注意,若空白儲存格屬於您資料的一部分(例如有意留空),這些列將不會被編號。

若您發現編號未如預期自動更新,請確認公式已正確複製至所有相關列,並確保範圍內沒有合併儲存格或資料驗證規則造成干擾。請留意,公式運作仰賴精確的參照,一旦工作表結構有所變動,便可能導致其失效。


藍色右向箭頭氣泡使用 VBA 程式碼自動在相鄰儲存格非空白時對列編號

對於進階使用者,或當您不想將公式套用至整個工作表,又或者需要在貼上資料、刪除區塊或頻繁變更版面時仍能自動更新編號的情況下,VBA 巨集提供了一個極具吸引力的替代方案。透過 VBA,您可以在每次編輯相鄰儲存格時,自動更新指定欄位中的行號,完全無需依賴公式。這特別適合用於資料輸入表單、匯入記錄,以及經常調整版面配置的任務清單。

1. 按下 Alt + F11,立即開啟 Visual Basic for Applications 編輯器視窗。在專案總管中找到您的活頁簿,並於「Microsoft Excel 物件」下雙擊相關工作表(例如「Sheet 1」)。

2. 在出現的程式碼視窗中貼上下列程式碼。此範例假設您希望根據 B 欄是否為非空白,來對 A 欄的列進行編號;如有需要,可針對特定範圍調整參照:

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim chk As Range
    Set chk = Intersect(Target, Me.Columns("B"))
    If chk Is Nothing Then Exit Sub
    
    Application.EnableEvents = False
    Call RenumberNonBlank(Me, "B", "A", 2)
    Application.EnableEvents = True
End Sub
Sub RenumberNonBlank(ws As Worksheet, _
                    keyCol As String, _
                    numCol As String, _
                    firstDataRow As Long)
    Dim lastRow As Long
    Dim r As Long
    Dim seq As Long
    lastRow = ws.Cells(ws.Rows.Count, keyCol).End(xlUp).Row
    seq = 1
    For r = firstDataRow To lastRow
        With ws
            If Trim(.Cells(r, keyCol).Value) <> "" Then
                .Cells(r, numCol).Value = seq
                seq = seq + 1
            Else
                .Cells(r, numCol).ClearContents
            End If
        End With
    Next r
End Sub

3. 保存並關閉 VBA 編輯器。現在,每當您於 B 欄新增、編輯或清除內容時,A 欄會立即自動重新編號,精準反映資料的存在(或缺失);當您於 B 欄新增或移除項目時,序列也會即時向上或向下調整!

注意事項與預防措施此巨集必須明確置入目標工作表的程式碼視窗中(而非標準模組或 ThisWorkbook),方能即時回應儲存格的編輯操作。此外,請務必確認已在 Excel 設定中啟用巨集,以確保程式碼順利執行。若您的「數據區域」已移至 A 欄與 B 欄以外的位置,請同步調整 Set chk = Intersect(Target, Me.Columns("B"))Call RenumberNonBlank(Me, "B", "A", 2) 中的欄位參照,以維持功能正常運作。

疑難排解:若編號未更新,請再次確認您正在編輯正確的工作表,且程式碼已置入對應的工作表程式碼視窗中。同時,請務必將活頁簿儲存為啟用巨集的檔案(.xlsm)。若出現非預期錯誤,請檢查是否變更了工作表結構,例如合併儲存格或標題列中的資料。


最佳 Office 生產力工具

🤖KUTOOLS AI 助手:基於以下內容徹底革新數據分析:智慧執行     產生程式碼  建立自訂公式    分析資料並產生圖表  呼叫增強函數……
熱門功能尋找、醒目提示或標記重複值     刪除空白行     合併列或儲存格而不遺失資料     不使用公式的四捨五入……
高級 LOOKUP多重條件 VLookup    多重數值 VLookup     跨多個工作表 VLookup      模糊查找……
高級下拉列表快速建立下拉式清單     相依式下拉式清單     多選下拉式清單……
欄位管理員新增指定數量的欄位移動欄位切換隱藏欄位的可見狀態比較範圍與欄位……
精選功能網格聚焦     設計視圖   增強編輯欄    工作簿與工作表管理員     資源庫(自動文字)  日期提取     合併工作表    加密/解密儲存格    依清單傳送電子郵件     超級篩選      特殊篩選(篩選粗體儲存格/斜體/刪除線……) ......
頂尖 15 工具組12 文字工具添加文本刪除特定字符,……)   50+ 圖表 類型甘特圖,……)   40+ 實用公式基於生日計算年齡,……)   19 插入工具插入二維碼從路徑插入圖片,……)   12 轉換工具金額轉大寫匯率轉換,……)   7 合併和拆分工具高級合併行分割儲存格,……)……以及更多
在您的慣用語言中使用 Kutools—支援英文、西班牙文、德文、法文、中文及另外 40+ 種語言!

運用 Kutools for Excel 強化您的 Excel 技能,體驗前所未有的高效能!Kutools for Excel 提供超過 300 項進階功能,大幅提升生產力並節省寶貴時間。立即點擊,取得您最需要的功能……


Office Tab 為 Office 帶來分頁式介面,讓您的工作更輕鬆自在!

  • 在 Word、Excel、PowerPoint 中啟用分頁式編輯與閱讀功能,以及 Access、Visio 與 Project。
  • 在同視窗的新分頁中開啟並建立多份文件,而非另開新視窗。
  • 每天為您提升 50% 的工作效率,並省下數百次滑鼠點擊!

所有 Kutools 增益集,一個安裝程式

Kutools for Office 套件整合了 Excel、Word、Outlook 與 PowerPoint 的增益集,以及 Office Tab Pro,非常適合需要跨多個 Office 應用程式協作的團隊使用!

ExcelWordOutlookTabsPowerPoint
  • 全能套件— 包含 Excel、Word、Outlook 與 PowerPoint 增益集,以及 Office Tab Pro
  • 一個安裝程式,一個授權— 數分鐘內即可完成設定(支援 MSI)
  • 協同運作更出色— 在多個 Office 應用程式間實現流暢的生產力體驗
  • 30 天完整功能試用— 無需註冊,無需信用卡
  • 超值之選— 比單獨購買各增益集更省費用