【问题标题】:How to perform an excel vlookup with dynamic lookup_value using VBA?如何使用 VBA 执行带有动态 lookup_value 的 excel vlookup?
【发布时间】:2017-12-05 03:16:33
【问题描述】:

我是 VBA 新手,需要使用动态 lookup_value 执行 vlookup。原因是实际的 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?

【问题讨论】:

    标签: vba excel


    【解决方案1】:

    首先,您将此处的列和行颠倒过来:

    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
    

    【讨论】:

    • 就像一个魅力! 部分在我的原始代码中,我只是将其删除,因为如果我的示例代码变得更长,人们往往不会回答 - 再次:谢谢 man
    • @sudonym 可以理解,但是下一个遇到这个的人可能不知道,所以我会把它留在里面。很高兴能提供帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多