VBA UBound函数
我正在尝试在Visual Basic for Applications(VBA)中探索UBound应用程序。 比方说,我有一个4乘2的数组…(A1:B4),我想要计算行数。 我会认为我的代码是…
Function test(list) As Double test = UBound(list) End Function
我的input是=test(A1:B4)
但到目前为止我得到“#value!” 错误。 我以为回报会是4。
我究竟做错了什么? 我知道如何使用row命令获取行数,但我只是想通过编码练习。
List
是范围对象而不是数组。 Range.Value
将从一个范围返回一个数组值, Range.Formula
将从一个范围返回一个公式数组。
Function test(list As Range) As Double test = UBound(list.Value) End Function
看来你有2维数组,所以你必须为UBound
提供额外的参数,如:
UBound(array, dimension)
请记住,如果您从Excel范围获取数组,而不是基于1的数组。
完整的解决scheme可以看起来像这样:
Function testArrray(List, Dimmension) Dim ListConverted As Variant ListConverted = List testArrray = UBound(ListConverted, Dimmension) End Function
示例调用: =testArrray(G15:H20,1)
产生6
结果是正确的。
既然你没有明确的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
-Object,那么它将被隐式转换为Array
因为Set
不用于设置一个对象。 如果list
已经是一个Array
,那么它也将是一个Array
之后。
这是如何获得函数中的行数。
Option Explicit Function l_number_of_rows(rng_range As Range) As Long l_number_of_rows = rng_range.Rows.Count End Function
如果你想从维度来看,这是一个可能的解决scheme。
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
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),但是用你指定的数据按照你的意愿剔除4
Ubound是一个函数,它在你传递一个范围的数组上工作
尝试这个
dim i(3) i(0) = 1 i(1) =2 i(2) = 3 msgbox ubound(i)