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

如何在 Excel 中依群組對數值進行排名?

作者修改日期

在 Excel 中處理分組資料時,經常需要在各群組內比較數值,例如依地區排名銷售金額、依班級排名測驗成績,或依類別排名交易金額。雖然 Excel 提供強大的資料排名功能,但「群組內排名」(又稱「分組排名」或「條件式排名」)需透過特定方法才能實現。當您需要評估不同類別的表現,或找出各群組中的最佳與最差紀錄,同時避免群組間結果相互干擾時,此方法尤為實用。以下將介紹實用的群組內排名解決方案,助您在日常工作中更精準地解讀與分析資料。
顯示 Excel 中已分組資料集並包含排名值的螢幕截圖

依群組排名數值
VBA 程式碼-使用巨集自動化各群組內的數值排名


藍色右向箭頭氣泡依群組排名數值

當您在不同群組內(例如依班級評分學生,或依地區列出銷售業績)需要進行排名時,Excel 並未內建直接的「依群組排名」功能。然而,只要運用精心設計的公式,就能高效達成分組排名,無需額外的資料處理步驟。

為此,您可以運用結合邏輯測試與彙總函數的陣列公式,確保每個數值僅在指定群組內進行比較,從而為每個資料點精準產生所需的排名。

請依照下列步驟操作:

  • 將分組資料整理為欄位格式,例如群組(A2:A11)與數值(B2:B11)。
  • 選取鄰接資料的空白儲存格——通常是緊鄰數值的第一列儲存格,例如 C2.
  • 輸入下列公式:
=SUMPRODUCT(($A$2:$A$11=A2)*(B2<$B$2:$B$11))+1

此公式透過計算同一群組中有多少數值小於目前數值來運作。以下是各參數的說明:

  • ($A$2:$A$11=A2)
    → 此條件會檢查範圍 A2:A11 中每個儲存格是否等於 A2 的值。
    → 並傳回由 TRUE/FALSE(或 1/0)組成的陣列,標示每列是否與 A2 屬於同一群組。
  • (B2<$B$2:$B$11)
    → 此條件用於檢查 B2:B11 範圍中有多少數值大於 B2.
    → 若 B2 小於指定值,則傳回 TRUE(1);否則傳回 FALSE(0)。
  • *(乘法)
    → 此運算結合兩個條件:
  • 群組相符(A2)
    B2 中的數值小於其他數值
    → 因此僅計算屬於相同群組且數值較小的列。
  • SUMPRODUCT(...)
    → 加總符合兩個條件的資料列數。
  • +1
    → 排名從 1 開始(而非 0),因此我們在較小數值的計數上加 1.

在 C2 輸入公式後,向下拖曳自動填滿控點,即可將公式套用至資料集中所有相關列。公式會自動調整,引用各列對應的群組與數值,並傳回該群組內的排名。顯示在工作表中套用 Excel 公式以按群組對值進行排名的螢幕截圖

提示與注意事項:

  • 若您的範圍較大,請務必同步更新對應的儲存格參照。
  • 若要以遞減順序排名(例如最高數值為第 1 名),請將公式中的比較條件從 B2<$B$2:$B$11 修改為 B2>$B$2:$B$11.
  • 為處理重複值,此公式會為同一群組中相同的數值指派相同的排名。若您需要連續且唯一的排名,建議搭配額外的輔助欄位使用。

這種基於公式的做法靈活且適用於大多數 Excel 分組表格結構,但對於極大資料集,由於依賴陣列運算,計算效能可能會降低。


VBA 程式碼-使用巨集自動化各群組內的數值排名

對於希望自動化排名流程或更高效處理大型資料集的使用者來說,撰寫 VBA 巨集是一種極具價值的解決方案。巨集不僅能自動執行重複性步驟、提供更高的自訂彈性,還能比複雜公式更快速地處理資料。此方法特別適合用於定期報表產出、重複性的排名任務,或當您希望避免工作表中堆積過多公式時。

開始前,請務必先儲存您的工作,並在 Excel 設定中啟用巨集。以下是撰寫與執行此解決方案的步驟:

  1. 按下 Alt + F11 鍵,立即啟用 VBA 編輯器!在彈出的 Microsoft Visual Basic for Applications 視窗中,點選插入 > 模組,並將下列程式碼貼到開啟的模組中:
Sub RankValuesByGroup()
    Dim DataRange As Range
    Dim GroupRng As Range
    Dim ValueRng As Range
    Dim OutCol As Range
    Dim dictGroups As Object
    Dim arrValues, arrRanks
    Dim i As Long, j As Long
    Dim GroupKey As String
    
    On Error Resume Next
    xTitleId = "KutoolsforExcel"
    
    Set DataRange = Application.InputBox("Select the data table range (including group and value columns)", xTitleId, Selection.Address, Type:=8)
    If DataRange Is Nothing Then Exit Sub
    
    Set GroupRng = Application.InputBox("Select the group column within your range", xTitleId, DataRange.Columns(1).Address, Type:=8)
    Set ValueRng = Application.InputBox("Select the value column to rank within your range", xTitleId, DataRange.Columns(2).Address, Type:=8)
    
    Set OutCol = DataRange.Offset(0, DataRange.Columns.Count).Resize(DataRange.Rows.Count, 1)
    OutCol.Cells(1).Value = "RankByGroup"
    
    Set dictGroups = CreateObject("Scripting.Dictionary")
    arrValues = ValueRng.Value
    arrRanks = ValueRng.Value
    
    ' Build group dictionaries for ranking
    For i = 2 To UBound(arrValues, 1)
        GroupKey = GroupRng.Cells(i, 1).Value
        If Not dictGroups.Exists(GroupKey) Then
            dictGroups.Add GroupKey, CreateObject("System.Collections.ArrayList")
        End If
        dictGroups(GroupKey).Add arrValues(i, 1)
    Next i
    
    ' Rank within each group
    For i = 2 To UBound(arrValues, 1)
        GroupKey = GroupRng.Cells(i, 1).Value
        Dim countLower As Long
        countLower = 0
        For j = 0 To dictGroups(GroupKey).Count - 1
            If dictGroups(GroupKey)(j) < arrValues(i, 1) Then
                countLower = countLower + 1
            End If
        Next j
        arrRanks(i, 1) = countLower + 1
    Next i
    
    ' Output results
    For i = 2 To UBound(arrRanks, 1)
        OutCol.Cells(i, 1).Value = arrRanks(i, 1)
    Next i
    
    MsgBox "Ranking by group completed.", vbInformation, xTitleId
End Sub
  1. 點選執行後,系統將彈出對話方塊,提示您選擇完整的數據區域、群組欄位與數值欄位。巨集會自動產生一個新欄位,內含各群組中每個數值的排名。

注意事項與疑難排解:

  • 請確保所選欄位與您的資料相符:群組欄位與數值欄位務必正確對應。
  • 若資料包含標題列,請根據您的資料結構調整程式碼中的初始迴圈索引,以確保排名正確無誤。
  • 若要以遞減順序排名,請將比較條件相應修改為 If dictGroups(GroupKey)(j) < arrValues(i,1)
  • 若您遇到權限或巨集安全性警告,請前往檔案 > 選項 > 信任中心,檢查 Excel 的巨集安全性設定。

此 VBA 方法在進階或大規模應用中展現高度彈性與穩健效能,尤其適合整合至自動化報表工作流程。


kutools for excel ai 的螢幕截圖

透過 KUTOOLS AI 解鎖 Excel 的神奇功能

  • 智慧執行:透過簡易指令,輕鬆執行儲存格操作、分析資料,並建立圖表!
  • 自訂公式:打造專屬公式,讓您的工作流程更順暢!
  • VBA 編碼:輕鬆撰寫並套用 VBA 程式碼,立即提升工作效率!
  • 公式解析:輕鬆掌握複雜公式!
  • 文字翻譯:輕鬆打破試算表中的語言隔閡!
運用 AI 驅動的工具強化您的 Excel 能力。立即下載體驗前所未有的高效!

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