匹配函数内的Excel VBA索引

Posted

技术标签:

【中文标题】匹配函数内的Excel VBA索引【英文标题】:Excel VBA Index inside of match function 【发布时间】:2021-04-04 02:14:42 【问题描述】:

当我在单元格中输入这段代码时,我得到了这段代码

=MATCH(1;INDEX(($B:$B="Some_value1")*($D:$D="Some_value2");0);0)

当我将其“翻译”为 VBA 代码时,我收到类型不匹配错误。

Debug.Print Application.WorksheetFunction.Match(1, Application.WorksheetFunction.Index((Range("B:B") = "Some_value1") * (Range("D:D") = "Some_value2"), 0), 0)

那么谁能指出我的错误在哪里,或者我做得对吗?

提前致谢

【问题讨论】:

在这段代码中 Some_value1/2 是字符串 【参考方案1】:

请记住,内部矩阵反映了基于工作表逻辑的条件(返回 0 或 1 个单元格值的数组),您似乎必须至少在 INDEX 部分内执行评估:

Debug.Print WorksheetFunction.Match(1, WorksheetFunction.Index(Evaluate("($B:$B=""Some_value1"")*($D:$D=""Some_value2"")"), 0), 0)

或评估整个表达式:

Debug.Print Evaluate("=MATCH(1,INDEX(($B:$B=""Some_value1"")*($D:$D=""Some_value2""),0),0)")

【讨论】:

这就是解决方案。谢谢。另一个,我是否必须将变量用于范围(例如范围 $B:$B)输入,或者我可以编写 Sheet.Range(Sheet.Cells(x,y).Address,Sheet.Cells(z,y)。地址)? 另外,我如何将变量(字符串数组(但使用 for 循环迭代)引用到部分“”Some_value“” ad 1) 要计算的表达式是一个字符串;因此,您必须替换相关部分,而不是通过包含范围对象,而是通过将范围 address "$B:$B" 作为文本加入,例如通过Evaluate("(" & Sheet1.columns(2).Address & "=""Some_value1"")*... ad 2) 我不明白你的意思。 - 也许你应该提出另一个问题,因为它似乎偏离了原来的问题:-) 与您在广告 1 中回答的内容相同)但对于我正在搜索的价值。 ""Some_value"" 应该如何替换为变量: Search_term ?我尝试使用 "" & Search_term(i) & "" 但没有成功

以上是关于匹配函数内的Excel VBA索引的主要内容,如果未能解决你的问题,请参考以下文章

在 Excel 加载项中编辑数据(使用索引/匹配的 UDF)

Excel 2010 索引匹配 VBA

excel vba索引匹配数组以分隔文件

一个可以使用多个正则表达式进行多次尝试匹配,并进行替换的Excel VBA自定义函数(UFD)

在每个单元格 Excel 中使用 VBA 而不是使用公式(索引和匹配)

使用 VBA 宏在 excel 行中搜索字符串的完全匹配