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