我试图在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命令获取行数,但我只是想完成编码练习。
答案 0 :(得分:2)
List
是范围对象而不是数组。 Range.Value
将返回范围中的值数组,Range.Formula
将返回范围中的公式数组。
Function test(list As Range) As Double
test = UBound(list.Value)
End Function
答案 1 :(得分:1)
由于您没有明确Dim
list
,因此它是Variant
。因此,如果您致电=TEST(A1:B4)
,它将是Range
,而不是Array
。 Range
没有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
执行以下操作:如果list
是Range
- 对象,那么它将被隐式转换为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)