如果任何相关单元格的值发生变化,则计算相关单元格

如果任何相关单元格的值发生变化,则计算相关单元格

我有一列,其中包含 5 个通过公式关联的单元格:

A1=A2+A3+A4+A5 
A2=A1-A3-A4-A5 
A3=a1-a2-a4-a5
a4=a1-a2-a3-a5
a5=a1-a2-a3-a4
  1. 我需要一个宏,如果用户在此范围内的任何一个单元格中输入值,它将自动计算所有单元格 A1:A5。如果范围 A1:A5 中的任何单元格 > 0,则根据公式计算每个单元格 a1:A5。我使用此代码来计算 A1

    如果 cell.Value > 0 则 Application.EnableEvents = False range.Cells(1, 1).Formula = "=A2+A3+A4+A5" Application.EnableEvents = True

但我不知道如何在 a2:a5 中自动计算

  1. 我已默认将 A1:A5 的值设置为 0(我需要使用将值设置为 0 的命令按钮)。我使用以下宏

    对于范围内的每个单元格,如果单元格值 = 0,则 MsgBox ("在范围 A1:A5 中的任何单元格中输入除 0 以外的值")

如果 A1:A5 中的所有值都是 0,那么我需要在弹出的消息框上单击“确定”5 次!如何更改宏,如果范围 a1:A5 中的所有单元格都是 0,则只弹出一个消息框(我需要单击“确定”才能将其删除)?

谢谢!

答案1

我们可以使用单个单元格区域数组而不是公式:

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim A(1 To 5) As Range

    Set A(1) = Range("A1")
    Set A(2) = Range("A2")
    Set A(3) = Range("A3")
    Set A(4) = Range("A4")
    Set A(5) = Range("A5")

    If Intersect(Range("A1:A5"), Target) Is Nothing Then Exit Sub

    Application.EnableEvents = False
        A(1) = A(2) + A(3) + A(4) + A(5)
        A(2) = A(1) - A(3) - A(4) - A(5)
        A(3) = A(1) - A(2) - A(4) - A(5)
        A(4) = A(1) - A(2) - A(3) - A(5)
        A(5) = A(1) - A(2) - A(3) - A(4)
    Application.EnableEvents = True
End Sub

(避免公式可避免递归混淆)

编辑#1:

该程序首先重新计算A1根据价值观A2通过A5
然后程序重新计算A2基于新的价值A1和旧价值观A3通过A5
然后程序重新计算A3基于新的中的值A1A2和旧价值观A4A5
然后程序重新计算A4基于新的中的值A1通过A3和旧值A5
然后程序重新计算A5基于新的中的值A1通过A4

这正是您在问题中指定的顺序!

相关内容