如何准确复制并粘贴 Excel 中的公式?

如何准确复制并粘贴 Excel 中的公式?

我有大量公式需要复制和粘贴而不更改单元格引用,但 excel 一直在更改它。我也想在不替换公式中的 = 符号的情况下做到这一点。公式中和工作表中的其他地方有多个 = 符号,我不想冒险搞砸它们。你不能告诉我 excel 已经推出这么久了,没有简单的方法可以在不更改引用的情况下复制和粘贴公式。

答案1

这里有大量有关在 Excel 中复制和粘贴公式的多种不同选项的资源。

Ablebits 博客: 如何在 Excel 中复制公式

您在评论中指出,针对您的用例有两种方法失败了:

  1. 在文档之间复制时单元格引用包括对原始工作簿和工作表的引用。
  2. 暂时替换公式中的等号对您来说是不可取的,因为您“在公式中以及工作表的其他地方有多个 = 符号”,您“不想冒险搞砸它们”。

您会看到粘贴时引入了工作表和工作簿引用。我看到在某个时刻明确写入了对工作表和工作组的相对引用,这是维护它的唯一方法,否则会破坏公式(我确实明白这是您的目标)。

即使在您自己的有限情况下很有用,但在粘贴时有选择地任意更改 Excel 中的公式在多种用例中都是不可取的。

上述 #1 和 #2 中的方法似乎适合您的问题空间,满足您的需求,并且是实现目标的最简单、最安全的方法。除了几次击键之外,它们几乎不需要额外的时间和精力,因此反对使用它们的论点似乎没有说服力。

  1. 对于包含的工作簿/工作表名称,这是一个简单的问题全部替换(CTRL + F > 替换 > 全部替换)全局删除有问题的引用(“[workBookName.ext]”)(如果工作表名称相同)或(“'[workBookName.ext]SheetName!'”)(如果工作表名称不同)。快速、简单,所有引用现在都已损坏(您可能会说已修复),如您所愿。

  2. 替换等号是实现所需目的的绝佳方法,因为它提供了一种在不损坏公式的情况下转换为文本字符串并返回的简单方法。用不会在现实世界中碰到任何东西的字符串替换选定内容中的所有等号是小菜一碟,而且几乎不会弄乱任何东西。

就我而言,在选择要复制的单元格之后,但在复制之前,我会全部替换(CTRL + F > 替换 > 全部替换)将“=”替换为“XXXXX”。我使用了 5 个 X,这样我的公式中就不会出现包含“XXXXX”的内容,当我将“=”放回去时,公式就会变得混乱。

在把我的公式粘贴到需要的地方之后,我会再次全部替换(CTRL + F > 替换 > 全部替换)在旧位置和新位置用“=”替换所有“XXXXX”实例。几乎不比复制和粘贴花费更多时间。

如果您知道自己在这样的操作中很容易犯错误,我建议对您的文档进行版本控制和/或备份,以便您可以回滚到犯错之前。


您是否应该尝试不同的方法?

解决问题时,细节决定成败,对一个人有用的方法可能并不适合另一个人的使用情况。

如果你的大部分工作流程涉及破坏单元格引用,那么备份一些空格并检查你试图完成的任务可能会发现替代方法(XY问题) 不太依赖工作簿之间的复制和粘贴功能。


为了您的利益

离题了,但我想我应该加入一下。

拉姆达
如果您发现有大量重复使用的复杂自定义公式,因此想要复制它们,您可以研究一下 LAMBDA(命名)函数。这是 Excel 中相对较新的功能,可以创建自定义的可重复使用函数并通过友好名称调用它们。微软 LAMBDA

还有关于跨工作簿共享的信息。

这可能是最简单的方法之一,只需稍加修改:YouTube:在多个工作簿中使用 LAMBDA 函数

答案2

您可以对单个单元格执行此操作,使用 CTRL C 从公式栏复制,然后按 esc 删除突出显示,然后进入新单元格的公式栏并按 CTRL V 将公式粘贴到新位置。

要复制多个,您可以将格式更改为文本,确保显示所有公式(即不是计算结果 - 您可以通过分别单击每个包含公式的单元格来执行此操作,我不确定是否有更好的方法),然后将值复制并粘贴到新位置。然后将格式更改回常规,并通过单击单元格来激活它们(如果需要)。

或者发布的解决方案这里 首先涉及将一系列单元格复制到记事本,然后再复制回 Excel。

这是一个宏解决方案,希望它有帮助:

Option Explicit

Sub Formula_Copy()
Dim x As Range, y As Range
Dim n As Long, i As Long
Set x = Application.InputBox("Select range of cells containing formulae to copy:", "Range Selection", Type:=8)
Set y = Application.InputBox("Select first cell of output range", "Range Selection", Type:=8)
For n = 1 To x.Columns.Count
    For i = 1 To x.Rows.Count
        y.Offset(i - 1, n - 1).Formula = x.Cells(i, n).Formula
    Next i
Next n
End Sub

相关内容