[英]How to perform an excel vlookup with dynamic lookup_value using VBA?
我是新來的VBA和需要執行vlookup
與動態lookup_value
。 這樣做的原因是,對於不同的輸入表,實際的lookup_value列可以位於不同的列索引上。
原始的vlookup公式如下所示:
"=VLOOKUP(C2,lookup!$A$2:$B$14,2,FALSE)" 'static vlookup
我要完成的工作應如下所示:
1)查找內部帶有lookup_value的實際列索引(在上述情況下為C2)
With ws
Set FindRng = .Rows(1).Find(what:="Column Name") ' should be 3 for C
FiltCol = FindRng.Column ' get the column number where "Column Name" was found
End With
2)動態設置lookup_value(在本例中為C2)
Dim dynamic_lookup_value as Range
dynamic_lookup_value = ws.Cells(FiltCol, 2) ' should be column C cell 2
3)將對lookup_value的動態引用設置為實際的vlookup公式(即,將硬編碼的C2替換為對C2的引用 )
foobar = "=VLOOKUP(dynamic_lookup_value,lookup!$A$2:$B$14,2,FALSE)" 'dynamic vlookup
但是,(3)會產生Run-time error '91' Object variable or With-block variable not set
。
如何使用VBA使用動態lookup_value執行excel vlookup?
首先,您需要在此處反轉行和列:
ws.Cells(FiltCol, 2)
它應該是:
ws.Cells(2,FiltCol)
其次,您設置范圍:
Set dynamic_lookup_value = ws.Cells(2,FiltCol)
然后,您不必將變量放在引號內,而是將它們與&
串聯
foobar = "=VLOOKUP(" & dynamic_lookup_value.Address(0,0) & ",lookup!$A$2:$B$14,2,FALSE)"
另一條建議:
FiltCol = FindRng.Column
如果找不到該值將出錯。 將其放在If語句中,以檢查是否找到了該值:
If not FindRng is nothing Then
...
End IF
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.