簡體   English   中英

忽略否定。 等級函數 VBA 中的值

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM