Excel表格如何设置一列数据总和不变,改变其中单个数据,变量自动平均到其他单元格?急用。

2024-12-04 10:41:50
推荐回答(2个)
回答1:

这个问题必须用excel VBA实现,假设数据放在1-10行

思路如下:

  1. 利用Worksheet_Change事件,检测到单元格变化,并关闭事件检测

  2. 定义集合,用来存放选中单元格行号

  3. 然后使用For Each将选中单元格数值相加

  4. 然后使用H = (55 - H) / (10 - n)得到剩余单元格数值H

  5. 将H填充到其他单元格

  6. 打开单元格事件检测

注意:当需要同时改变多个单元格数值时,需使用ctrl+enter的方式进行填充,即先选中同一列中 需要修改的一个或多个单元格(可以不连续),输入数值  然后ctrl+enter填充。

代码如下:

Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False  '关闭事件检测
Dim coll As New Collection   '定义集合,用来存放选中单元格行号
H = 0
'计算选中单元格数值总和
For Each ca In Target.Cells
    H = H + ca.Value
    coll.Add (ca.Row)
Next
H = (55 - H) / (10 - n)  '计算其他单元格数值
'将H填充到其他单元格
For i = 1 To 10
test = 0  '如果i值在集合中,说明该行不需要填充计算后的数值,test为1
    For Z = 1 To coll.Count
        If i = coll.Item(Z) Then
          test = 1
        End If
        Next
    If test <> 1 Then
        Cells(i, j).Value = H
        End If
    test = 0
    Next
Application.EnableEvents = True '开启事件检测
End Sub

回答2:

假设实测值1998所在单元格为B3,改为公式: =C3+D3 往下拖拉公式 E3中输入公式: =MAX(B3:B16)-MIN(B3:B16) B16根据你的实际数据行修改。