【发布时间】:2019-02-25 16:53:23
【问题描述】:
我在使用匹配功能时遇到错误,我找不到问题所在,请您帮帮我好吗? 我也想知道我们是否可以使用 Find 功能做同样的事情。
我命名了名为DataListName 的范围,它位于工作表“数据”(ID 名称)或“数据库”(工作表名称)中
DataListName 代表列 C
DataListName=数据库!$C:$C
我正在尝试在 C 列中找到行,文本 ListABC
这是我的代码:
Dim ListNameArr As Variant
Dim LookupRow As Long
Dim ListNameValue As String
ListNameValue ="ListABC"
With wsData
ListNameArr = .Range("DataListName").Value
LookupRow = Application.WorksheetFunction.Match(ListNameValue, ListNameArr, 0)
end with
任何人都可以向我解释错误在哪里?如果我可以用 Find 方法做同样的事情,如何以及哪个更好?
编辑:
如果我按照建议替换
LookupRow = Application.WorksheetFunction.Match(ListNameValue, ListNameArr, 0)
通过
LookupRow = Application.WorksheetFunction.Match(ListNameValue, .Range("DataListName"), 0),我没有类型不匹配了,但是另一个错误,
运行时错误“1004”无法获取匹配属性 WorksheetFunction 类
仅供参考,如果可能有帮助,我打开了另一个工作簿,实际上我的工作簿打开了另一个工作簿,但是正如您在我的代码中看到的那样,我有 ws.data 的参考,所以我不知道如果打开另一个工作簿的事实导致此错误或什么
【问题讨论】:
-
ListNameArr = .Range("DataListName").Value创建一个二维数组,而 MATCH 不适用于二维数组。只需使用 MATCH 中的范围:LookupRow = Application.WorksheetFunction.Match(ListNameValue, .Range("DataListName"), 0) -
啊,我不知道 Match 不支持二维数组,我会试一试并告诉你...你能告诉我如何用 find 做到这一点吗?我读到 find 和 match 也一样,什么更好?
-
对于单列查找匹配更快。我根本不使用 Find 那么多,所以除了 MicroSoft 在他们自己的文档中已经编写的内容之外,我无法提供帮助。
-
这是从垂直范围进行批量填充的性质,数组变成二维的。一维数组是水平的。
-
第二个维度是
1,对于一个列,第一个维度是行数。