以下是对上一个问题的回答。
您可以使用 VBA 编程实现您想要做的事情。在您的工作表中,默认名称为 say,Sheet1
您有一个 say 单元格A1
,该单元格应每月被覆盖,并且B1
您希望在该单元格中看到累计总数。
右键单击Sheet1
并单击查看代码。或者,按住ALT + F11
并双击 VBA 项目下左侧窗格中的 Sheet1。
将打开一个空白的 VBA 代码窗口。在其中输入以下代码。
Private Sub Worksheet_Change(ByVal Target As Range)
Dim KeyCells As Range
Set KeyCells = Range("A1")
If Application.Intersect(KeyCells, Range(Target.Address)) Is Nothing Then
Else
If IsNumeric(Range("A1").Value) Then
Range("B1").Value = Range("B1").Value + Range("A1").Value
Else
End If
End If
End Sub
保存并退出。
将工作簿保存为 filename.xlsm。即启用宏的工作簿。
现在,当您覆盖单元格中的值时,A1
它将被添加到B1
。确保您A1
只在需要时更新,否则它将继续将其添加到B1
。
此代码中没有实施这样的验证,因此A1
每月只能更新一次!只是进行基本检查,该检查A1
应为数字,以防止运行时错误。
我发现这对我的一个项目非常有用。
问题是,我该如何改变这种情况,使之能够处理多个独立的项目。
答案1
根据您具体需要几个项目,可以用不同的方式完成。如果您只想向下扩展功能,则只需在代码中引入一点灵活性,如下所示:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim KeyCells As Range
Set KeyCells = Range("A1:A10")
If Not Application.Intersect(KeyCells, Target) Is Nothing And IsNumeric(Target.Value) Then
Target.Offset(0, 1).Value = Target.Offset(0, 1).Value + Target.Value
End If
End Sub
其中,KeyCells
将控制列表的长度,并且1
代表Target.Offset(0, 1)
输出 – 在本例中为“B”列。