复制 Excel 工作表并在公式中维护相对单元格引用

Jak*_*ake 49 vba macros microsoft-excel-2007 microsoft-excel microsoft-excel-2010

Excel 中的另一个复制问题:

如何将工作表从 WorkbookA.xlsx 复制到 WorkbookB.xlsx 而不复制的工作表仍然引用 WorkbookA.xlsx 例如公式在复制时=B!23变为=[WorkbookA.xlsx]!B!23

我想维护“相对”单元格引用而不是“绝对”单元格引用(如果它还不存在,我将在 Excel 世界中发明这个术语)。

我无法使其工作的另一种可能选择是仅粘贴单元格“值”的选项。Excel 将“值”视为计算值而不是单元格中的实际公式。如果我选择粘贴公式,它仍然提供绝对引用。

更多关于为什么我需要这个: 我有一个用于日常操作的生产 xlsx。我们经常需要对这个 xlsx 进行“升级”,因此一个人可以为一张纸创建一个副本和他的更改。同时,另一个人也可能正在对另一个工作表进行更改。鉴于这些工作表在其他工作表上没有依赖单元格,例如摘要报告,我们希望只需将工作表复制并合并回原始 xlsx。但是“绝对”引用带来了很多麻烦。

小智 27

我发现在许多情况下,执行以下操作更容易:

  • 将工作表复制到新工作簿
  • 激活新工作簿中的新工作表
  • 全选 ( Ctrl+ A)
  • 做一个查找/替换
    • 找: [WorkbookA.xlsx]!
    • 替换:<留空>
  • 全部替换


小智 25

尝试使用Ctrl+~来显示公式。然后使用Ctrl+A选择所有内容,将其复制并粘贴到记事本中。

最后,将其从记事本中复制并粘贴到您的其他工作簿中。

  • @Jake:但是[你说过](//superuser.com/q/397431/150988#comment451310_397531)你的工作簿有按钮、下拉菜单等;和命名范围。这种技术不会复制它们(或格式化等平凡的事情)——您如何/为什么认为它可以接受? (2认同)

小智 13

正下方未签名的答案是对我有用的答案,只有很小的变化。

  1. 创建并保存目标电子表格。

  2. 使用“移动”、“复制”或将带有公式的页面拖到新电子表格中。这使新页面上的公式指向旧工作表。然后将新电子表格保存在与旧工作表相同的位置。

  3. 然后转到“数据”选项卡 > 单击“编辑链接”。除非页面中有链接,否则该选项不会处于活动状态。

  4. 在出现的对话框中,选择源文件的名称并单击“更改源”。

  5. 从接下来出现的打开文件对话框中,选择新电子表格的名称。

单击关闭,您就完成了。


小智 9

或者简单地执行以下操作:

转换这个:

=database_feed!A1
Run Code Online (Sandbox Code Playgroud)

对此:

=INDIRECT("database_feed!A1")
Run Code Online (Sandbox Code Playgroud)

当您在工作表之间复制时,不会再更改您的参考文献。

如果您没有引用很多工作表,另一种选择是使用

=INDIRECT("'"&B1&"'!A1")
Run Code Online (Sandbox Code Playgroud)

并在单元格 B1 中输入参考表的名称。现在,当您复制到新电子表格时,您只需更新一个单元格。

  • `INDIRECT` 是一个易变的公式,因此每次都会重新计算(而不是仅在编辑时重新计算),这确实会减慢更复杂的工作簿的速度,因此请谨慎使用 (3认同)

小智 6

由于 99% 的回答甚至没有解决最初的问题,这里是正确的回答。

  1. 像往常一样将工作表从原始文件 (Original.xlsx) 复制到新的 Excel 文件 (New.xlsx)。通常,我右键单击名称并选择“移动或复制...”。

  2. 保存第二个 - 新创建的文件 (New.xlsx)。

  3. 在新文件中的数据下,单击“编辑链接”

  4. 在弹出窗口中,选择“更改源...”

  5. 找到文件 (New.xlsx) 并单击打开。

所有对原始 (Original.xlsx) 的引用都将被删除。

完毕!