如何在特定范围的每列下面的单元格中执行函数?

时间:2015-01-28 00:12:36

标签: excel vba loops excel-vba

所以,这是我到目前为止写的:

Sub somme()
    Dim a, i As Integer, Data, Rng As Range
    a = InputBox("How many cells for the square?")
    Set Data = Range(ActiveCell.Offset(0, 0), ActiveCell.Offset(a - 1, a - 1))

    For Each cell In Data
        cell.Value = Int((100 + 100 + 1) * Rnd - 100)
    Next
    For i = 1 To a
        Set Range(ActiveCell + i, ActiveCell.End(xlDown)) _
            .Offset(1, 0).Value = "=SUM(R[-a]C:R[-1]C)"
    Next
End Sub

我想在下面的单元格中对每个列进行求和,适用于任何大小的范围。

1 个答案:

答案 0 :(得分:0)

使用相同的方法,您可以使用内置的WorksheetFunction.Sum添加总和,并在每列的末尾查找:

Set sums = Range(ActiveCell.Offset(a, 0), ActiveCell.Offset(a, a - 1))
For Each cell In sums
    cell.Value = WorksheetFunction.Sum(Range(Split(cell.Address, "$")(1) & cell.Row - a & ":" & Split(cell.Address, "$")(1) & cell.Row))
Next

P.S。我有机会在您提出的问题代码中强调一些事项:

Set Range(ActiveCell + i, ActiveCell.End(xlDown)).Offset(1, 0).Value = "=SUM(R[-a]C:R[-1]C)"

1)不要使用关键字Set,一个用于将变量设置为一个对象(不是一个字符串进入一个单元格,因为你不需要任何东西);

2)ActiveCell,没有任何其他规范,默认情况下将返回属性Value。因此,如果您刚刚填写范围A1:A4,那么代码行:

Range(ActiveCell + i, ActiveCell.End(xlDown))

不会是预期的

Range("A5")

而是随机数字和语法错误的混合(只是为了给你一个想法,它会像Range(76,5))。

编辑 - 如果要插入Excel函数而不是硬编码结果

Set sums = Range(ActiveCell.Offset(a, 0), ActiveCell.Offset(a, a - 1))
For Each cell In sums
    cell.Value = "=SUM(" & Split(cell.Address, "$")(1) & cell.Row - a & ":" & Split(cell.Address, "$")(1) & cell.Row - 1 & ")"
Next