提问人:user22290834 提问时间:7/27/2023 最后编辑:Paul T.user22290834 更新时间:11/12/2023 访问量:73
如何在VBA中编码=MATCH(1,(A:A=J1)*(B:B=K1)*(C:C=L1),0)?
How to code =MATCH(1,(A:A=J1)*(B:B=K1)*(C:C=L1),0) in VBA?
问:
发件人:在 excel 中查找具有多个匹配条件
的 ROW 编号“如果您需要匹配多个列值来检索行号,也就是说,如果两列或多列一起创建一个唯一 ID,则可以使用带有 MATCH 的数组公式,如下所示:
MATCH(1,(A:A=J1)*(B:B=K1)*(C:C=L1),0)
其中 A、B、C 包含要匹配的列数组,用于检索分别对应于 J1、K1、L1 中值的唯一行号。
有关分步指南,请阅读 Christian Pedersen 的 Explainer”
它在工作表中作为 Excel 公式工作。如何在 Excel VBA 中为我的目的对其进行编码?
我试过了:
Dim var As Variant
Sheets("MySheet").Select
'Use "1234567" is double quotes
'var = WorksheetFunction.Match(1, (Range("D:D") = "1234567") * (Range("F:F") = "Text Here"), 0)
'Use 1234567 without the quotes
var = WorksheetFunction.Match(1, (Range("D:D") = 1234567) * (Range("F:F") = "Text Here"), 0)
我删除了注释标记并独立尝试了每种方式。
两者的结果相同:
运行时错误“13”:
类型不匹配
答:
1赞
Tim Williams
7/27/2023
#1
例如:
Sub Tester()
Dim ws As Worksheet, f As String, res
Set ws = ThisWorkbook.Worksheets("MySheet")
f = "MATCH(1,(D:D=<num>)*(F:F=""<txt>""),0)"
f = Replace(f, "<num>", 1234)
f = Replace(f, "<txt>", "Text here")
res = ws.Evaluate(f) 'evaluate in context of sheet `ws`
If Not IsError(res) Then
Debug.Print "matched row " & res
Else
Debug.Print "No match"
End If
End Sub
请注意,如果列类型不是数字,则公式需要在值两边加上引号。
评论