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

时间:2017-10-12 12:40:05

标签: excel vba excel-vba excel-formula vlookup

我创建了一个宏来自动构建报告。我希望,在代码的一部分中,如果找不到它们,则提供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

2 个答案:

答案 0 :(得分:1)

此公式应该有效(根据您的上次评论):

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""...

答案 1 :(得分:1)

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

"=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.