首页 文章

忽略否定 . Rank函数VBA中的值

提问于
浏览
0

我有一个巨大的文件,我想在列中的所有值排名,其中值“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解决方案

2 回答

  • 0

    假设您的号码在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),"")

  • 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
    

相关问题