使用INDIRECT在已closures的Excel工作簿中引用值?

我想在另一个封闭的工作簿中使用公式(而不是VBA!)引用单元格值。 工作表名称作为variables存储(在以下示例中,C13是“Sheet2”)。

如果另一个文件是打开的,那么下面的工作:

=INDIRECT("[myExcelFile.xlsm]" & C13 & "!$A$1") 

如果文件closures,上面的公式不起作用,因为没有给出绝对path。 但是我把它和以下工作(注意“而不是”):

 ='C:\data\[myExcelFile.xlsm]Sheet2'!$A$1 

现在我想用dynamic引用值replace硬编码的“Sheet2”,用C13表示(如第一个代码片段所示)。

有没有人知道一个解决scheme,而不使用VBA或其他库?

标准公式无法做到这一点 。 然而,在这里可以find一个疯狂的答案。 它仍然避免了VBA,它会允许你dynamic地得到你的结果。

  1. 首先,使公式生成你的公式,但不要在开始时加上=

  2. 假设您已经在Sheet1单元格B2中创build了此公式,并且您希望在c列中计算公式。

  3. 现在,转到“公式”选项卡,然后select“定义名称”。 给它的名称myResult (或任何你select),并在myResult下,写=evaluate(Sheet1!$B2) (注意$

  4. 最后,到C2 ,写=myResult 。 拖下来,… 瞧!

检查INDEXfunction:

 =INDEX('C:\path\[file.xlsm]Sheet1'!A10:B20;1;1) 

如果你知道你想引用的表的数量,你可以使用下面的函数来找出名字。 比你可以在间接function中使用它。

 Public Function GETSHEETNAME(address As String, Optional SheetNumber As Integer = 1) As String Set WS = GetObject(address).Worksheets GETSHEETNAME = WS(SheetNumber).Name End Function 

这个解决scheme不需要参考工作簿打开 – Excel会自己打开它(但它会被隐藏)。

好,

这是Office 2010上的一个恐龙方法。

用concatenate写出你想要的完整地址(“&”结合文本的方法)。

为所有你需要的地址做这个。 它应该看起来像:

=“=”&“'\ FULL NETWORK ADDRESS including [Spreadsheet Name]”&W3&“'!$ w4”

W3是我正在使用的工作表的dynamic参考,W4是我想从工作表获得的单元格。

一旦你有了这个,开始一个macroslogging会话。 复制单元格并粘贴到另一个。 我把它粘贴到一个合并单元格,它给了我经典的“相同大小”的错误。 但是,它所做的一件事就是粘贴我的连接(包括多余的“=”)的结果文本。

复制,但你做了这么多。 然后,进入每个粘贴的单元格,select他的文本,然后按回车。 它将其更新为活动的直接引用。

一旦你完成了,把光标放在好的地方,并停止macros。 分配给一个button,你就完成了。

这是第一次做这个PITA,但是一旦你做完了,你只是做了一个圆形的洞。

= INDIRECT( “ 'C:\数据[ ”&A8&“] SHEETNAME'!$ G9”)

其中A8包含myExcelFile.xlsm

G9包含您的源工作簿宝贵的数据。