VBA中的SUM函数 - 不是硬编码行和列

时间:2013-03-02 06:24:53

标签: excel

如何在vba中的sum函数中使用lastRow变量?在我计算每行中的单词数量直到最后一行之后,我想将每行中的各个总计加到一个总的总列中,但我不想将范围硬编码到vba中的sum函数中?还有另外一种方法吗?

示例:

Column:   A   B   C   D   E   F  
NRow 1:   2   3   4   5   6   7  
NRow 2:   3   4   5   6   7   8  
Total 3:  5   7   9   11  13  15

想要避免SUM(R[-2]C:R[-1]C)?我希望SUM(R[lastRow]C:R[-1]C)或其他能以相同方式发挥作用的东西。

谢谢!

3 个答案:

答案 0 :(得分:1)

像这样的东西

  1. 将活动工作表上的usedrange从A1设置为列F中最后一个使用的单元格
  2. 转到此范围Cells(rng1.Cells(1).Row + rng1.Rows.Count, 1)以下的第一个单元格,调整为感兴趣范围内的列数(本例中为6)
  3. 进入论坛"=SUM(R[-" & rng1.Rows.Count & "]C:R[-1]C)" rng1.Rows.Count动态第一行
  4. <强>码

    Sub GetRange()
    Dim rng1 As Range
    Set rng1 = Range([a1], Cells(Rows.Count, "F").End(xlUp))
    Cells(rng1.Cells(1).Row + rng1.Rows.Count, 1).Resize(1, rng1.Columns.Count).Value = "=SUM(R[-" & rng1.Rows.Count & "]C:R[-1]C)"
    End Sub
    

答案 1 :(得分:0)

如果您可以保证column A中始终有数据,那么要查找最后一行,您可以执行以下操作:

Option Explicit

Sub addSums()

Dim lstRow As Integer
With Excel.ThisWorkbook.Sheets("Sheet1")

    lstRow = .Cells(.Rows.Count, 1).End(Excel.xlUp).Row

    Dim j As Integer
    For j = 1 To .Cells(1, .Columns.Count).End(Excel.xlToLeft).Column
        .Cells(lstRow + 1, j) = "=SUM(R[-" & lstRow - 1 & "]C:R[-1]C)"
        .Cells(lstRow + 1, j).Font.Bold = True
    Next j

End With

End Sub

似乎可以正常使用以下内容:

enter image description here

答案 2 :(得分:-1)

如果源数据来自外部源,则适当的机制是:

  • 围绕输入表创建命名数据范围;
  • 将inut表设置为在刷新时自动调整大小;和
  • 然后在您的函数中使用命名数据范围。