如何引用VBA Max或Ubound函数的数组地址?

如何引用WorksheetFunction.Max在数组中find最大值的数组地址? 数组中可以有多个高点。

Dim myArraySum(1 to 4) as long Dim myArrayAddress(1 to 4) as integer myArraySum(1) = 2 myArraySum(2) = 5 myArraySum(3) = 7 myArraySum(4) = 7 myArrayHigh = Application.WorksheetFunction.Max(myArraySum) myArrayAddress = 'code needed 

我期望的输出是

 myArrayHigh = 7 myArrayAddress(1) = 3 myArrayAddress(2) = 4 

最直接的方法是使用循环来检查每个数组元素的值。

 Function GetMaxIndicesArray(ByRef myArraySum() As Long, ByRef myArrayAddress() As Integer) As Integer Dim i As Integer, j As Integer, iLow As Integer, iUp As Integer Dim lMax As Long iLow = LBound(myArraySum) iUp = UBound(myArraySum) lMax = Application.WorksheetFunction.Max(myArraySum) j = 1 For i = iLow To iUp If (myArraySum(i) = lMax) Then myArrayAddress(j) = i j = j + 1 End If Next GetMaxIndicesArray = j - 1 End Function Sub test() Dim myArraySum(1 To 4) As Long Dim myArrayAddress(1 To 4) As Integer Dim i As Integer, n As Integer myArraySum(1) = 2 myArraySum(2) = 5 myArraySum(3) = 7 myArraySum(4) = 7 myArrayHigh = Application.WorksheetFunction.Max(myArraySum) 'myArrayAddress = "" 'code needed n = GetMaxIndicesArray(myArraySum, myArrayAddress) Debug.Print "myArrayHigh = " & myArrayHigh For i = 1 To n Debug.Print "myArrayAddress(" & i & ") = " & myArrayAddress(i) Next End Sub 

然后在你的debugging器窗口中,input

 test 

结果如下所示:

 myArrayHigh = 7 myArrayAddress(1) = 3 myArrayAddress(2) = 4 

使用一个简单的循环:

 Sub dural() Dim myArraySum(1 To 4) As Long Dim myArrayAddress(1 To 4) As Integer Dim myArrayHigh As Long, k As Long, msg As String myArraySum(1) = 2 myArraySum(2) = 5 myArraySum(3) = 7 myArraySum(4) = 7 myArrayHigh = Application.WorksheetFunction.Max(myArraySum) k = 1 For i = LBound(myArraySum) To UBound(myArraySum) If myArraySum(i) = myArrayHigh Then myArrayAddress(k) = i k = k + 1 End If Next i msg = "" For i = LBound(myArrayAddress) To UBound(myArrayAddress) msg = msg & vbCrLf & i & vbTab & myArrayAddress(i) Next i MsgBox msg End Sub