如何让一个单元格显示另一个单元格中输入的所有值的累积值?

如何让一个单元格显示另一个单元格中输入的所有值的累积值?

我希望电子表格中有一个单元格以累积方式更新,以响应另一个单元格中值的更改。这个单元格的代码是什么?

例如,单元格 B2 的原始值为 3,单元格 C2 显示输入到单元格 B2 的所有数字的累计值。因此最初 C2 将显示 3。一旦 B2 的值更改为 10,C2 将显示 13,依此类推。

答案1

这将需要 VBA。

类似这样的方法可以工作,它通过 VBA 编辑器进入Sheet1模块*。您可以根据需要更改工作表名称和范围。-

Sub worksheet_change(ByVal target As Range)
    If Not Intersect(target, Range("B2")) Is Nothing Then
        Range("C2") = Range("C2").Value + target.Value
    End If
End Sub

但是,如果目标不是数字,则会出现错误。因此,您需要像这样处理错误 -

Sub worksheet_change(ByVal target As Range)
    If Not Intersect(target, Range("B2")) Is Nothing Then
        If IsNumeric(target.Value) = False Then GoTo Error:
        If IsNumeric(Range("C2").Value) = False Then GoTo Error:
        Range("C2") = Range("C2").Value + target.Value
        Exit Sub
    Else: Exit Sub
    End If

Error:
    MsgBox ("Use a number!")
End Sub

*要进入 VBA 编辑器,您必须转到 Office 按钮、Excel 选项,然后在热门标签中勾选旁边的复选框Show Developer tab in the Ribbon。然后关闭它,转到开发人员选项卡并单击Visual Basic最左侧的按钮。编辑器将打开,您需要双击左侧Sheet1窗格中的模块(或该模块所在的任何工作表)。

答案2

您可以做到这一点,但需要注意的是,无需 VBA,否则会存在很大的缺陷。

但当他读到如何时谁会愿意呢?

首先,也许你在 A1 中有一个公式=A1+B1。而在 B1 中什么都没有。你想要的就是你要求的。

其次,您需要在 Excel 中进行设置。主要包括两个部分:

  1. 转到File | Options | Formulas,第一部分,就在最顶部,为了好玩,转到顶部的右侧。选中 的复选框Enable iterative calculation。然后在 下方的框中输入“1” Maximum Iterations。最后一部分与第一部分同样重要。单击OK底部并返回工作表。

  2. 如果您希望立即继续执行此操作,请保留Calculation“自动”以便进行计算。开始在 B1 中输入数字,一个接一个。输入其中一个,然后按 Enter,并观察 A1 中的公式是否有效。也许您的想法是将银行存款支票加起来,而您不喜欢更好的方法。这将完成此操作。片刻输入完毕后,要么在 B1 中再输入一个条目,即输入“0”并按 Enter,然后您就可以在电子表格中随意进行任何其他工作,要么您可以将Calculation其更改为“手动”以关闭它,并且永远不再使用它,直到您准备好在 B1 中输入更多内容。这...不是很有用...

因此,在进行任何其他电子表格工作之前,您必须始终记住在 B1 中输入“0”作为最后一步。不能随意来回操作。这是铁律。

即使 B1 中有类似 的公式,A1 中的公式仍会起作用=C1。那么您必须像上面处理 B1 一样处理 C1。

但是,A1 和每个输入公式的单元格中的公式越复杂、越复杂、越复杂、越广泛,控制意外(不良)变化就越困难,更重要的是,在电子表格中进行任何其他工作之前将所有单元格归零几乎是不可能的。不仅如此,手动计算选项的使用也会变得和实际启动之前一样困难,您仍然必须将 A1 中的所有可能输入归零。

所以...VBA。

有两件事要提一下:

  1. 假设您按照上面的简单示例,在 B1 中输入“2、4、9、24、2 和 83”。A1 将变成:2、6、15、39、41、124。到目前为止,一切都很好。假设您将 83 留在 B1 中,并在 D3 中输入一些内容,任何内容都可以,然后按 Enter。计算运行,另一个“83”添加到 A1,使其总数达到 207。不好。这就是为什么您在 B1 中以“0”结束输入运行,然后按 Enter。因此,每次 Excel 计算任何内容时(并且它总是将 A1 包括在内),它都会在总数中添加另一个“0”而保持不变。但是,如果您那里没有“0”,它会添加其他内容,总数会毫无意义地不断增加(对您来说)。可能发生的另一个可怕的事情是,如果您在 B1 中输入的内容导致 A1 出现错误,该怎么办?好吧,当然,您只需删除它,一切就都好了,是吗?不。A1 中的错误仍然存​​在。它不会因为 B1 中发生的任何事情而消失。那么……如果您清除 B1 中的错误原因,也许转到 A1 并按下F2-Edit,然后按 Enter 会将其返回到错误前的值?不。它从 A1=0 重新开始,并添加 B1 中当前的任何内容。所以你会失去到那时为止所做的一切。这可能是清除 A1 并重新开始的一种有用方法,但每次击键都是一种恐惧,因为你等待着一个会砸碎它的打字错误。

  2. 不会再出现任何问题。我尝试这个想法时遇到的问题都已经讨论过了。这个问题与您更改的 Excel 选项设置有关,特别是值Maximum Iterations。这似乎是“让我们将其设为 100,这样我们就可以对 100 个条目执行此操作,然后它会自动停止。”但这绝对不是发生的事情。发生的事情是 Excel 执行了那么多次公式。因此,在 A1 中输入“0”,在 中输入“100”,Maximum Iterations然后在 B1 中输入“28”。A1 中出现“2800”,因为 Excel 将“28”添加到 A1 (0) 中的值 100 次,达到“2800”。因此,出于您所述目的,您肯定需要将“1”用作该值。

顺便说一句,现在是 2021 年,我使用的是 Build 2109。虽然可能性不大,但循环在 2014 年的工作方式可能有所不同,而且差异很大,以至于当时无法工作。但它今天确实如此,所以如果循环的工作方式不尽快改变,人们可能会在一段时间内甚至很长一段时间内对此感兴趣。

相关内容