2012-03-06 08:47:35 +0000 2012-03-06 08:47:35 +0000
44
44

复制Excel工作表,并在公式中保持相对单元格引用

另一个Excel中的复制问题:

如何才能将工作表从WorkbookA.xlsx复制到WorkbookB.xlsx中,而不至于在复制后的工作表仍然引用WorkbookA.xlsx,例如:当复制过来时,公式=B!23变成了=[WorkbookA.xlsx]!B!23

我想保留 “相对 "单元格引用,而不是 "绝对 "单元格引用(如果在Excel世界中还没有这个术语,我将发明这个术语)。Excel将 "值 "视为计算出的值,而不是单元格中的实际公式。如果我选择了粘贴公式,它仍然给出了绝对引用。我们需要不断地对这个xlsx进行 "升级",所以一个人可能会创建一个副本,并在那里对一个单张进行修改。同时,另一个人也可能会对另一张表进行修改。鉴于这些表没有依赖其他表的单元格,就像一个总结报告一样,我们最好是将这些表复制并合并到原来的xlsx中。但是 "绝对 "引用给我们带来了很多麻烦。

答案 (17)

26
26
26
2012-11-29 19:39:45 +0000

我发现,在很多情况下,我发现这样做更容易:

  • 将工作表复制到一个新的工作簿中
  • 在新的工作簿中激活新的工作表
  • 选择所有(Ctrl+A)
  • 在 上做查找/替换: [WorkbookA.xlsx]!
  • 替换。<
  • 替换:<留空>
  • 替换全部
22
22
22
2012-05-02 14:44:00 +0000

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

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

12
12
12
2013-11-26 22:20:16 +0000

下面这个无符号的答案对我来说是有效的,只是有一点小小的变化。

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

    1. 使用 “移动","复制",或将你的页面与公式拖到新的电子表格中。这将使新页面上的公式指向旧工作表。然后将新电子表格保存在与旧工作表相同的位置。然后转到数据选项卡>点击编辑链接。在弹出的对话框中,选择源文件的名称,然后单击 "更改源"。 5.在接下来出现的打开文件对话框中,选择新电子表格的名称。
9
9
9
2014-01-17 17:07:23 +0000

或者只需执行以下操作:

转换为:

=database_feed!A1

,当你在不同工作表之间复制时,就不会再修改参考资料。现在,当复制到新的电子表格时,你只有一个单元格需要更新。

3
3
3
2012-03-07 15:06:38 +0000

下面的代码可以根据你的需求进行调整。它将wb1上的所有公式从工作表中提取,并将其应用到新工作簿中的一个工作表中。这些公式是以String的形式应用到新的工作簿中,所以不需要插入对原始工作簿的引用。另外,这段代码的速度非常快,因为它不使用剪贴板,也不需要在单元格中进行任何循环。

3
3
3
2016-03-15 21:31:57 +0000

由于99%的回答都没有涉及到原来的问题,所以下面是正确的回答。

  1. 像平时一样将原文件(Original.xlsx)中的表复制到新的Excel文件(New.xlsx)中。一般情况下,我在名称上点击右键,选择 “移动或复制………..”

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

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

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

5.找到文件(New.xlsx),然后点击打开。

2
2
2
2013-10-04 11:52:22 +0000
  • 复制工作表到'WorkbookB.xlsx’
  • 在新文件中打开工作表
  • 选择所有
  • 进入菜单 “数据",点击编辑链接
  • 编辑链接,使旧文件的链接变成当前打开的文件的链接

这对我来说很有效。

0
0
0
2018-09-10 16:09:13 +0000

如果因为你在VBA程序中拉入表,所以需要自动完成这个操作。用这个方法:

Public Sub ChangeSource()
'
' ChangeSource Macro
' Edit the links to point to the current workbook.
'
    Dim allLinks As Variant
    allLinks = ThisWorkbook.LinkSources(xlExcelLinks)
    If Not IsEmpty(allLinks) Then
        Dim eachLink As Long
        For eachLink = 1 To UBound(allLinks)
            If InStr(3, "String found in source book name.", allLinks(eachLink)) Then
                ThisWorkbook.ChangeLink Name:=allLinks(eachLink), NewName:=ThisWorkbook.FullName, Type:=xlExcelLinks
            End If
        Next eachLink
    End If
End Sub

只要将 “String found in source book name. "改为与你要替换的旧链接相匹配。如果你想替换所有的链接,你可以把这个if块去掉。

0
0
0
2016-01-14 06:57:35 +0000

另一个 “技巧”–在复制源工作表之前,将所有的公式修饰符=替换成其他字符集(例如###=)。

0
0
0
2012-03-06 14:49:54 +0000

两个工作簿都必须打开才有效。你运行这个宏,它会将workbookA!sheet1复制到workbookB!sheet1,然后替换所有的workbookA的引用。这很粗糙,但很有效*。很明显,你可以修改代码以匹配你的WorkbookA.xlsx名称,但要确保它们有正确的扩展名,并保持引号。

_Oh,制作一个宏,如果你不知道的话,按alt + F11调出Visual Basic编辑器。然后在WBA insert - module上点击右键,将下面的代码复制粘贴到模块中。然后按F5键运行宏。如果宏无法运行,可能是因为宏没有被启用,所以请继续保存并重新打开,当提示启用宏时,启用宏。

0
0
0
2015-02-12 20:52:39 +0000

我也遇到了类似的问题。我在WBA的链接中粘贴公式的原因是,我在WBA中工作的表格(表)和在WBB中的名字不一样。对我来说,它总是 “最后一个表",但其中一个被命名为 "MinFlow",另一个被命名为 "NormalFlow"。我把这两个名字都重命名为 "结果",复制/粘贴的效果和我想要的一样–"相对粘贴"。

0
0
0
2015-04-25 11:54:19 +0000

选择你要移动的单元格。现在尝试将它们拖动到不同的工作表(不同的选项卡)。这里是棘手的部分:只要按cmd (mac)或alt (win),它就会让你把单元格拖到另一个选项卡。

0
0
0
2014-06-24 17:11:43 +0000

我是通过复制单元格到新工作表,然后做一个查找替换来删除公式中的旧文件路径。这将删除它,并将公式恢复为=J2

不需要VB!

0
0
0
2015-12-30 08:23:53 +0000

你好,这里有一个简单的解决方案:

  1. 像往常一样复制到单元格中。在公式中选择并复制链接到之前的工作簿[WorkbookA.xlsx]的文本。3. 选择所有要更改的单元格,按CTRL+F,选择替换选项卡。4. 用空格替换[WorkbookA.xlsx](也就是不要在Replace with字段中写任何东西,按下Replace All
0
0
0
2016-04-25 08:36:13 +0000
  1. 像往常一样复制工作表。(右键单击到选项卡,进入 “移动或复制”),这是用于格式化。从原工作表中复制所有单元格(使用Ctrl+A或左上角三角形和Ctrl+C)

  2. 粘贴为值到新的工作簿中(在 “步骤-1 "表上)(粘贴选项>123)

-1
-1
-1
2014-06-24 18:04:42 +0000

  在源工作簿(WorkbookA.xlsx)中,选择要复制的工作表。  右键单击工作表选项卡,选择 “移动或复制…”  在 “移动或复制 "对话框中,在 "To book "下拉菜单中选择 "WorkbookB.xlsx",选择要放在该工作簿的哪个位置,并勾选 "Create a copy"。

-1
-1
-1
2015-10-06 11:52:47 +0000

制作一个你要移动的工作表的副本,在这种情况下,将是WorkbookA.xlsx。将其重命名为 “WorkbookA.xlsx副本"。现在打开这个新的工作簿,以及你要移动的工作簿,在这种情况下,将是WorkbookB.xlsx。在你创建的复制工作簿中的工作表上单击右键,即复制WorkbookA.xlsx,然后选择 "移动或复制",然后将这些工作表移动到WorkbookB.xlsx。你就大功告成了!