VBA - 获取数组中第n个最大值的索引

doo*_*ers 6 arrays excel vba excel-vba

我想找到数组中第n个最大值的索引.我可以执行以下操作,但当2个值相等时会遇到麻烦.

fltArr(0)=31
fltArr(1)=15
fltArr(2)=31
fltArr(3)=52

For i = 0 To UBound(fltArr)
    If fltArr(i) = Application.WorksheetFunction.Large(fltArr, n) Then
        result = i
    End If
Next
Run Code Online (Sandbox Code Playgroud)

n = 1 ---> 3
n = 2 ---> 2(但我希望它为0)
n = 3 ---> 2
n = 4 ---> 1

bre*_*tdj 6

使用第二个数组快速获得您想要的内容,而无需为每个值循环遍历每个元素 n

Sub test()

Dim fltArr(0 To 3)
Dim X
Dim n As Long
Dim lngPos As Long

fltArr(0) = 31
fltArr(1) = 15
fltArr(2) = 31
fltArr(3) = 52

X = fltArr

For n = 1 To 4
    lngPos = Application.WorksheetFunction.Match(Application.Large(X, n), X, 0) - 1
    Debug.Print lngPos
    X(lngPos) = Application.Max(X)
Next

End Sub
Run Code Online (Sandbox Code Playgroud)

  • 有人可以解释它是如何工作的吗?什么是`X(lngPos)= Application.Max(X)`? (2认同)