我有一列,其中包含 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
我需要一个宏,如果用户在此范围内的任何一个单元格中输入值,它将自动计算所有单元格 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 中自动计算
我已默认将 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基于新的中的值A1和A2和旧价值观A4和A5。
然后程序重新计算A4基于新的中的值A1通过A3和旧值A5。
然后程序重新计算A5基于新的中的值A1通过A4。
这正是您在问题中指定的顺序!