我有一张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没有一个简单的一站式解决方案来做这种事情......有人可以帮助吗?谢谢!
答案 0 :(得分:3)
从Frank Kabel's 2004 post at Dicks Blog你可以
INDEX\MATCH
请求另外你可以:
答案 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处理所有权限。