引用单元格的公式而不是 Excel 中的值?

引用单元格的公式而不是 Excel 中的值?

假设在 A1 中我有“=ROW()”。单元格显示“1”,因为它是工作表中的第一行。

现在在 A2 中,我输入了“=A1”。不幸的是,这引用的是 A1 的值,而不是公式。如果它引用了公式,那么 A2 会给出“2”的值(这正是我想要的)。

如果我随后继续更改 A1 中的公式,那么 A2 的值也会改变,因为它依赖于 A1 中的公式。

我该怎么办?

答案1

Excel 工作表函数无法原生实现此操作。如果您需要此功能,则必须使用 VBA。

您可以使用 Worksheet_Change() 事件。当单元格内容发生变化时,该事件将触发,但简单的重新计算不会触发。它有一个参数,指示已更改的单元格;您可以使用它来查看是否需要执行任何操作。此代码需要放在您正在使用的工作表的代码区域中。(使用 Alt+F11 打开 VBA;在左侧面板中,双击工作表。您应该看到类似“Microsoft Visual Basic -文件名-[工作表名称(代码)]”。)

显然,根据以下代码的要求更新工作表名称和范围。

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim test As Range, src As Range, dest As Range

    Set src = Worksheets("Sheet1").Range("A1")
    Set dest = Worksheets("Sheet1").Range("A2")
    Set test = Intersect(Target, src)
    If Not (test Is Nothing) Then
        dest.Formula = src.Formula
    End If
End Sub

上述代码将准确复制公式 - 如果您在单元格 A1 中引用单元格 F3,则在单元格 A2 中也会引用单元格 F3。如果您不希望发生这种情况,请将 If 语句中的行更改为dest.FormulaR1C1 = src.FormulaR1C1。这将适当地更改公式中的任何相对引用。

dest如果您想根据单元格 A1 中的公式一次设置一堆单元格,您可以更改为更大的范围。

需要注意的是,如果您更改了单元格,这不会自动恢复单元格中的公式 - 即,如果您更改了 A2 中的公式,这不会自动将其恢复,因为我们仅在单元格 A1 更改时进行更新。如果您想防止这种情况发生,请更改行

Set test = Intersect(Target, src)

Set test = Intersect(Target, Union(src, dest))

答案2

您可以使用表格来实现它(从 Excel 2007 开始:选择您的范围然后:插入 - 表格;第一行需要包含标题)。
每当您更改公式时,它将在整个列中更新(或者,如果列中的公式在更改前不一样,系统会询问您是否要更新它)。

更新

这里您可以找到有关如何在表中创建计算列的详细说明。
现在,如果您更改任何单元格中的公式,整个列都会更新。(办公室支持)
如果不是这种情况,请确保在文件 - 选项 - 校对 - “键入时自动套用格式”选项卡中选中“在表中填充公式以创建计算列”。

相关内容