2017-06-21 91 views
0

我有一個啓用宏的工作簿,我已經工作了一段時間,與從服務器下拉TFS項目,分配商業價值的目的,然後再重新訂購積壓的基礎是什麼能產生最大的商業價值。到現在爲止我都做得很好,但我碰到了一個攔截器。如何分配才能細胞在Excel

我試圖分配一個排序順序爲商業價值的相鄰小區,訂購從最高到最低。即,如果該列中的商業價值是最高的,它旁邊的值將是「1」,等等。這樣的一個例子提取物是如下:

BusinessValue (£) 
10 
17280 
384.6153846 
0.173611111 





8640 
3846.153846 

根據上述內容,我期望的「17280」的值以具有「1」相關聯的排名,以及「0.1736」的值,以具有相關聯的等級爲「6」。這似乎是一個很簡單的表達,但我在快樂卻越來越VBA做到這一點任何有沒有運氣。任何幫助將非常感激,或只是指針。

編輯:位於答案多虧了等級的建議

+1

'application.rank'或/'worksheetfunction.rank'甚至COUNTIF應該這樣做。 – Jeeped

+1

空行的排名是什麼? 0,7? Rank函數看起來像'= RANK(A2,$ A $ 2:$ A $ 12)' - 這會在空行上產生#N/A錯誤。 –

回答

0

你不需要VBA來做到這一點。假設你的價值觀在A2:A10,把這個公式在B2和充絨會給你的排名:

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

不幸的是,由於我嘗試的概念,我確實需要在VBA中使用它。謝天謝地,我確實找到了答案,並添加爲答案 –

0

隨着多一點有用的挖掘(感謝大家的建議等級,因爲該功能是未知的我) ,我已經成功地想出以下,這樣就解決了我的問題:

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 
0

您可以一次Evaluate他們所有的(無需Summary!如果在的VBAProject表對象使用):

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))