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

如何在 Excel 中輕鬆排序數值,同時自動跳過空白儲存格?

作者Sun修改日期

在 Excel 中處理資料時,經常會遇到包含空白儲存格的清單。若您對這類清單使用標準的 Excel 排序函數(例如 )RANKRANK.EQ),空白儲存格通常會顯示錯誤或不理想的結果,導致資料更難解讀——特別是當您希望空白儲存格保持空白,而非出現錯誤值或被任意排序時。自動跳過空白儲存格並有效排序數值,不僅提升結果的清晰度與可用性,更讓您的試算表顯得專業、易讀!

顯示跳過空白儲存格後對數值進行排序的清單截圖

本文提供逐步說明,教您如何運用公式與 VBA 巨集達成此目標。延伸解決方案更包含參數詳解、實用技巧及疑難排解建議,助您輕鬆避開常見錯誤。


藍色右向箭頭氣泡使用公式以遞增順序排序數值,同時跳過空白儲存格

當您需要以遞增順序分配排序值,同時忽略空白儲存格時,常見做法是搭配多個輔助欄位與公式邏輯,確保排序過程自動跳過空值。

適用情境:當您希望產生由低至高的遞增排序,同時保留空儲存格的原始位置時,請使用此方法——特別適用於連續區域,確保遺漏項目不影響排序編號!

若要執行遞增排序並跳過空白儲存格,請依照下列步驟操作,過程中需使用兩個輔助欄位建構結果:

1. 選取緊鄰您數值的空白儲存格——例如,若您的清單從 B2 開始,而資料起始於 A2——然後輸入下列公式:

=IF(ISBLANK($A2),"",VALUE($A2&"."&(ROW()-ROW($B$2))))

若 A2 為空,公式會傳回空白;否則將根據 A2 的值產生小數數字。當您向下拖曳填滿控點,將公式複製至所有含資料的列時,會依序加上 。0、。1、。2、。3 等。

在 Excel 中跳過空白儲存格對數值進行排序的公式截圖

參數說明與提示:

  • $A2:要排序的第一個儲存格。若您的清單起始列不同,請調整此參照。
  • $B$2:輸入此公式的儲存格。請留意絕對參照(例如 $A2 與 $B$2),確保公式向下填滿時運作正確。

2. 在下一欄(例如 )C2)輸入下列公式,即可產生已排序的輔助值清單:

=SMALL($B$2:$B$8,ROW()-ROW($C$1))

當您向下複製公式時,此公式會依序從 B2:B8 中提取最小值、次小值及後續數值。(注意:若您的資料範圍更大,請調整此範圍。)

套用 SMALL 函數對 Excel 數值進行排序的截圖

參數說明:

  • $B$2:$B$8:套用前一個(第一個)輔助公式的範圍。
  • $C$1:輸入公式所在位置正上方的儲存格;此偏移量用於控制排序順序。

3. 在儲存格 D2 輸入下列公式,即可分配排序值,並讓空白儲存格保持為空:

=IFERROR(MATCH($B2,$C$2:$C$8,0),"")

此公式會比對 B2 中的值與 C2:C8 內的排序結果。若相符,即輸出對應的排序值;若不相符(例如遇到空白儲存格),則不顯示任何內容,維持空白外觀。請向下拖曳填滿控點,立即套用至所有相關列!

使用 MATCH 函數產生排序並忽略空白儲存格的截圖

參數:

  • $B2:包含用於排序的輔助值儲存格。
  • $C$2:$C$8:已排序輔助值的範圍。

注意事項:若新增或刪除資料,請務必更新每個公式中的所有範圍,確保與新資料大小一致。針對大型清單,建議使用動態範圍或 Excel 表格,輕鬆減少手動調整範圍的繁瑣作業!

疑難排解:若排序值遺漏或錯位,請確認所有輔助公式範圍皆正確對齊。欄位間一旦錯位,將導致排序錯誤或出現非預期的錯誤訊息。


藍色右向箭頭氣泡使用公式以遞減順序排序數值,同時跳過空白儲存格

當您希望以遞減順序分配排序值(最高值取得排序 1)時,有個更快速的方法,只需使用單一公式即可。此方法特別適用於測驗分數、銷售目標等資料集——其中空白儲存格代表遺漏或不可用的資訊,而您不希望這些儲存格佔據排序位置或顯示錯誤。

選取與第一筆資料位於同一列的儲存格(即您希望顯示結果的位置),然後輸入:

=IF(ISNA(RANK(A2,A$2:A$8)),"",RANK(A2,A$2:A$8))

輸入公式後,使用填滿控點將公式向下複製至資料旁。此公式會檢查 RANK 函數是否傳回錯誤(例如當 )A2 為空白時);若是,則結果留空,避免顯示「#N/A」。若儲存格包含有效數值,即顯示對應的排序值。

顯示如何在忽略空白儲存格的情況下將數字按降冪排序的截圖

參數:

  • A2:要排序的儲存格(請根據您的資料範圍調整)。
  • A$2:A$8:完整的資料範圍(複製時請使用絕對參照)。

錯誤提醒:若您仍看到「#N/A」錯誤,請再次確認公式所參照的範圍是否符合您預期的數據區域,且被排序的儲存格中不含非數值資料。


藍色右向箭頭氣泡 使用 VBA 排序數值,同時跳過空白儲存格

對於熟悉巨集並希望自動化排序(無論遞增或遞減)的使用者來說,自訂 VBA 巨集能大幅簡化操作流程,無需建立多個輔助欄位或持續維護公式。

使用方法:

1. 前往開發人員索引標籤,按一下 Visual Basic,即可開啟 Microsoft Visual Basic for Applications 編輯器。若未顯示「開發人員」索引標籤,請參閱此指南:在 Excel 中顯示開發人員索引標籤

2. 在新的 Microsoft Visual Basic for Applications 視窗中,點選插入 > 模組,並將下列任一程式碼貼到模組視窗中:

  • 若要執行遞增排序並跳過空白儲存格:
    Sub RankSkipBlank_Ascending()
        Dim WorkRng As Range
        Dim Cell As Range
        Dim NumArr() As Double
        Dim Ws As Worksheet
        Dim OutputCell As Range
        Dim i As Long, j As Long
        
        On Error Resume Next
        xTitleId = "KutoolsforExcel"
        
        Set WorkRng = Application.Selection
        Set WorkRng = Application.InputBox("Please select the range to rank", xTitleId, WorkRng.Address, Type:=8)
        Set Ws = WorkRng.Worksheet
        
        Set OutputCell = Application.InputBox("Please select the first cell to output the ascending ranking", xTitleId, Type:=8)
        If OutputCell Is Nothing Then Exit Sub
        
        j = 0
        ReDim NumArr(1 To WorkRng.Rows.Count)
        
        For Each Cell In WorkRng
            If IsNumeric(Cell.Value) And Not IsEmpty(Cell.Value) Then
                j = j + 1
                NumArr(j) = Cell.Value
            End If
        Next Cell
        
        Dim temp As Double
        Dim k As Long
        
        For i = 1 To j - 1
            For k = i + 1 To j
                If NumArr(i) > NumArr(k) Then    ' ← CHANGE HERE
                    temp = NumArr(i)
                    NumArr(i) = NumArr(k)
                    NumArr(k) = temp
                End If
            Next k
        Next i
        
        Dim RankArr() As Double
        ReDim RankArr(1 To j)
        For i = 1 To j
            RankArr(i) = NumArr(i)
        Next i
        
        Dim RankValue As Long
        Dim r As Long: r = 0
        
        For Each Cell In WorkRng
            r = r + 1
            If IsNumeric(Cell.Value) And Not IsEmpty(Cell.Value) Then
                RankValue = 0
                For k = 1 To j
                    If Cell.Value = RankArr(k) Then
                        RankValue = k        ' 1 = smallest
                        Exit For
                    End If
                Next k
                OutputCell.Offset(r - 1, 0).Value = RankValue
            Else
                OutputCell.Offset(r - 1, 0).Value = ""
            End If
        Next Cell
    
    End Sub
  • 若要執行遞減排序並跳過空白儲存格:
    Sub RankSkipBlank_Descending()
        Dim WorkRng As Range
        Dim Cell As Range
        Dim NumArr() As Double
        Dim Ws As Worksheet
        Dim OutputCell As Range
        Dim i As Long, j As Long
        
        On Error Resume Next
        xTitleId = "KutoolsforExcel"
        
        Set WorkRng = Application.Selection
        Set WorkRng = Application.InputBox("Please select the range to rank", xTitleId, WorkRng.Address, Type:=8)
        Set Ws = WorkRng.Worksheet
        
        Set OutputCell = Application.InputBox("Please select the first cell to output the descending ranking", xTitleId, Type:=8)
        If OutputCell Is Nothing Then Exit Sub
        
        j = 0
        ReDim NumArr(1 To WorkRng.Rows.Count)
        
        For Each Cell In WorkRng
            If IsNumeric(Cell.Value) And Not IsEmpty(Cell.Value) Then
                j = j + 1
                NumArr(j) = Cell.Value
            End If
        Next Cell
        
        Dim temp As Double
        Dim k As Long
        
        For i = 1 To j - 1
            For k = i + 1 To j
                If NumArr(i) < NumArr(k) Then
                    temp = NumArr(i)
                    NumArr(i) = NumArr(k)
                    NumArr(k) = temp
                End If
            Next k
        Next i
        
        Dim RankArr() As Double
        ReDim RankArr(1 To j)
        For i = 1 To j
            RankArr(i) = NumArr(i)
        Next i
        
        Dim RankValue As Long
        Dim r As Long: r = 0
    
        For Each Cell In WorkRng
            r = r + 1
            If IsNumeric(Cell.Value) And Not IsEmpty(Cell.Value) Then
                RankValue = 0
                For k = 1 To j
                    If Cell.Value = RankArr(k) Then
                        RankValue = k
                        Exit For
                    End If
                Next k
                OutputCell.Offset(r - 1, 0).Value = RankValue
            Else
                OutputCell.Offset(r - 1, 0).Value = ""
            End If
        Next Cell
    
    End Sub

3. 按下 F5 以執行巨集。系統將彈出對話方塊,提示您選取要排序的範圍;接著,另一個對話方塊會要求您指定排序結果的起始儲存格。巨集會從您選定的儲存格開始輸出排序值,而來源區域中的空白儲存格將維持空白。

提示:

  • 若毫無反應,請確認巨集已啟用,且您擁有在活頁簿中執行程式碼的權限。
  • 執行 VBA 巨集將無法復原,務必在執行前先複製或備份您的資料。

最佳 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 天完整功能試用— 無需註冊,無需信用卡
  • 超值之選— 比單獨購買各增益集更省費用