2016-10-04 133 views
-2

我需要關於vlookup的宏腳本的幫助。我想在vlookup腳本中對錶格數組的信息進行硬編碼。現在的問題是,當我爲vlookup函數放置行時,它只能在最後一行工作,儘管所有行實際上都是來自數組表的信息。VBA中的VLOOKUP宏

我需要幫助,以確保如果宏運行它將開始運行第一個宏行,並轉到第二行,如果第一行沒有匹配。第三行也一樣。提前致謝。

Sub Macro7() 

    Range("L1").Select 

    Range("L1").FormulaR1C1 = "=VLOOKUP(RC[-1],{1603101,""BFF""},2,FALSE)" 
    Range("L1").FormulaR1C1 = "=VLOOKUP(RC[-1],{1603102,""DELTA""},2,FALSE)" 
    Range("L1").FormulaR1C1 = "=VLOOKUP(RC[-1],{1608063,""BIST""},2,FALSE)" 

    Lastrow = ActiveSheet.UsedRange.Rows.Count 

    Range("L1").Autofill Destination:=Range("L1:L" & Lastrow) 

End Sub 
+2

您的宏從第1行開始,然後進入第2行,然後行3等。但它一直覆蓋同一個單元格,所以最後只能看到第三個vlookup。無論如何,你如何期望在一個單元格中放置3個不同的vlookups?嘗試通過(F8)你的代碼,然後你會看到它確實做了所有事情。 – vacip

+0

是的,它會一直覆蓋,直到找到完全匹配。我現在的意圖是希望確保每個單元格都能運行所有的查找函數列表來查找總共有1k個信息的信息,這些信息需要硬編碼。使用上面的代碼將直接運行最後3個並給我NA。 – mhalwi

回答

1

試試這個:

Sub Macro7() 
    With ActiveSheet 
     .Range("L1:L" & .UsedRange.Rows.Count).FormulaR1C1 = "=VLOOKUP(RC[-1],{1603101,""BFF"";1603102,""DELTA"";1608063,""BIST""},2,FALSE)" 
    End With 
End Sub 

如果你願意有VBA代碼不計算本身,而不是創建一個公式,你可以使用類似下面的代碼。 (通過公式進行更新的優點是每次數據更改時都會更新,而不需要再次調用宏)。

Sub Macro7() 
    Dim r As Long 
    Dim v as String 
    With ActiveSheet 
     For r = 1 to Range("K" & .Rows.Count).End(xlUp).Row 
      Select Case .Cells(r, "K").Value 
       Case 1603101: v = "BFF" 
       Case 1603102: v = "DELTA" 
       Case 1608063: v = "BIST" 
       Case Else: v = "UNKNOWN!!" 
      End Select 
      .Cells(r, "L").Value = v 
     Next 
    End With 
End Sub 
+0

感謝您的評論。我之前嘗試過,它工作。現在的問題是我喜歡1k加上信息,我想在vlookup中進行硬編碼,而且excel宏不允許我這樣做。所以,而是即時通訊嘗試使列表中的不同信息的查找。在移動到下一個單元格之前,每個列的意圖都會首先遍歷所有的vlookup函數列表。任何想法做到這一點? – mhalwi

+0

@mhalwi - 爲什麼不在Excel中將所有VLookup鍵/值設置在一個範圍內並正常使用VLookup? – YowE3K

+0

我想硬核它,因爲每次我拉數據,我不必打開另一個Excel表的數組表。現在的問題是雖然在第二行發現了該值,但是當它通過第三行時,該值將被替換,因爲在第三行中不是被搜索的值。 – mhalwi