【发布时间】:2019-12-17 00:16:01
【问题描述】:
我有一列列表对象,开头有一些非空值。假设前 15 个值不为空。
我知道可以将范围的值传递给这样的数组:
Dim mylistObject As ListObject
Set mylistObject = ThisWorkbook.Sheets("training").ListObjects(1)
Dim theArray() As Variant
theArray = mylistObject.listcolumn(1).DataBodyRange.value
问题是我怎样才能只传递非空白值。 我知道如何用循环来做,但这里的关键是速度,如果 listobject 有数百行并且操作完成了几十次,那么它花费的时间太长了。
我也知道可以计算非空白单元格的数量并相应地重新调整数组并循环遍历值。还是不够优雅。
有什么想法吗?应该有办法用 VBA 语言来表达
mylistObject.listcolumn(1).DataBodyRange.value
' but not all the range but the non empty ones.
非常感谢
【问题讨论】:
-
你可以过滤掉空白,复制那个范围并转移到一个数组中。
-
这很有效。我发现过滤非常不直观。也许我应该改变主意
-
这可能是一种有用的技术,因此如果您决心避免循环,可能值得克服您的不情愿。
-
为了艺术:发布了一个迟到但希望有帮助的答案,只是为了向您展示使用
Application.Index函数的高级功能的替代方法 :-) @Berlines
标签: arrays excel range listobject