如何动态地改变单元格的公式

时间:2015-11-21 08:09:34

标签: excel excel-vba vba

我正在尝试更改学生总成绩的公式。最初有两列,如果单击添加按钮,则还会添加新列,因此应更改公式。

enter image description here

我在Excel中的公式为=SUM(J7, H7),即只添加百分比。

我的问题是,我不知道如何重置公式并更改为

       =SUM(J7,H7,F7,D7)/[no. of items added after clicking the add button]

有什么方法可以解决这个问题吗?

注意:列是备用的而不是串联的。

2 个答案:

答案 0 :(得分:2)

如果你的公式只计算奇数列:

=SUM(IF(MOD(COLUMN(K7)-COLUMN(C7:J7),2)=1,C7:J7,0))

这样,当你添加列时它会自动调整大小(前提是你通过实际插入列来添加它们)。

K7是具有公式的单元格,C7:J7是数据行的所有单元格。

Ctrl+Shift+Enter进入。

答案 1 :(得分:0)

关键是C5中的合并单元格:J5。它有一个Range.MergeArea property,用于定义要考虑的整个区域。 Intersect method可以与大量偶数列一起使用,以查看哪些符合MergeArea。继续与相关行相交将产生正确Range.Address property范围的SUM

对于我这个SUM功能的去向,我有点不清楚。样本中的数字并不表示任何明显的位置。这使用了列K,行号作为参数输入。

Sub main()
    new_formula rw:=7
    new_formula rw:=8
End Sub

Sub new_formula(rw As Long)
    Dim rng As Range, summative As Range
    With Worksheets("Sheet5")
        Set summative = .Rows(5).Find(what:="Summative", LookIn:=xlFormulas, LookAt:=xlWhole)
        Set rng = Intersect(summative.MergeArea.EntireColumn, _
                            .Rows(rw), _
                            Union(.Columns(4), .Columns(6), .Columns(8), .Columns(10), _
                                  .Columns(12), .Columns(14), .Columns(16), .Columns(18)))
        With summative.MergeArea
            .Cells(.Count).Offset(rw - .Row, 1).Formula = _
                "=sum(" & rng.Address(0, 0) & ")"
        End With
    End With
End Sub

summative
运行main

main调用sub会在第7行然后在第8行中设置新的总和公式。添加或删除列需要重新运行sub,但似乎您的列可能是通过代码添加的,这可能这个较大程序的一部分。