繁体   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