自动将多个单元格的公式合并到一个单元格中

自动将多个单元格的公式合并到一个单元格中

我有一张 Excel 工作表,它使用了很多单元格来计算最终结果。我发现这些中间结果在创建公式时可能很有用。现在我想删除中间结果,只在一个单元格中保留一个公式。

我知道如何手动执行此操作,例如如上所述在这个问题和答案中。不过,我想知道是否有自动方式

当我使用跟踪函数时,Excel 似乎已经知道这些值来自哪里:

追踪至上一个

通常我会简单地隐藏行以使其不可见。在这种情况下,我无法做到这一点,因为其他列中有重要的值。

答案1

查尔·普雷托里乌斯的回答很有帮助。修复 2 个问题后,宏对我有用。我在更改脚本的地方添加了注释。

请注意,宏需要按照您希望进行替换的频率运行。可以执行所有替换,但也许应该保留对单元格的最后一个引用。

Sub CombineFormula()

    Dim FormulaCell As Range
    Set FormulaCell = ActiveCell

    Dim StrTemp As String
    StrTemp = FormulaCell.Formula

    'Do not replace the $ sign in absolute addresses.
    'It may be used in text, e.g. in a formula like ="US$"&A1
    'Instead, use different adressing modes in the replacement loop
    '! StrTemp = Replace(StrTemp, "$", "")

    Dim RangeRef As Range

    On Error Resume Next

    Dim ReplaceBy As String
    For Each RangeRef In FormulaCell.Precedents.Cells
        'Add in parentheses to maintain correct order of evaluation, e.g. in cases of addition before multiplication
        ReplaceBy = "(" + Replace(RangeRef.Formula, "=", "") + ")"
        'The order of the following is important
        'Replace absolute ranges first, because A$1 is also contained in $A$1
        StrTemp = Replace(StrTemp, RangeRef.Address(True, True), ReplaceBy)
        StrTemp = Replace(StrTemp, RangeRef.Address(True, False), ReplaceBy)
        StrTemp = Replace(StrTemp, RangeRef.Address(False, False), ReplaceBy)
        StrTemp = Replace(StrTemp, RangeRef.Address(False, True), ReplaceBy)
    Next

    FormulaCell.Value2 = StrTemp
End Sub

答案2

我不确定您是否乐意在工作表中使用宏,但下面是一个简单的宏来实现您想要的功能。只需将代码复制到 VBA,选择要清理的单元格并运行宏,如果您有很多事情要做,您甚至可以为其创建快捷键。但要小心,如果您运行宏,您的所有撤消历史记录都将被删除。

Sub CombineFormula()

Dim FormulaCell As Range
Set FormulaCell = ActiveCell

Dim StrTemp As String
StrTemp = FormulaCell.Formula
StrTemp = Replace(StrTemp, "$", "")


Dim RangeRef As Range

On Error Resume Next

For Each RangeRef In FormulaCell.Precedents.Cells
    StrTemp = Replace(StrTemp, RangeRef.Address(False, False), Replace(RangeRef.Formula, "=", ""))
Next


FormulaCell.Value2 = StrTemp

End Sub

答案3

据我所知,没有直接的方法可以解决这个问题,但我认为函数公式文本可能会对你有用。该函数FORMULATEXT(单元格编号)将返回文本形式的公式,可用于进行一些修改,例如

A3 =公式文本(A1)+公式文本(A2)或类似的东西来实现你的目标。

相关内容