【问题标题】:Running totals of various parameters各种参数的运行总计
【发布时间】:2016-12-12 20:59:01
【问题描述】:

我想在每日报告类型格式中继续运行某些参数的总计。例如,在单元格 E9 中,我有机器的运行时间,在单元格 F9 中,我希望获得“迄今为止”的运行时间。 Gary 的学生(这里的成员)发布了以下解决方案:

Private Sub Worksheet_Change(ByVal Target As Range)
    If Intersect(Range("E9"), Target) Is Nothing Then Exit Sub
    [F9] = [F9] + [E9]
End Sub

这很好用,但我在同一张表上还有几个其他参数我想做同样的事情,例如在 E10 我想记录这台机器使用了多少气体,在 F10 我想要“迄今为止”有多少汽油。当我复制上面的代码并粘贴时,单元格值发生了变化,只有第一条指令有效。

【问题讨论】:

  • 我有点困惑,为什么你需要 VBA 来将单元格的值加倍,而不仅仅是 Excel 公式。你能链接到加里的答案吗?
  • 我不希望价值翻倍,也许我没有很好地解释它。从0开始,今天我运行一台机器10个小时。我把它输入到 E9 和 F9 自动注册 10。明天我运行它 5 小时。当表格填写时,“今天的小时数”(E9)将为 5,但“迄今为止”小时数(F9 将为 15。F9 是累积小时数。加里的公式工作正常我只需要知道如何重复它同一张纸上的其他值。
  • 我把 E 看成 F

标签: excel


【解决方案1】:

Target 是更改的单元格,Target(, 2) 是它右侧的单元格:

Private Sub Worksheet_Change(ByVal Target As Range)
    If Intersect(Range("E9:E12"), Target) Is Nothing Then Exit Sub  ' change E9:E12 to the range of cells that are changed
    Target(, 2).Value2 = Target(, 2).Value2 + Target.Value2         ' the .Value2 parts are optional
End Sub

如果一次更改多个单元格,上述操作将导致错误(例如复制粘贴或 Ctrl + Enter)。可以通过循环遍历Target 范围内的所有单元格来修复它:

Private Sub Worksheet_Change(ByVal Target As Range)
    If Intersect(Range("E9:E12"), Target) Is Nothing Then Exit Sub
    Dim cell As Range
    For Each cell In Target.Cells
        cell(, 2).Value2 = cell(, 2).Value2 + cell.Value2
    Next
End Sub

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-04-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-20
    相关资源
    最近更新 更多