簡體   English   中英

如何使用VBA使用動態lookup_value執行excel vlookup?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM