繁体   English   中英

使用VBA与动态lookup_value的vlookup?

[英]vlookup with dynamic lookup_value using VBA?

我是使用动态查找值的新手,我尝试遵循如何使用VBA与动态lookup_value一起执行excel vlookup的建议。 从另一个工作簿动态获取值。

下面的代码抛出#Name? 错误。

请求您的帮助以解决该错误。

代码摘录

Dim ws As Worksheet
Dim dynamic_lookup_value As Range
Dim LocationRef As Range

Set ws = ActiveWorkbook.Worksheets("XYZ")

Set dynamic_lookup_value = ws.Cells(2, 1)

ActiveWorkbook.Names.Add Name:="dynamic_lookup_value", RefersTo:=Worksheets("XYZ").Cells(2, 1)

Set LocationRef = ws.Cells(2, ActiveColumn)

ActiveCell.FormulaR1C1 = _
    "=IFERROR(VLOOKUP(" & dynamic_lookup_value.Address(0, 0) & ",'[ABC.xlsx]XYZ'!C1:C26,MATCH(""Location Description"",'[ABC.xlsx]XYZ'!R1C1:R1C26,0),)," & LocationRef.Address(0, 0) & ")"

执行后,公式显示为

=IFERROR(VLOOKUP('A2','[HC report.xlsx]HC Report'!$A:$Z,MATCH("Location Description",'[HC report.xlsx]HC Report'!$A$1:$Z$1,0),),'G2')

请注意,查找值显示为“ A2”(带单个代码)。 试图使用以下代码来声明dynamic_lookup_value ,但徒劳无功。

ActiveWorkbook.Names.Add Name:="dynamic_lookup_value", RefersTo:=Worksheets("XYZ").Cells(2, 1)

如果我在A2和G2之前和之后手动删除Singe代码,则该公式可以正常工作。

要求专家建议解决此问题。

非常感谢,Prabhu

新的答案:能够复制您的错误,我想我有一个解决方案:用ActiveCell.FormulaR1C1替换您的ActiveCell.Formula 这通过我对问题的简单重新创建(使用即时窗口)解决了

这有效(根据单元格A1的地址设置对单元格A2中单元格A1的引用: Cells(2,2).Formula = "="&Cells(1,1).Address(0,0)

虽然这不起作用(单引号中的'A1'与您遇到的问题相同): Cells(2,2).FormulaR1C1 = "="&Cells(1,1).Address(0,0)

我认为VBA中的命名范围和范围变量之间可能会有一些混淆。 但是,公式中的一个问题是应用程序或RC表示法不一致,因此您需要

ActiveCell.FormulaR1C1 = _
    "=IFERROR(VLOOKUP(" & dynamic_lookup_value.Address(0, 0, xlR1C1) & ",XYZ!C1:C26,MATCH(""Location Description"",XYZ!R1C1:R1C26,0),)," & LocationRef.Address(0, 0, xlR1C1) & ")"

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM