在excel中为单元赋值,使得它们的和是一个常数

有没有办法在excel中分配5个单元格中的值,使得5个单元格的总和恰好为100?

我开始分配每个单元格的值20 。 但是,如果我将其中的一个赋值为30,我希望单元格更改值

如果您的5个单元格在第1到第5行,我会使用下面的Worksheet_Change事件来跟踪值将始终添加到100。

例:

初始数据集:

在这里输入图像说明

解决scheme将A3字段中的值更改为78:

在这里输入图像说明

请注意,代码将粘贴在您正在跟踪数字的工作表的对象上。

 Sub Worksheet_Change(ByVal Target As Range) Dim averageRound As Variant, averageRound1 As Variant If Target.Cells.Count > 1 Or IsEmpty(Target) Then Exit Sub Application.EnableEvents = False averageRound = Application.WorksheetFunction.Round((100 - Application.Sum(Range(Cells(1, Target.Column), Cells(5, Target.Column)))) / 4, 0) If ((100 - Application.Sum(Range(Cells(1, Target.Column), Cells(5, Target.Column)))) + averageRound * 4) <> 100 Then averageRound1 = (100 - Application.Sum(Range(Cells(1, Target.Column), Cells(5, Target.Column)))) - averageRound * 3 Else averageRound1 = averageRound End If If IsNumeric(Target) Then If Application.Sum(Range(Cells(1, Target.Column), Cells(5, Target.Column))) <> 100 Then If Target.Row = 1 Then Cells(Target.Row + 1, Target.Column).Value = Cells(Target.Row + 1, Target.Column).Value + averageRound Cells(Target.Row + 2, Target.Column).Value = Cells(Target.Row + 2, Target.Column).Value + averageRound Cells(Target.Row + 3, Target.Column).Value = Cells(Target.Row + 3, Target.Column).Value + averageRound Cells(Target.Row + 4, Target.Column).Value = Cells(Target.Row + 4, Target.Column).Value + averageRound1 ElseIf Target.Row = 2 Then Cells(Target.Row - 1, Target.Column).Value = Cells(Target.Row - 1, Target.Column).Value + averageRound Cells(Target.Row + 1, Target.Column).Value = Cells(Target.Row + 1, Target.Column).Value + averageRound Cells(Target.Row + 2, Target.Column).Value = Cells(Target.Row + 2, Target.Column).Value + averageRound1 Cells(Target.Row + 3, Target.Column).Value = Cells(Target.Row + 3, Target.Column).Value + averageRound ElseIf Target.Row = 3 Then Cells(Target.Row - 2, Target.Column).Value = Cells(Target.Row - 2, Target.Column).Value + averageRound Cells(Target.Row - 1, Target.Column).Value = Cells(Target.Row - 1, Target.Column).Value + averageRound1 Cells(Target.Row + 1, Target.Column).Value = Cells(Target.Row + 1, Target.Column).Value + averageRound Cells(Target.Row + 2, Target.Column).Value = Cells(Target.Row + 2, Target.Column).Value + averageRound ElseIf Target.Row = 4 Then Cells(Target.Row - 3, Target.Column).Value = Cells(Target.Row - 3, Target.Column).Value + averageRound Cells(Target.Row - 2, Target.Column).Value = Cells(Target.Row - 2, Target.Column).Value + averageRound Cells(Target.Row - 1, Target.Column).Value = Cells(Target.Row - 1, Target.Column).Value + averageRound1 Cells(Target.Row + 1, Target.Column).Value = Cells(Target.Row + 1, Target.Column).Value + averageRound ElseIf Target.Row = 5 Then Cells(Target.Row - 1, Target.Column).Value = Cells(Target.Row - 1, Target.Column).Value + averageRound Cells(Target.Row - 2, Target.Column).Value = Cells(Target.Row - 2, Target.Column).Value + averageRound Cells(Target.Row - 3, Target.Column).Value = Cells(Target.Row - 3, Target.Column).Value + averageRound Cells(Target.Row - 4, Target.Column).Value = Cells(Target.Row - 4, Target.Column).Value + averageRound1 End If End If End If Application.EnableEvents = True End Sub 

如果您想要更改5个单元格中的任何一个,并重新计算其他单元格,则需要一个复杂的论坛,具体取决于单元格的位置和周围的单元格。

您将确定其他4个单元格与100个单元格之间的差异,然后将该差异分布在其他4个单元格上。 当然,当你手动改变一个单元格时,你会把它删除,所以它只能工作一次。

为了使其成为永久的,你需要一个VBA脚本来监视一系列的单元格并为你做出调整。

如果你只有一个单元格dynamic改变以保持平衡,那么它就更简单了。 您可以让该单元格为100减去其他4个单元格的总和。