2017-10-12 96 views
1

我已經創建了一個宏來自動生成報告。我希望在代碼的一部分中提供vlookup其他值的替代方法,如果找不到它們的話。我無法讓它正常運行。它不會暗戀或說任何話,但是我給它的最後一種選擇,它不會執行它。更詳細地說,它不會以「C2」來查看該值。 最後一個選擇如下如何在excel中爲查找提供替代方案

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

「它沒有執行它。」這是否意味着它永遠不會將公式放入單元格中?如果是這樣,請嘗試'cell3.value =「」'而不是'IsEmpty(cell3.Value)= True' –

+0

你知道'VLOOKUP(A2&「」P2「」,MARM!A:G,7,0) ,如果你運行它自己的?它是一個錯誤,0還是另一個值? –

+0

對不起,沒有正確解釋!公式分開,它們運行得很好。但是,當我嘗試在cell3.Formula = ....中進行合併時,它只將VLOOKUP(A2&「」P2「」,MARM!A:G,7,0)的值放入,但是當這個vlookup不存在,它不放置VLOOKUP(A2&「」C2「」,MARM!A:G,7,0)的值,我想成爲替代品。它只是讓單元變空。但是VLOOKUP(A2&「」C2「」,MARM!A:G,7,0)的vlookup值卻存在,所以這是我寫這行代碼的一個問題。 –

回答

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

不幸的是,即使我看到的代碼正是我想要的,它說有一個語法錯誤 –

+0

@PericlesFaliagas - 修正(需要雙引號「未找到」 –

1

第一件事是cell3.Formula如果初始-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.