根据单元格值数据,按路径引用Excel工作簿

时间:2012-12-10 23:55:38

标签: excel excel-formula

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

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

的工作簿
  

workbook12.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年12月10日

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

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

3 个答案:

答案 0 :(得分:3)

Frank Kabel's 2004 post at Dicks Blog你可以

  1. 使用Laurent Longre开发了免费加载项MOREFUNC.XLL,其中包含函数INDIRECT.EXT
  2. 使用SQL.REQUEST作为described here *似乎不再受支持了,我不清楚这是否可以处理您的INDEX\MATCH请求
  3. 使用Harlan Grove的PULL功能
  4. 另外你可以:

    1. 直接通过输入引用您需要的工作簿的公式的代码创建“脏链接”
    2. 为了提取价值 - 但不是为了使用范围 - 你可以使用Walkenbach的ExecuteExcel4Macro XLM method

答案 1 :(得分:0)

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

假设您要在A1中搜索记录#say REC001,在C1处搜索日期文件12.10.12,并将结果显示在单元格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更简单。 E.g:

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格式

答案 2 :(得分:0)

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

VBA非常简单:

New_Ref =表格(“Wells”)。范围(“K6”)

ActiveWorkbook.Names(“MyWorkbook”)。RefersTo =“=”& New_Ref

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

一旦发现,名称就会有很多用途。我使用它来从远程共享点站点上的已关闭文件中获取数据没有任何困难 - 我假设sharepoint处理所有权限。