需要带有临时变量的公式

时间:2019-01-05 18:24:51

标签: excel vba excel-vba excel-formula

我们脑子里都添加了信息,然后将结果写下来, 例如一个简单的理货,昨天我卖了10个苹果,前一天我卖了5个,总共15个,今天我卖了5个,总共20个,这是一个简单的方程式,我们每天都在脑海做着,甚至都没有考虑,我认为该公式基本上是:A + B = Bnew

其中A是每日销售额。 B将是总销售额 Bnew是新总数。

我如何在excel中做到这一点而又不占用运行总行数或花哨的视觉基本脚本的页面。

我最多要使用3个单元格 单元格1 =更改变量,(每日销售) 单元2 =将要添加A1的所有销售的运行总计。 并且如果需要,Cell-3可以像我们的内存一样保存Cell-2的内容,同时我们可以更新总数。

这是一个非常简单的数学问题,但是我一直在努力寻求卓越的表现,我进行了搜索和搜索,但我什至不知道要问的正确问题。

感谢您的帮助

3 个答案:

答案 0 :(得分:1)

给出限制:

  • 没有帮助者列(“不占用运行总行数的页面”
  • 没有VBA(“没有精美的视觉基本脚本”
  • “我最多要使用3个单元格”

我认为剩余的选择是迭代计算?我不知道,也许其他人可以想到更好的解决方案。但是关于迭代计算,这是我设置工作表的方式:

Setup

这将使用两个单元格(忽略第1行中的标签):

  • 在单元格select id, z from t where removed is null; 中,我有公式A2
  • 单元格=A2+B2为空(准备输入一些数字)

然后我去B2

关于循环引用的任何通知现在都应该消失,并且如果我在单元格File > Options > Formulas > Enable iterative calculation > Change "Maximum Iterations" to 1 > OK中输入数字,则单元格B2会按照您在帖子中所描述的方式进行更新。希望您也可以在计算机上复制它。

要注意的是您将在应用程序范围内更改迭代计算设置,因此我认为它会影响所有其他工作簿。注意事项。

答案 1 :(得分:0)

如果您的设置在Sheet1中如下所示:

enter image description here

然后,Sheet1的worksheetmodule中的一个小的vba宏应该可以解决问题:

Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Address = "$A$2" Then    
        Range("B2").Value = Range("B2").Value + Range("A2").Value    
    End If    
End Sub

此子例程将在每次工作表更改后运行。它将检查更改是否在单元格A2中。如果是这种情况,则将A2中的值添加到B2中的值。

enter image description here

答案 2 :(得分:0)

假设您可以接受少量的VBA代码,则可以尝试将下面的代码放入要在其中输入数据的工作表的工作表模块中:

Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
    ' Assumes "daily sales" are entered into cell B2 and that "running total" is in cell A2
    If Not (Intersect(Target, Me.Range("B2")) Is Nothing) Then
        Me.Range("A2").Value2 = Application.Sum(Me.Range("A2").Value2, Target.Value2)
    End If
End Sub

(同时按下Alt + F11会打开编辑器,然后您可以在左侧找到工作表模块)。

如果您随后在单元格B2中输入数字,则单元格A2应该以累积方式更新。如果您在B2A2以外的单元格中输入数字,则应该发现单元格A2不会更新(与迭代计算方法不同)。如果Application.Sum+包含非数字数据,我们将使用Type Mismatch而不是A2运算符来避免B2错误。

尝试一下,看看它是否能满足您的需求。


编辑:

如果您有多行,则可以尝试以下操作。

Private Sub Worksheet_Change(ByVal Target As Range)
    ' Assumes "daily sales" are entered into column B and that "running total" is in column A
    If Target.Column = 2 Then
        Me.Cells(Target.Row, "A").Value2 = Application.Sum(Me.Cells(Target.Row, "A"), Target)
    End If
End Sub