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