5

我有一个 Excel 工作表,它从其他已关闭的 Excel 工作簿中提取数据。目前,当我列出关闭的工作簿的整个路径时,它工作正常,但我想使用存储在单独单元格中的变量作为路径名的一部分。

例如,我正在尝试引用一个名为

工作簿12.10.12.xls

在一个单独的工作簿(我们会说“活动”工作簿)中,我有一个带有公式的单元格

=INDEX('C:\Path[workbook12.10.12.xls]SHEET1'!$B$1:$B$5, MATCH("匹配文本", 'C:\Path[workbook12.10.12.xls]SHEET1'!$A $1:$A$5, 0))

它在 workbook12.10.12 的 B 列中找到与 A 列中包含“匹配文本”的单元格相对应的值。这很好用;但是,我在活动工作簿中有一个单元格,其值为

12.10.12

并想以某种方式在 INDEX 函数中引用此值。

我无法打开其他工作簿,因此 INDIRECT 功能无济于事。谷歌搜索似乎表明 Excel 对这类事情没有简单的一站式解决方案......有人可以帮忙吗?谢谢!

4

3 回答 3

3

Frank Kabel 2004 年在 Dicks 博客上的帖子中,您可以

  1. 使用 Laurent Longre 开发的免费插件MOREFUNC.XLL,其中包括函数 INDIRECT.EXT
  2. 使用此处描述的SQL.REQUEST *似乎不再受支持,我不清楚这是否可以处理您的INDEX\MATCH请求
  3. 使用 Harlan Grove 的PULL函数

此外,您可以:

  1. 通过输入引用您需要的工作簿的公式的代码直接创建“脏链接”
  2. 对于提取值 - 但不适用于使用范围 - 您可以使用 Walkenbach 的ExecuteExcel4Macro XLM 方法
于 2012-12-11T00:08:46.577 回答
0

我认为您要做的是在特定文件(命名日期)中找到特定记录。您可以通过一个简单的 VBA 代码来完成。

假设您要REC001在 A1 中搜索记录#,日期文件12.10.12位于单元格 C1,并将结果显示在单元格 A7 中

在要输入输入和获取输出的工作表上,右键单击工作表选项卡并选择“查看代码”并粘贴以下代码:

Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Range("C1")) Is Nothing Then Exit Sub
Range("A7").Formula = "=INDEX('C:\TEMP\[workbook" & Range("C5").Value & ".xls]SHEET1'!$B$1:$B$5, MATCH(" & Range("A1").Value & ", 'C:\TEMP\[workbook" & Range("C5").Value & ".xls]SHEET1'!$A$1:$A$5, 0))"
End Sub

然后每次编辑 C1 时,公式都会更新。

实际上,我认为您不应该在您的情况下使用 INDEX 函数。使用 VLOOKUP 更简单。例如:

Range("A8").Formula = "=vlookup(" & Range("A1").Value & ",'C:\TEMP\[workbook" & Range("C5").Value & ".xls]SHEET1'!$A$1:$B$5,2,false)"

您必须注意几点:1.您将代码粘贴到 Sheet1 对象(或工作表名称)上,但不插入新模块 2.您的目标文件的路径和文件名是正确的,包括 .xls和 .xlsx 3. 您的原始文件只覆盖到 $B$5 4. 在 VBA 上,建议您将文件保存为 .xlsm 格式

于 2012-12-11T06:22:29.990 回答
0

您可以在 excel 中以名称存储完整引用,包括到已关闭文件中某个范围的文件路径(直接或通过 VBA 根据不同单元格中的选择并使用上述 Worksheet_Change 过程),然后使用像往常一样在公式中命名。这克服了 INDIRECT 函数的限制。

VBA 非常简单:

New_Ref = Sheets("Wells").Range("K6")

ActiveWorkbook.Names("MyWorkbook").RefersTo = "=" & New_Ref

唯一的技巧是确保在名称中包含“=”。

一旦发现这一点,名称就会有大量用途。我已经使用它轻松地从远程共享点站点上的关闭文件中获取数据 - 我假设共享点处理所有权限。

于 2015-03-31T10:07:31.473 回答