如何在Excel中对另一个工作簿进行相对引用?

时间:2012-07-24 11:12:20

标签: reference excel

我正在制作一张纸来计算价格。该表必须引用其他几个工作簿来获取不同组件的价格。这在我的计算机上工作正常但是当我将它们移动到服务器或另一台计算机时,它找不到引用。

我的文件夹结构如下:

Folder
|-- prices.xlsx
|-- Fixed Components
|   |-- ComponentsA.xlsx
|   +-- ComponentsB.xlsx
|
+-- Variable Components
    |-- ComponentsC.xlsx
    +-- ComponentsD.xlsx

prices.xlsx是引用其他工作表的主要工作表。在我的计算机上,它使用绝对路径构建引用,因此当我复制文件时,路径保持固定在我的机器上,而不是引用另一台PC上的文件。

是否有任何方法可以使引用相对,以便我可以在主表中放入类似='\Variable Components\[ComponentsC.xlsx]Sheet1'!A1的内容。我不想为此使用VBA,因为人们不倾向于信任宏,然后抱怨功能不起作用。

7 个答案:

答案 0 :(得分:6)

我看到将外部文件组织到子文件夹中的唯一解决方案需要使用VBA来解析公式中外部文件的完整路径。以下是一个网站的链接,其中包含其他人使用过的几个示例:

http://www.teachexcel.com/excel-help/excel-how-to.php?i=415651

或者,如果您可以将所有文件放在同一文件夹中而不是将它们分成子文件夹,那么即使您将文件移动到网络位置,Excel也将解析外部引用而无需使用VBA。然后您的公式变为='[ComponentsC.xlsx]Sheet1'!A1,没有要遍历的文件夹名称。

答案 1 :(得分:6)

我遇到了类似的问题,我使用以下序列解决了这个问题:

  1. 使用CELL("filename")函数获取当前文件当前工作表的完整路径。

  2. 使用SEARCH()函数查找当前Excel文件和工作表的[FileName] SheetName字符串的开头。

  3. 使用LEFT函数提取包含当前文件的目录的完整路径名。

  4. 将步骤3中找到的目录路径名称与文件名,工作表名称和要访问的单元格引用相连接。

  5. 使用INDIRECT()功能访问您在步骤#4中创建的CellPathName

  6. 注意:这些相同的步骤也可用于访问名称是动态创建的文件中的单元格。在步骤#4中,使用从单元格内容,当前日期或时间等动态创建的文本字符串等。

    包含所有这些步骤的单元格参考示例(每个单独组装)是:

    =INDIRECT("'" & LEFT(CELL("filename"),SEARCH("[MyFileName]MySheetName",CELL("filename")) - 1) & "[" & "OtherFileName" & "]" & "OtherSheetName" & "'!" & "$OtherColumn$OtherRow" & "'")
    

    请注意,LibreOffice使用稍微不同的CellPatnName语法,如以下示例所示:

    =INDIRECT(LEFT(CELL("filename"),SEARCH("[MyFileName]MySheetName",CELL("filename")) - 1) & "OtherFileName" & "'#$" & "OtherSheetName" & "." & "$OtherColumn$OtherRow")
    

答案 2 :(得分:3)

更容易&通过间接缩短:INDIRECT("'..\..\..\..\Supply\SU\SU.ods'#$Data.$A$2:$AC$200")

然而,如果工作簿中有很多链接,则indirect()会有性能上的缺陷

我想念LibreOffice中的构造:['../Data.ods']#Sheet1.A1。目的在于:如果我在源文件系统中创建了一堆主工作簿并且依赖于报表工作簿在有限的目录子目录中,我可以用完整的工作簿包压缩整个目录子树,并将其发送给其他合作人员每封电子邮件等。它将保存在目标系统的其他一些绝对pazth中,但是链接在新的绝对路径中再次工作,因为它是相对于子树根编码的。

答案 3 :(得分:1)

使用= worksheetname()和= Indirect()函数,并使用外部引用的Excel文件的名称命名父Excel文件中的工作表。每个外部引用的excel文件都在自己的文件夹中,名称相同。这些子文件夹只是为了更清晰。


我所做的如下: -

| ---- B栏--------------- | ---- C栏------------ |

R2)父文件夹--------> “C:\ TEMP \ EXCEL \”

R3)子文件夹名称---> = worksheetname()

R5)完整路径--------------> =“'”& C2& C3&“[”& C3&“。xlsx] Sheet1'!$ A $ 1”

R7)间接功能-----> = INDIRECT(C5,TRUE)

在主文件中,我曾说过,标有Ext-1,Ext-2,Ext-3,Ext-4,Ext-5的5个工作表。将上述公式复制粘贴到所有五个工作表中。在后台打开所有分别命名的Excel文件。由于某种原因,结果不是自动计算的,因此必须通过编辑任何单元格强制进行更改。 Volla,每个外部引用的Excel文件的单元格A1中的值都在主文件中。

答案 4 :(得分:0)

假设您链接到共享驱动器,例如S驱动器?如果是这样,其他人可能会以不同的方式映射驱动器。您可能需要使用“官方”驱动器名称// euhkj002 / forecast / bla bla。而不是链接中的S //

答案 5 :(得分:0)

在Excel中,有一种方法可以将相对引用嵌入到文件或目录中。 您可以尝试输入excel单元格: = HYPERLINK(“ .. \ Name_of_file_or_folder \”,“ DisplayLinkName”)

答案 6 :(得分:-1)

对我有用的是一个点。我的办公室是365。 = HYPERLINK(“。\ Name_of_folder \”,“ DisplayLinkName”) = HYPERLINK(“。\ Name_of_file”,“ DisplayLinkName”)