在multidimensional array上使用ubound的VBA

Ubound可以返回一个数组的最大索引值,但是在一个multidimensional array中,我将如何指定WHICH维度我想要的最大索引?

例如

Dim arr(1 to 4, 1 to 3) As Variant 

在这个4x3arrays中,我将如何将Ubound返回4,以及如何将Ubound返回3?

 ubound(arr, 1) 

 ubound(arr, 2) 

你需要处理UBound的可选的Rank参数。

 Dim arr(1 To 4, 1 To 3) As Variant Debug.Print UBound(arr, 1) '◄ returns 4 Debug.Print UBound(arr, 2) '◄ returns 3 

更多: UBound函数(Visual Basic)

[这是一个较迟的回答,说明问题的标题(因为这是人们search时会遇到的问题),而不是OP已经充分回答的问题的具体情况]

Ubound有点脆弱,因为它没有办法知道一个数组有多less个维度。 您可以使用错误捕获来确定数组的完整布局。 以下返回数组的集合,每个维度一个。 count属性可用于确定维度的数量,并可根据需要提取其下限和上限:

 Function Bounds(A As Variant) As Collection Dim C As New Collection Dim v As Variant, i As Long On Error GoTo exit_function i = 1 Do While True v = Array(LBound(A, i), UBound(A, i)) C.Add v i = i + 1 Loop exit_function: Set Bounds = C End Function 

像这样使用:

 Sub test() Dim i As Long Dim A(1 To 10, 1 To 5, 4 To 10) As Integer Dim B(1 To 5) As Variant Dim C As Variant Dim sizes As Collection Set sizes = Bounds(A) Debug.Print "A has " & sizes.Count & " dimensions:" For i = 1 To sizes.Count Debug.Print sizes(i)(0) & " to " & sizes(i)(1) Next i Set sizes = Bounds(B) Debug.Print vbCrLf & "B has " & sizes.Count & " dimensions:" For i = 1 To sizes.Count Debug.Print sizes(i)(0) & " to " & sizes(i)(1) Next i Set sizes = Bounds(C) Debug.Print vbCrLf & "C has " & sizes.Count & " dimensions:" For i = 1 To sizes.Count Debug.Print sizes(i)(0) & " to " & sizes(i)(1) Next i End Sub 

输出:

 A has 3 dimensions: 1 to 10 1 to 5 4 to 10 B has 1 dimensions: 1 to 5 C has 0 dimensions: 

除了已经很好的答案之外,还要考虑这个函数来检索维度的数量和边界,这与John的答案类似,但是工作和看起来有点不同:

 Function sizeOfArray(arr As Variant) As String Dim str As String Dim numDim As Integer numDim = NumberOfArrayDimensions(arr) str = "Array" For i = 1 To numDim str = str & "(" & LBound(arr, i) & " To " & UBound(arr, i) If Not i = numDim Then str = str & ", " Else str = str & ")" End If Next i sizeOfArray = str End Function Private Function NumberOfArrayDimensions(arr As Variant) As Integer ' By Chip Pearson ' http://www.cpearson.com/excel/vbaarrays.htm Dim Ndx As Integer Dim Res As Integer On Error Resume Next ' Loop, increasing the dimension index Ndx, until an error occurs. ' An error will occur when Ndx exceeds the number of dimension ' in the array. Return Ndx - 1. Do Ndx = Ndx + 1 Res = UBound(arr, Ndx) Loop Until Err.Number <> 0 NumberOfArrayDimensions = Ndx - 1 End Function 

用法示例:

 Sub arrSizeTester() Dim arr(1 To 2, 3 To 22, 2 To 9, 12 To 18) As Variant Debug.Print sizeOfArray(arr()) End Sub 

其输出:

 Array(1 To 2, 3 To 22, 2 To 9, 12 To 18)