我有一个试图将其转换为VBA代码的索引匹配方程式:
=IFERROR(INDEX(Comments!$C$2:$C$100,MATCH(C8,Comments!$A$2:$A$100,0)),"COMMENT REQUIRED")
这是我想出的:
DestinationSheet.Cells(DestinationRow, 8).Value = Application.WorksheetFunction.Index(Sheets("Comments").Range("$C$2:$C$100"), Application.WorksheetFunction.Match((DestinationSheet.Range(DestinationRow, 3)), Sheets("Comments").Range("$A$2:$A$100"), 0), 1)
但是,我遇到一个错误。本质上,第一个公式基于C列中的值找到位于另一个工作表中的值。
对于第二段代码,我尝试浏览另一张表中的相同值,但基于定义为DestinationRow的行的第3列中的值。我在VBA代码中执行此操作,因为与索引匹配的条目的行号是未知的,这就是为什么我必须使用DestinationRow指定行,而不是像第一个公式那样对值进行硬编码。
答案 0 :(得分:0)
像VLOOKUP这样看起来不太复杂:
Dim m
With DestinationSheet.Rows(DestinationRow)
m = Application.VLookup(.Cells(3).Value, Sheets("Comments").Range("$A$2:$C$100"), 3, False)
.Cells(8).Value = IIf(IsError(m), "COMMENT REQUIRED", m)
End With
注意:在VBA中使用工作表函数有两种不同的方式
这个:
Application.Worksheetfunction.VLookup(...)
如果没有匹配项,则会引发运行时错误,这是您需要捕获和处理的。
这个:
Application.VLookup(...)
不会不会引发运行时错误,但会返回一个错误值,您可以使用IsError()