使用VBA进行动态lookup_value的vlookup?

时间:2018-04-11 10:46:02

标签: excel vba excel-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代码,那么公式可以正常工作。

请专家建议解决此问题。

非常感谢, 帕布

2 个答案:

答案 0 :(得分:0)

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

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

虽然这不起作用(在单引号中提出与#A;'相同的问题):Cells(2,2).FormulaR1C1 = "="&Cells(1,1).Address(0,0)

答案 1 :(得分: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) & ")"