如何dynamic更改单元格的公式

我正试图改变学生的总分的公式。 最初有两列,如果单击一个添加button,也会添加一个新的列,因此应更改公式。

在这里输入图像说明

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

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

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

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

注意:列是交替的而不是串联的。

关键是C5:J5中的合并单元格。 这有一个Range.MergeArea属性 ,它定义了要考虑的整个区域。 Intersect方法可以与大量的偶数列一起使用,以查看MergeArea中的哪一个适合。 继续与所涉及的行相交将产生正确的SUM范围的Range.Address属性 。

这个SUM函数在哪里有点不清楚。 样本中的数字并不表示任何明显的位置。 这使用列K,并将行号作为参数input。

 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 

总结
运行main

main调用sub将首先在第7行,然后在第8行设置一个新的总和公式。添加或删除列需要重新运行sub,但似乎可能是由代码添加了列,这可能是较大例程的一部分。

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

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

这样它会自动resize,当你添加列(提供你通过实际插入列添加)。

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

Ctrl+Shift+Enter进入。