代码之家  ›  专栏  ›  技术社区  ›  PGSystemTester

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

  •  1
  • PGSystemTester  · 技术社区  · 8 年前

    我很不好意思自己找不到这个答案,但是如果我有一个多维的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)this errors application.worksheetfunction.large(arr(1,2),1).this gives just that array on that postion.

    我在谷歌上搜索过:

    • 多维数组排序
    • 如何对一维数组进行排序
    • 在数组中排列一维
      • 没有运气。我可能会找到它,但我也希望我能在这个薄弱的问题上获得-3的排名,这样我就可以删除它并获得“耻辱”徽章(或它的名字)。

        谢谢!

        例子:

        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的排名,这样我就可以删除它并获得“耻辱”徽章(或者它的名字)。

        谢谢!

    3 回复  |  直到 7 年前
        1
  •  1
  •   user4039065    8 年前

    您需要使用工作表的索引函数剥离其中一个列组。

    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是最大的。

        2
  •  0
  •   PGSystemTester    8 年前

    只是为了跟进被截取的答案(我花了几分钟才弄明白):

    与

    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

        3
  •  0
  •   Filipe Guedes    8 年前

    你可以用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
    
    推荐文章