2016-04-21 114 views
0

尋找一種方法來做一個IF單元說(這個)然後VLOOKUP在這裏,IF單元說(thiselse)然後VLOOKUP不同的區域。IF語句包括VLOOKUP

可能是做這一個超級明顯的方式,到目前爲止,有這樣的:

很簡單,但沒有工作

Sub categoryVLOOKUP() 

'IF col D says STAR then enter VLOOKUP formula into column K 
'IF col D says SUN then enter other VLOOKUP formula into column K 

Dim lRow As Long, lCol As Long 
Dim lRow2 As Long 
Dim sht As Worksheet 

Set sht = ThisWorkbook.Worksheets("STARSUN") 
For lRow = 2 To LastRow 
    If sht.Cells(lRow, 4) = "SUN" Then 
     sht.Cells(lRow, 10).Formula = _ 
      "=VLOOKUP(A3&G3,OF_MOON!A:D, 4,0)" 
    Else 

    End If 

    If sht.Cells(lRow, 4) = "STAR" Then 
     sht.Cells(lRow, 10).Formula = _ 
      "=VLOOKUP(A3&G3,OFWORLD!A:D, 4,0)" 
    Else 

    End If 
Next lRow 
End Sub 

回答

1

如果越來越多細胞的公式,是鬥爭,我會推薦R1C1格式:

Sub categoryVLOOKUP() 

'IF col D says STAR then enter VLOOKUP formula into column K 
'IF col D says SUN then enter other VLOOKUP formula into column K 

Dim lRow As Long, lCol As Long 
Dim lRow2 As Long 
Dim sht As Worksheet 
Dim LastRow as long 

LastRow = Cells(Rows.Count, "D").End(xlUp).Row 

Set sht = ThisWorkbook.Worksheets("STARSUN") 
For lRow = 2 To LastRow 
    If sht.Cells(lRow, 4) = "SUN" Then 
    sht.Cells(lRow, 10).FormulaR1C1 = _ 
    "=VLOOKUP(R[1]C[-8]&R[1]C[-1],OF_MOON!RC:RC[3], 4,0)" 

    ElseIf 
    If sht.Cells(lRow, 4) = "STAR" Then 
    sht.Cells(lRow, 10).FormulaR1C1 = _ 
    "=VLOOKUP(R[1]C[-8]&R[1]C[-1],OFWORLD!RC:RC[3], 4,0)" 

End If 

Next lRow 
End Sub 

我認爲這個思路應該讓你開始。請記住,R1C1必須參照公式將要進入的活動單元來完成。我可能需要檢查用於引用新工作表的規則,但是這應該讓您處於正確的路線:)希望它可以幫助

編輯:另外,我相信你需要設置LASTROW 我已經添加到代碼

Dim LastRow as long 

LastRow = Cells(Rows.Count, "D").End(xlUp).Row 
+0

感謝你的幫助,但我不熟悉R1C1 - 我是比較新的VBA和慢慢學習。 – user5836742

+0

沒問題,我是新來的,不久之前:) R1C1是vba可以引用「當前單元格」單元格的一種方式。所以R [1] C [1]意味着從當前的1行開始向下1行。如果您使用R [2] C [2]在單元格A1中輸入公式,則它將引用單元格C3。 – IIJHFII

+0

謝謝,我相信這將是一個偉大的未來!我最終通過創建一個包含所有數據的主表來解決我自己的問題,而不是兩個單獨的問題。無論如何,感謝您的幫助和提示:) – user5836742

0

看起來你缺少的定義和值。

在模塊開始處使用option explicit來強制執行變量聲明。或者只需工具 - >選項 - >檢查需要變量聲明。它會自動完成。

另外我不明白爲什麼你甚至會使用VBA。你就不能使用公式

=IF(cell="SUN",1st vlookup, if(cell="STAR", 2nd vlookup,NA())

我還建議您使用INDEX + MATCH而不是VLOOKUP。

第三個「也」:您正在對您要查找的密鑰進行硬編碼:A3&G3。因此,您最多可以從您的操作中獲得3個值:無論在OF_MOON表格中還是在OFWORLD表格中或#N/A中與A3&G3相關聯。

+0

嗨Zaptask,因爲我有一個很長的數據列表,這是經常添加的,所以我不能爲每個單獨的行寫一個單一的查找。所以更多'如果D列在任何一點說SUN,那麼VLOOKUP這張表,如果列D在任何一點說明STAR,那麼VLOOKUP這張表。不是特定的單元格 – user5836742

+0

在這種情況下,我建議使用Excel表格(我不知道如何將數據輸入到系統中)。即使在一天結束時仍然想要堅持使用VBA,我仍然會建議使用1個公式,而不是在VBA中選擇2個公式中的一個。我認爲前者更具可贖回性,它本身就包含了所有的邏輯。通過使用VBA,您隱藏了用戶的一些邏輯。 – zaptask

+0

我試着用你簡單的Excel公式,但是它返回#N/A。我沒有偏好VBA,只是我輸入的所有Excel公式都失敗了。 – user5836742

0

另一種方式來獲得結果如下

Sub categoryVLOOKUP() 
    Dim lRow As Long, lCol As Long 
    Dim lRow2 As Long 
    Dim sht As Worksheet 
    LastRow = Range("D" & Rows.Count).End(xlUp).Row 
    Set sht = ThisWorkbook.Worksheets("STARSUN") 
    For lRow = 2 To LastRow 
     If sht.Cells(lRow, 4) = "SUN" Then 
      Range("K" & lRow).Value = Application.WorksheetFunction.VLookup(Range("A" & lRow) & Range("G" & lRow), Worksheets("OF_MOON").Range("A:D"), 4, 0) 
     ElseIf sht.Cells(lRow, 4) = "STAR" Then 
      Range("K" & lRow).Value = Application.WorksheetFunction.VLookup(Range("A" & lRow) & Range("G" & lRow), Worksheets("OF_MOON").Range("A:D"), 4, 0) 
     End If 
    Next lRow 
End Sub