VBA UBound功能

时间:2016-12-07 08:43:36

标签: excel vba excel-vba function

我试图在Visual Basic for Applications(VBA)中为我的代码探索UBound应用程序。让我们说我有一个4乘2阵列......(A1:B4)我想计算行数。我认为我的代码会......

Function test(list) As Double
   test = UBound(list)
End Function

我的输入是=test(A1:B4),但到目前为止,我得到了#34; #value!"错误。我认为回报将是4。

我做错了什么?我知道如何使用row命令获取行数,但我只是想完成编码练习。

6 个答案:

答案 0 :(得分:2)

List是范围对象而不是数组。 Range.Value将返回范围中的值数组,Range.Formula将返回范围中的公式数组。

enter image description here

Function test(list As Range) As Double

    test = UBound(list.Value)

End Function

答案 1 :(得分:1)

由于您没有明确Dim list,因此它是Variant。因此,如果您致电=TEST(A1:B4),它将是Range,而不是ArrayRange没有UBound,但有Rows.Count

所以:

Function test(list As Range) As Double
 test = list.Rows.Count
End Function

会奏效。

或者如果你真的需要Array,你可以这样做:

Function test(list As Variant) As Double
 list = list
 test = UBound(list)
End Function

list = list执行以下操作:如果listRange - 对象,那么它将被隐式转换为Array,因为Set不习惯设置一个对象。如果list已经是Array,那么之后它也将是Array

答案 2 :(得分:1)

您似乎拥有二维数组,因此您必须为UBound提供其他参数,例如:

UBound(array, dimension)

请记住,如果从Excel Range获取数组而不是基于1的数组。

完整的解决方案可能如下所示:

Function testArrray(List, Dimmension)

    Dim ListConverted As Variant
        ListConverted = List
    testArrray = UBound(ListConverted, Dimmension)
End Function

示例通话:=testArrray(G15:H20,1)生成6,结果是正确的。

答案 3 :(得分:1)

这是获取函数中行数的方法。

Option Explicit

Function l_number_of_rows(rng_range As Range) As Long

    l_number_of_rows = rng_range.Rows.Count

End Function

如果你想要维度中的那个,这是一个可能的解决方案。

Sub test()

    Dim MyArray(1 To 2, 0 To 3)     As Long
    MyArray(1, 0) = 10
    MyArray(1, 1) = 11
    MyArray(1, 2) = 12
    MyArray(1, 3) = 13
    MyArray(2, 0) = 20
    MyArray(2, 1) = 21
    MyArray(2, 2) = 22
    MyArray(2, 3) = 23

    Debug.Print MyArray(UBound(MyArray), 3)

End Sub

答案 4 :(得分:0)

UBound函数是为变量数组中的元素提供一个范围。你可以试试这个:

Sub mains()
    Dim myRange As Range, myArray As Variant
    Set myRange = Range("A1:B4")
    myArray = myRange.Value
    Debug.Print test(myArray)
End Sub
Function test(list) As Double

    test = UBound(list)

End Function

编辑对于二维范围(如KazimierzJawor所述),默认的ubound将是垂直的,如果你想要指定,你可以添加可选的参数UBound(list, 1),但是根据你指定的数据,你可以根据自己的意愿来蔑视

答案 5 :(得分:0)

Ubound是一个适用于传递范围

的数组的函数

试试这个

dim i(3)
i(0) = 1
i(1) =2
i(2) = 3

msgbox ubound(i)