Excel宏插入功能

时间:2013-06-19 17:33:02

标签: excel vba

我试图编写一个宏,将公式放在一列数字下,例如总和或平均值。我想出了这个:

Sub foo()
    ActiveSheet.Range(ActiveCell, ActiveCell.End(xlDown)).Select
    ActiveCell.End(xlDown).Offset(1) = Application.WorksheetFunction.Sum(Selection)
End Sub

此函数将找到总和并将其置于您选择顶部的数据列中的最后一个数字下。这是有效的,但它不是动态的,新值只是一个值,如果我更改列中的一个数字,保持总和的单元格不会改变。所以我试图将实际功能放在单元格中。这就是我目前所拥有的:

Sub foo()
    ActiveCell.Offset(1).Formula = "=Sum(ActiveCell:ActiveCell.End(xlUp))"
End Sub

这次我从底部开始,活动单元格目前是列中的最后一个值。没有检测到错误,但输出结果不好,"#NAME"。我试过玩引号但没有得到任何东西。例如:

Sub foo()
    ActiveCell.Offset(1).Formula = "=Sum(" & ActiveCell:ActiveCell.End(xlUp) & ")"
End Sub

有什么想法吗?

3 个答案:

答案 0 :(得分:1)

考虑:

Sub dural()
    Dim s As String
    s = Range(ActiveCell, ActiveCell.End(xlDown)).Address
    ActiveCell.End(xlDown).Offset(1, 0).Formula = "=SUM(" & s & ")"
End Sub

答案 1 :(得分:1)

如果您的数据始终从第1行开始,那么您可以使用宏:

ActiveCell.Offset(1).ForumulaR1C1 = "=SUM(INDIRECT(ADDRESS(1,COLUMN()) & "":"" & ADDRESS(ROW()-1,COLUMN())))"

答案 2 :(得分:1)

加里的学生答案非常接近但不完全存在,这就是我最终的结果:

Sub foo()
    Dim s As String
    s = Range(ActiveCell, ActiveCell.End(xlUp)).Address(0,0)
    ActiveCell.Offset(1).Formula = "=SUM(" & s & ")"
End Sub

如果您选择数据列中的最后一个单元格,它会将总和公式放在其下方,并将其动态化,以便您可以自由更改数据。

编辑:将(0,0)添加到地址,使其动态。