vba - VBA 数组过滤器函数出现问题 : only first result is returned

标签 vba excel

我在使用 VBA 的“过滤器”功能时遇到一些问题。我正在尝试使用多个后续过滤器来逐步减少数组以包含我需要的值。然而,似乎只返回与“Match”值匹配的第一个元素,而不返回后续元素?

举个例子,当运行下面的代码时,第二个“调试调用”返回“1”,但它应该返回“2”

Function FilterAnArray()

Dim names As Variant
names = Array("Ann Smith", "Barry Jones", "John Smith", "Stephen Brown", "Wilfred Cross")
Debug.Print UBound(names)

Dim smithNames As Variant
smithNames = Filter(names, "Smith")
Debug.Print UBound(smithNames)

End Function

版本信息等

我正在运行 Excel 2016,版本 16.0.8730.2046 - 64 位。 非常感谢对此问题的任何帮助!

最佳答案

它工作得很好。它返回 1,因为你有两个 Smith:

enter image description here

并且 smithNames 的上限是 1,因为它的数组是从 0 开始的。如果您想要数组元素的计数,并且不喜欢 UBound+1,您可以使用工作表函数:

Debug.Print WorksheetFunction.CountA(smithNames)

<小时/>

强烈不建议选择:

您可以考虑在模块顶部编写Option Base 1。那么数组将从 1 开始,并且将如您所期望的那样。在您的示例中,您会明白为什么不建议使用Option Base 1。如果有的话,Names 将基于 1smithNames 将基于 0。这是因为数组的分配方式不同。

enter image description here enter image description here

关于vba - VBA 数组过滤器函数出现问题 : only first result is returned,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47775206/

相关文章:

vba - 代码独立工作,但不作为整个程序的一部分

java - 使用 Apache POI 将结果集转为 Excel (*.xlsx) 表格

excel - 如何动态选择要在公式中引用的 Excel 工作表?

excel - 替换 csv 中的特定断行

c - 在C中访问Excel工作表单元格属性

excel - 按时间间隔运行宏的代码?

vba - 究竟什么是属性(property)程序?

excel - range.copy 目标 "A1"与 "Cells(1,1)"Excel/VBA

ms-access - 如何在运行时在 VBA 代码中更改 MS Access 子窗体的 View ?

mysql - 填充给定起点和终点的字母数字值范围