2013-01-15 75 views
2

我希望能夠定義一些變量並將它們放在一個vlookup公式中。我在下面概述了一個我試圖實現的簡單例子。但是我不斷收到'438'錯誤信息。使用變量引用的Vlookup

我已經把原始的vlookup放在沒有變量的情況下,並且在變量中沒有使用vlookup。任何輸入將不勝感激。我相信我有正確定義的變量,但我認爲這與我在公式中調用它們的方式有關。

Sub Macro1() 

Dim Lookupcolumn As Range 

Dim columnletter_start As String 

Dim columnletter_End As String 

columnletter_start = ActiveCell.offfet(0, 1).Value 

columnletter_End = ActiveCell.offfet(0, 2).Value 

Set Lookupcolumn = Sheets("Pricing Analysis").Cells.Find(What:="Cusip", After:=ActiveCell, LookIn:=xlFormulas, LookAt _ 
     :=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _ 
     False, SearchFormat:=False) 

'ActiveCell.FormulaR1C1 = "=VLOOKUP(R[1]C[-8],'CS Primeview'!C[-6]:C[-4],3,FALSE)" 

ActiveCell.FormulaR1C1 = "=VLOOKUP(Lookupcolumn,'CS Primeview'columnletter_start:columnletter_End,3,FALSE)" 


End Sub 
+1

你需要做這樣的'ActiveCell.FormulaR1C1 = 「= VLOOKUP(Lookupcolumn, 'CS Primeview'」 &columnletter_start& 「:」 &columnletter_End& 「3,FALSE)」' - 否則該公式使用變量的名稱而不是其內容。 – MattCrum

+0

謝謝馬特的建議。對於我設定爲範圍的'Lookupcolumn',它只是將它看作實際的「lookupcolumn」而不是範圍 - 你知道我做了什麼來糾正嗎?再次感謝。 – user1624926

+0

啊,我錯過了 - 同樣的問題再次...你需要從雙引號中刪除。像這樣:'ActiveCell.FormulaR1C1 =「= VLOOKUP(」&Lookupcolumn&「,'CS Primeview'」&columnletter_start&「:」&columnletter_End&「,3,FALSE)」'。如果它本身不適用於範圍參考,您可能還需要使用LookupColumn.Address。 – MattCrum

回答

3

的問題是,你的確可以使用變量通過Excel.WorksheetFunction.結構使用任何Excel函數在VBA代碼,並獲得正確的結果。 但是,對於您的代碼ActiveCell.FormulaR1C1 = "=VLOOKUP(Lookupcolumn,'CS Primeview'columnletter_start:columnletter_End,3,FALSE)",您嘗試使用範圍對象作爲VLOOKUP中的參考,但Excel理解爲參數僅爲有效參考A1或命名區域。

作爲解決方案,嘗試在您的代碼中生成A1-類似的參數。整列A:A會去。祝你好運!

P.S.還有一件事我注意到了:'CS Primeview'columnletter_start:columnletter_End - 對於這部分,你似乎在參考之前錯過了感嘆號,還有雙引號來連接部分,即"'CS Primeview'!" & columnletter_start & ":" & columnletter_End應該是正確的。

+0

彼得 - 感謝您輸入和輸入答案的時間。我從中瞭解了很多。不勝感激。 – user1624926

+0

感謝彼得和馬特的工廠。 – user1624926

+0

@ user1624926不客氣!這個問題也很棒! (: –

0

下面允許您定義一個變量單元格引用,然後將其轉換爲以.formula方式可讀的格式。這是一個簡單的方法,使用變量查找變量,因爲您可以在Excel中編寫公式,然後將它們複製/粘貼到代碼中,然後更改查找值。這對於索引/匹配也可以很好地工作。

lookup_value = Cells(defined_row,defined_column).Address(False,False) 
lookup_value = Replace(lookup_value, "", "") 

ActiveCell.Formula = "VLOOKUP($" & lookup_value & ",'Sheet1'!$A:$B,2,0)"