我很尴尬,找不到我自己的答案,但是如果我有一个多维VBA数组,并希望在单个维度上使用Rank/Large/Small
函数,该函数如何执行?
示例:
Dim Arr(1, 2) As Integer
Arr(0, 0) = 1
Arr(0, 1) = 2
Arr(0, 2) = -1
Arr(1, 0) = 100
Arr(1, 1) = 40
Arr(1, 2) = 60
这是一个视觉插图:
如果我想要Arr(0,x)字段中最大的数字(该数字将为2),该如何执行?对于Arr(1,x)字段中最大的字段,我希望是100。
我尝试过:
Application.WorksheetFunction.Large(Arr(, 2), 1)
此错误
Application.WorksheetFunction.Large(Arr(1, 2), 1)
会在该位置上给出该数组。
我已经用谷歌搜索:
没有运气。我可能可以找到它,但是我也希望我可以在这个较弱的问题上得到-3的排名,因此我可以删除它并获得SO“屈辱”徽章(或所谓的“羞辱”徽章)。
谢谢!
答案 0 :(得分:1)
您需要使用工作表的Index函数剥离其中一个等级。
Dim Arr(1, 2) As Integer
Arr(0, 0) = 1
Arr(0, 1) = 2
Arr(0, 2) = -1
Arr(1, 0) = 100
Arr(1, 1) = 40
Arr(1, 2) = 60
Debug.Print Application.Large(Application.Index(Arr, 0, 2), 1)
索引用作第二个“列”(2)中所有“行”(0)的 。在第二名的2到40之间,最大的是40。
答案 1 :(得分:0)
只需跟进吉普车的答案(因为我花了几分钟才弄清楚):
使用
Dim Arr(1, 2) As Integer
Arr(0, 0) = 1
Arr(0, 1) = 2
Arr(0, 2) = -1
Arr(1, 0) = 100
Arr(1, 1) = 40
Arr(1, 2) = 60
以下是返回Arr(0,x)排名靠前的成员的方法:
Application.Large(Application.Index(Arr, 1, 0), 1)
返回2
对于第二组Arr(1,x):
Application.Large(Application.Index(Arr, 2, 0), 1)
返回100
答案 2 :(得分:0)
您可以使用for循环,例如
Dim large As Double
large = arr(row, 0)
For i = 1 To numberOfColumns
If (arr(row, i) > large) Then
large = arr(row, i)
End If
Next i