在VLOOKUP中使用单元格值作为表数组值(无宏)

时间:2015-05-19 12:08:21

标签: excel excel-formula vlookup

B6的单位价值='交易收入

=VLOOKUP(B6,'\\myComp.myComp.com\abc\Treas\P&L\data\[DataUS.xls]Smith, Bob'!$A$1:$D$2000,2,FALSE)

返回(5,555,529.00)

然而,说我想放置

'\\myComp.myComp.com\abc\Treas\P&L\data\[DataUS.xls]Smith, Bob'!$A$1:$D$2000

在一个单元格中(让我们说B7)。我如何构建VLOOKUP? 我试过了:

VLOOKUP(B6, B7, 2, FALSE)

它返回#N / A

谢谢

4 个答案:

答案 0 :(得分:0)

尝试

=VLOOKUP(B6;'\\myComp.myComp.com\abc\Treas\P&L\data\[DataUS.xls]Smith, Bob'!$A$1:$D$2000;2;FALSE)

答案 1 :(得分:0)

您必须使用INDIRECTsee this。 在您的情况下,请使用INDIRECT(B7)代替B7

答案 2 :(得分:0)

试试这个:

=VLOOKUP(B6, INDIRECT(B7), 2, FALSE)

确保单元格B7包含确切路径,即完全按照与公式中所写方式相同的方式编写。

答案 3 :(得分:0)

现在添加宏doe sn确实增加了复杂程度,至少我还没有看到任何案例。相反,宏如果正确完成,可以提高效率, enter image description here依赖性和结果的确定性。

我建议这个包含宏的解决方案,使用 Name 来保存使用用户输入创建的外部参考,提供构建外部数据链接的简单性和灵活性,它在外部链接的不同部分中分开,以便更改,即路径,文件名,工作表和范围

这包括创建五个 Names 来处理链接的公式,这里是你提到“提高复杂程度”时你可能觉得自己做对了但是,我们可以利用宏的强大功能和灵活性,不仅可以在报告,分析等方面产生预期的结果;而且通过使用宏来构建表单,报告,图形,数据等,它也消除了疯狂检查的需要,这有时使我们疯狂,提供和恢复,审查甚至更改大型项目参数的优秀工具需要时。

下面提供的代码包括创建名称,并在用户更改后刷新名称,其中包含外部链接参考工作表中外部参考的任何部分。

首先,我们运行此代码来创建名称(在模块中复制)

Option Explicit
Option Base 1

Sub FmlLnk_WshAddNames()
Const kRowIni   As Byte = 2
Const kCol      As Byte = 3
Const kWshTrg   As String = "Sht(1)"
Dim aNames As Variant
aNames = fNames_Get
Dim WshTrg As Worksheet
Dim bRow As Byte
Dim b As Byte

    Set WshTrg = ThisWorkbook.Worksheets(kWshTrg)
    With WshTrg
        For b = 1 To UBound(aNames)
            bRow = IIf(b = 1, kRowIni, 1 + bRow)
            .Names.Add Name:=aNames(b), RefersTo:=.Cells(bRow, kCol)
            .Names(aNames(b)).Comment = "Name to create link to external range"
    Next: End With
End Sub

Function fNames_Get() As Variant
    fNames_Get = Array("_Path", "_Filename", "_Worksheet", "_Range")
End Function

现在创建了用于保存外部链接部分的名称,我们添加工作表事件以自动更新包含外部链接参考的名称(请参阅https://msdn.microsoft.com/EN-US/library/office/ff198331.aspx

要转到包含公式的工作表的事件过程,请右键单击工作表选项卡,然后单击快捷菜单上的“查看代码”。 复制工作表代码中的以下代码

Option Explicit
Option Base 1

Private Sub Worksheet_BeforeDoubleClick(ByVal RngTrg As Range, bCancel As Boolean)
Const kFmlLnk As String = "_FmlLnk"
Dim aNames As Variant, vName As Variant
aNames = fNames_Get
Dim WshThs As Worksheet
Dim bLnkExt As Boolean
Dim sLnkExt As String

Set WshThs = RngTrg.Worksheet
With WshThs
    Application.Goto .Cells(1), 1

    Rem Validate ActiveCell
    bLnkExt = False
    For Each vName In aNames
        If .Names(vName).RefersToRange.Address = RngTrg.Address Then
            bLnkExt = True
            Exit For
    End If: Next

    Rem Reset Name Link External
    If bLnkExt Then

        Rem Built External Formula Link
        sLnkExt = "=" & Chr(39) & .Names(aNames(1)).RefersToRange.Value2 & _
            "[" & .Names(aNames(2)).RefersToRange.Value2 & "]" & _
            .Names(aNames(3)).RefersToRange.Value2 & Chr(39) & Chr(33) & _
            .Names(aNames(4)).RefersToRange.Value2

        Rem Add External Formula Link Name
        .Names.Add Name:=kFmlLnk, RefersTo:=sLnkExt
        .Names(kFmlLnk).Comment = "Name to link external range in Formula"
End If: End With
End Sub

每次用户双击保存外部链接公式的工作表中创建的四个名称中的任何一个时,此过程将运行

使用外部链接名称的公式为:

=VLOOKUP($B9,_FmlLnk,3,0)

enter image description here