excel/VBA如何将数组的可变长度分配给整数变量

Posted

技术标签:

【中文标题】excel/VBA如何将数组的可变长度分配给整数变量【英文标题】:excel/VBA how to assign the variable length of an array to integer variable 【发布时间】:2015-12-05 01:21:44 【问题描述】:

在 excel/VBA 我有这个代码

Dim colName as Variant
Dim lengthToDispl as Integer
colName = Array("A", "B", "C")
lengthToDispl = colName.length

我收到以下错误“需要对象”。它与最后一行有关。

如何将可变长度(包含字符串)数组的长度分配给变量(整数)?

【问题讨论】:

lengthToDispl = ubound(colName) 应该这样做。 fwiw,数组中第一个字符串的长度是Len(colName(0)) 【参考方案1】:

您要返回数组“大小”的函数是UBound function,它返回上边界。这通常与其对应的 LBound function 一起使用,它返回 Lower Boundary

这可能会或可能不会返回您正在寻找的号码。一些数组以从零开始的索引排列,而另一些则以从一开始的索引排列。这取决于它们的声明和分配方式。

colName = Array("A", "B", "C")

上面创建了一个具有从零开始的索引和三个元素在位置colName(0)colName(1)colName(2) 的数组。 UBound(例如UBound(colName))将返回 2,而不是 3。要循环通过它,请同时使用 LBound 和 UBound。

for i = LBound(colName) to UBound(colName)
    debug.print colName(i)
next i

从工作表的单元格中分配值时,您会得到一个从 1 开始的二维数组,即使您只是从单个列或行中收集值。另一个维度或 Rank 只是 1 比 1

colName = Range("A1:C2").Value2

这将创建一个二维数组,其索引从 1 开始,如 ReDim colName (1 to 2, 1 to 3)

debug.print LBound(colName, 1) & " to " & UBound(colName, 1)
debug.print LBound(colName, 2) & " to " & UBound(colName, 2)

for i = LBound(colName, 1) to UBound(colName, 1)
    for j = LBound(colName, 2) to UBound(colName, 2)
        debug.print colName(i, j)
    next j
next i

我建议在处理数组元素时同时使用LBound 和UBound。

【讨论】:

以上是关于excel/VBA如何将数组的可变长度分配给整数变量的主要内容,如果未能解决你的问题,请参考以下文章

GCC 如何实现变长数组?

将命名范围值分配给变量(Excel VBA) - 新手

excel vba 数组中第1位字符为0,赋给单元格时如何将0保留?

excel vba如何将选中的不连续单元格赋值到数组

返回数组Excel VBA中元素的索引

如何将一个数组拆分成多个固定长度的数组