如何在VBA中对多维数组进行排名

时间:2018-06-25 03:33:07

标签: arrays excel vba

我很尴尬,找不到我自己的答案,但是如果我有一个多维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

这是一个视觉插图:

enter image description here

如果我想要Arr(0,x)字段中最大的数字(该数字将为2),该如何执行?对于Arr(1,x)字段中最大的字段,我希望是100。

我尝试过:

Application.WorksheetFunction.Large(Arr(, 2), 1)此错误 Application.WorksheetFunction.Large(Arr(1, 2), 1)会在该位置上给出该数组。

我已经用谷歌搜索:

  • 对多维数组排序
  • 如何对数组的单个维度进行排名
  • 在数组中排一维

没有运气。我可能可以找到它,但是我也希望我可以在这个较弱的问题上得到-3的排名,因此我可以删除它并获得SO“屈辱”徽章(或所谓的“羞辱”徽章)。

谢谢!

3 个答案:

答案 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