[英]ignore neg. values in Rank function VBA
我有一個巨大的文件,我想對列中的所有值進行排名,其中值“0”會給我排名第一。 到目前為止沒有問題。 主要問題是我也有負數,只要我有這些負數,它們的排名總是“低於”“0”或任何其他數字。
無論如何要從 .Rank 函數中排除負數?
我可以給他們一個占位符數字,但這違背了目的,因為我想在幾個“排名”上運行這個代碼,我還需要其他計算的“真實”數字。
剝離了我的代碼,這基本上就是我現在運行的:
Sub test()
lastrow = Worksheets("Sheet").Range("A65536").End(xlUp).Row
Dim Lista As Range
Set Lista = Sheets("Sheet").Range("A1:A100")
For i = 1 To lastrow
irRanking = WorksheetFunction.Rank_Eq(Worksheets("Sheet").Cells(i,1)
.Value, Lista, 1)
Worksheets("Sheet").Cells(i, 4).Value = irRanking
Next i
End Sub
或者還有另一種方法可以跳過 .Rank 嗎?
還必須補充一點,我知道使用公式是可能的,但我真的需要 VBA 中的解決方案
假設您的數字在單元格 A2:AXX 中
=IF($A2>0,MATCH($A2,SMALL(IF($A$2:$A$XX>0,$A$2:$A$XX),ROW(INDIRECT("1:"&COUNTIF($A$2:$A$XX,">0")))),0),"")
您可以計算負值並將此總數減去排名:
Option Explicit
Sub test()
Dim lastrow As Long, i As Long, nNegs As Long
Dim Lista As Range
With Worksheets("Sheet")
lastrow = .Cells(.Rows.Count, 1).End(xlUp).Row
Set Lista = .Range("A1:A" & lastrow)
For i = 1 To lastrow
If Lista(i, 1) >= 0 Then .Cells(i, 4) = WorksheetFunction.Rank_Eq(Lista(i, 1), Lista, 1)
Next i
nNegs = WorksheetFunction.CountIf(Lista, "<0") ' count negative occurrences
If nNegs > 0 Then 'if any
Dim cell As Range
For Each cell In Lista.Offset(, 3).SpecialCells(xlCellTypeConstants, xlNumbers) ' loop through ranks and correct them by subtratcing the number of negative values
cell.Value = cell.Value - nNegs
Next
End If
End With
End Sub
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.