如何在 excel 中为 vlookup 提供替代方案

How to provide alternatives for vlookup in excel

我创建了一个宏来自动生成报告。我想在代码的一部分中提供 vlookup 其他值的替代方法,如果它找不到它们的话。我不能正确地运行。它不会粉碎或说任何话,但我给它的最后一个选择是,它不会执行它。更详细地说,它不会使用 "C2" 查找值。 下面提供了最后一个替代方案

cell3.Formula = "=IF(ISERROR(VLOOKUP(A2&""P2"",MARM!A:G,7,0)),"""",IF(VLOOKUP(A2&""P2"",MARM!A:G,7,0)=0,"""",VLOOKUP(A2&""C2"",MARM!A:G,7,0)))"

下面提供了带有 vlookup 的全部代码

With Range("J2:J" & LastRow)
.Formula = "=IF(ISERROR(VLOOKUP(A2&""B2"",MARM!A:G,7,0)),"""",IF(VLOOKUP(A2&""B2"",MARM!A:G,7,0)=0,"""",VLOOKUP(A2&""B2"",MARM!A:G,7,0)))"
.Value = .Value
End With
Dim cell3 As Range
For Each cell3 In Range("J2:J" & LastRow)
If IsEmpty(cell3.Value) = True Then
cell3.Formula = "=IF(ISERROR(VLOOKUP(A2&""P2"",MARM!A:G,7,0)),"""",IF(VLOOKUP(A2&""P2"",MARM!A:G,7,0)=0,"""",VLOOKUP(A2&""C2"",MARM!A:G,7,0)))"
End If
Next cell3

这个公式应该有效(根据您最后的评论):

IFERROR(VLOOKUP(A2&""B2"",MARM!A:G,7,0),IFERROR(VLOOKUP(A2&""P2"",MARM!A:G,7,0),IFERROR(VLOOKUP(A2&""C2"",MARM!A:G,7,0),""Not Found"")))

我看到的问题是@Jeeped 提到的那个问题,它将针对每一行的单元格 A2 放置查找。不过,这可以通过将每个对 A2 的引用更改为

来进行调整
... (A" & cell3.Row & ""B2""...

或者您可以捕获 cell3.Row 作为变量

Dim myRow as Long
myRow = cell3.Row

    ... (A" & myRow & ""B2""...

我注意到的第一件事是 cell3.Formula 初始 if-condition 没有条件:

"=If(
    ISERROR(VLOOKUP(A2&""P2"",MARM!A:G,7,0)), _ 'PROBLEM; you have values, are they <> something?
    """", _ 'True-function
    IF( _ 'False-function
        VLOOKUP(A2&""P2"",MARM!A:G,7,0)=0, _ 'Has legit condition
        """", _ 'True-function
        VLOOKUP(A2&""C2"",MARM!A:G,7,0) _ 'False-function
    ) _
)"

我建议节省一个步骤,只是不要使用 VBA 插入公式,而是让 VBA 进行计算,类似于:

cell3.Formula= Application.IfError( Application.VLookup( ... etc.