具有两个条件的 MATCH 公式作为工作表函数 (VBA)
MATCH formula with two criteria as Worksheet Function (VBA)
以这个工作表场景为例 - 在黄色单元格中,我使用了数组公式来定位 table 中的第 5 行:
{=MATCH(4&"jkl",A1:A5&B1:B5,0)}
我一辈子都无法将其转换为 VBA 工作表函数。这是我认为正确的做法:
MsgBox WorksheetFunction.Match([4 & "jkl", .Range("A1:A5") & .Range("B1:B5")], 0)
非常感谢收到任何建议。
我问了一个类似的问题 here 但建议的解决方案难以处理串联的范围,因此:
利用 VBA MATCH()
可以处理 Range
或 Array
的事实:
Sub dural()
Dim arr(1 To 5, 1 To 1)
For i = 1 To 5
arr(i, 1) = Cells(i, 1) & Cells(i, 2)
Next i
With Application.WorksheetFunction
MsgBox .Match("4jlk", arr, 0)
End With
End Sub
此外,正如 GSerg 评论的那样,我们也可以使用 Evaluate()
:
Sub test2()
Dim s As String
s = "=MATCH(4 & ""jkl"",A1:A5 & B1:B5,0)"
MsgBox Evaluate(s)
End Sub
以这个工作表场景为例 - 在黄色单元格中,我使用了数组公式来定位 table 中的第 5 行:
{=MATCH(4&"jkl",A1:A5&B1:B5,0)}
我一辈子都无法将其转换为 VBA 工作表函数。这是我认为正确的做法:
MsgBox WorksheetFunction.Match([4 & "jkl", .Range("A1:A5") & .Range("B1:B5")], 0)
非常感谢收到任何建议。
我问了一个类似的问题 here 但建议的解决方案难以处理串联的范围,因此:
利用 VBA MATCH()
可以处理 Range
或 Array
的事实:
Sub dural()
Dim arr(1 To 5, 1 To 1)
For i = 1 To 5
arr(i, 1) = Cells(i, 1) & Cells(i, 2)
Next i
With Application.WorksheetFunction
MsgBox .Match("4jlk", arr, 0)
End With
End Sub
此外,正如 GSerg 评论的那样,我们也可以使用 Evaluate()
:
Sub test2()
Dim s As String
s = "=MATCH(4 & ""jkl"",A1:A5 & B1:B5,0)"
MsgBox Evaluate(s)
End Sub