Excel 存储加法得到的单元格值,然后每次将其添加到新结果中

Excel 存储加法得到的单元格值,然后每次将其添加到新结果中,excel,vba,Excel,Vba,我正在Excel中创建一个模型,其中一个单元格计算两个单元格的总和,并在它所依赖的两个单元格每次更改值时不断向值添加。比如说, 如果, A+B=C 那么 实例1:->5+5=10 实例2:->4+3=17 实例3:->2+3=22 等等 我相信这可以通过VB脚本实现。在公共变量(total)中保存运行总数。当工作簿打开时,使用“工作簿\打开”事件将其初始化为两个感兴趣的单元格之和。然后使用“工作表更改”事件监视对这两个单元格的更改,如果其中任何一个单元格发生更改,则将其新值添加到现有值total

我正在Excel中创建一个模型,其中一个单元格计算两个单元格的总和,并在它所依赖的两个单元格每次更改值时不断向值添加。比如说,

如果,

A+B=C

那么

实例1:->5+5=10

实例2:->4+3=17

实例3:->2+3=22

等等


我相信这可以通过VB脚本实现。

在公共变量(
total
)中保存运行总数。当工作簿打开时,使用“工作簿\打开”事件将其初始化为两个感兴趣的单元格之和。然后使用“工作表更改”事件监视对这两个单元格的更改,如果其中任何一个单元格发生更改,则将其新值添加到现有值
total
。我已经使用单元格
C1
来显示运行总数

在标准模块中:

Option Explicit

Public total As Long
Public targetCell As Range
在此工作簿代码窗格中

Option Explicit

Private Sub Workbook_Open()

    With ThisWorkbook.Worksheets("Sheet1")

        Set targetCell = .Range("C1")

        total = Application.WorksheetFunction.Sum(.Range("A1:B1"))
        targetCell = total

    End With

End Sub
Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)

    If Not Application.Intersect(Target, Range("A1")) Is Nothing Then
        total = total + Target
        targetCell = total
    End If

    If Not Application.Intersect(Target, Range("B1")) Is Nothing Then
        total = total + Target
        targetCell = total
    End If

End Sub
在要监视的单元格所在的工作表代码窗格中

Option Explicit

Private Sub Workbook_Open()

    With ThisWorkbook.Worksheets("Sheet1")

        Set targetCell = .Range("C1")

        total = Application.WorksheetFunction.Sum(.Range("A1:B1"))
        targetCell = total

    End With

End Sub
Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)

    If Not Application.Intersect(Target, Range("A1")) Is Nothing Then
        total = total + Target
        targetCell = total
    End If

    If Not Application.Intersect(Target, Range("B1")) Is Nothing Then
        total = total + Target
        targetCell = total
    End If

End Sub

或者正确地执行@DisplayName所做的操作!我最初写这篇文章是为了调试。打印总计(而不是写入单元格)并忘记重新计算系数。

您只需在工作表代码窗格中输入以下代码:

Private Sub Worksheet_Change(ByVal Target As Range)
    If Intersect(Range("A1:A2"), Target) Is Nothing Then Exit Sub
    Range("B1") = Range("B1") + WorksheetFunction.sum(Range("A1:A2"))
End Sub
当然,你必须改变:

  • 将所有“A1:A2”引用到实际单元格的总和地址

  • 所有“B1”事件都指向您的实际单元格,该单元格包含运行总和地址


这对你来说是+1。我为debug.print编写了一篇文章,但忘记了重构,然后使用一个工作表单元格来保存结果:-)dammittanks@QHarr。结果单元格被OP明确引用了,所以我同意了,你是对的。我没有正确阅读,当我重新编写时,我完全忘记了我现在正在使用一个范围来存储值:-)嘿,谢谢,代码工作正常。现在,如果我想为求和添加一个条件,比如,如果C1=1,那么A1+A2=B1,我该怎么做?抱歉。没有注意到。我已经做到了。