VBA UBound函数

VBA UBound函数,vba,excel,function,Vba,Excel,Function,我正试图在VisualBasicforApplications(VBA)中为我的代码探索UBound应用程序。假设我有一个4乘2的数组…(A1:B4),我想计算行数。我想我的代码应该是 Function test(list) As Double test = UBound(list) End Function 我的输入是=test(A1:B4),但到目前为止,我得到了“#value!”错误。我以为回报率是4 我做错了什么?我知道如何使用row命令获取行数,但我只想进行编码练习。List是

我正试图在VisualBasicforApplications(VBA)中为我的代码探索UBound应用程序。假设我有一个4乘2的数组…(A1:B4),我想计算行数。我想我的代码应该是

Function test(list) As Double
   test = UBound(list)
End Function
我的输入是
=test(A1:B4)
,但到目前为止,我得到了“#value!”错误。我以为回报率是4


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

List
是范围对象而不是数组<代码>范围。值将返回范围中的值数组,
范围。公式
将返回范围中的公式数组


由于您没有显式地
Dim
列表
,因此它是
变量
。因此,如果调用
=TEST(A1:B4)
它将是一个
范围,而不是
数组。
范围
没有
UBound
,但有
行。计数

因此:

会有用的

或者,如果您确实需要
阵列
,您可以执行以下操作:

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

list=list
执行以下操作:如果
list
Range
-对象,则它将隐式转换为
Array
,因为
Set
不用于设置对象。如果
列表
已经是一个
数组
,那么此后它也将是一个
数组

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将是垂直的,如您所愿,如果您想指定,您可以添加可选的perameter ubound(列表,1),但使用您指定的数据,此defults将如您所愿变成4

似乎您有二维数组,因此,您必须为
UBound
提供附加参数,如:

UBound(array, dimension)
请记住,如果您从Excel范围中获取数组,则它是基于1的数组

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

Function testArrray(List, Dimmension)

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

示例调用:
=testarray(G15:H20,1)
生成正确的
6

Ubound是一个函数,它可以在传递范围的数组上工作

试试这个

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

msgbox ubound(i)

这就是如何获得函数中的行数

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

谢谢大家!!我很感激
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