如何在Excel中为单元格分配顺序



我有一个启用宏的工作簿,我已经处理了一段时间,其目的是从服务器中提取 TFS 项,分配业务价值,然后根据提供最大业务价值的内容对积压工作重新排序。到目前为止,我做得很好,但我遇到了一个障碍。

我正在尝试为业务价值的相邻单元格分配排序顺序,从最高到最低排序。 即,如果该列中的业务价值最高,则其旁边的值将为"1",依此类推。下面是一个示例摘录:

BusinessValue (£)
10
17280
384.6153846
0.173611111


8640
3846.153846

综上所述,我希望"17280"的值具有关联的排名"1",而"0.1736"的值具有关联的排名"6"。这似乎是一个非常简单的表达,但我在实际让 VBA 执行此操作方面没有任何运气。任何帮助将不胜感激,或者只是指点。

编辑:通过排名建议找到答案

您不需要 VBA 来执行此操作。 假设您的值在 A2:A10 中,将此公式放在 B2 中并向下填充将为您提供排名:

=RANK.EQ(A2,$A$2:$A$10)

通过更有用的挖掘(谢谢大家建议 Rank,因为我不知道这个函数(,我设法提出了以下内容,解决了我的问题:

Sub RankBusinessValue()
    Dim DataSum As Worksheet
    Set DataSum = ActiveWorkbook.Sheets("Summary")
    Dim i As Long
    Dim j As Long
    i = WorksheetFunction.CountIfs(DataSum.Range("B:B"), ">0")
    For j = 6 To i + 6
        If DataSum.Cells(j, "H").Value > 0 Then
            Range("I" & j).Value = WorksheetFunction.Rank(DataSum.Range("H" & j), DataSum.Range("H6" & ":H" & i + 6), 0)
        End If
    Next j
End Sub

您可以一次评估所有值(如果在 VBAProject 工作表对象中使用,则不需要Summary!(:

Sub RankBusinessValue()
    [Summary!i6:i999] = [if(Summary!j6:j999, Rank(Summary!j6:j999, Summary!j6:j999), "")]
End Sub

或者将范围限制为最后一行:

Dim ws As Worksheet, r As Long
Set ws = Sheets("Summary")
r = ws.Cells(ws.Rows.Count, "J").End(xlUp).Row        ' last non-empty row in column J
ws.Range("i6:i" & r) = ws.Evaluate(Replace("if(j6:j9, Rank(j6:j9, j6:j9), """")", 9, r))

最新更新