Excel VBA:如何对上面的每一行求和?

时间:2017-08-07 15:31:47

标签: excel vba excel-vba

我正在尝试编写一个执行以下操作的公式: 将这一行之上的所有行加起来直到第3行。(第1行和第2行是标题)。这段代码必须来自E:AQ列,对我来说最棘手的是最后一行的行每月都有变化。这个月是133行,下个月可能是145.这是我的代码到目前为止:

Sub Fsum()
Dim Rng1 As Range
Set ws1 = Worksheets("Actuals")
Set Rng1 = ws1.Range("A" & ws1.Rows.Count).End(x1Up)
.Range("Rng1:AQ").Formula = "=sum(???lines above???)"
End Sub

你可以看到我感到困惑的地方。有人可以帮忙吗?

2 个答案:

答案 0 :(得分:1)

这是一种方法:

Sub test()
Dim lr As Long

Dim ws As Worksheet

Set ws = Worksheets("Actuals")

With ws
    lr = .Cells(1, 5).EntireColumn.Find(what:="*", _
            After:=.Cells(1, 5).EntireColumn.Cells(1), _
            LookAt:=xlPart, _
            LookIn:=xlFormulas, _
            SearchOrder:=xlByRows, _
            SearchDirection:=xlPrevious, _
            MatchCase:=False).Row

    Range(.Cells(lr + 1, 5), .Cells(lr + 1, 43)).Formula = "=Sum(E3:E" & lr & ")"
End With

End Sub

这将找到E列中的最后一个单元格(代码中为5),并将其设置为整个最后一行。然后它将在AQ列(代码中的43)之间构建一个总和公式。

每次运行代码时,都会找到最后一行。所以它应该是相当的dymanic。如果每列都有不同的最后一行,也可以这样做,只需要使用一个循环,但我得到的印象是你的最后一行与报告不同,而不是列到列。

希望这有帮助!

修改*

这是另一种查找最后一行的方法,以防上面的一行给你带来问题:

Sub test()
Dim lr As Long

Dim ws As Worksheet

Set ws = Worksheets("Actuals")

With ws
    lr = ws.Range("E" & .Rows.Count).End(xlUp).Row

    Range(.Cells(lr + 1, 5), .Cells(lr + 1, 43)).Formula = "=Sum(E3:E" & lr & ")"
End With

End Sub

答案 1 :(得分:0)

你需要找到#REF!首先,这里有一些供你参考的东西。

Option Explicit

Sub FindRef()

Dim Rng As Range
Dim RefRng As Range

Set Rng = Range("A1:F100") ' Use your own range
Set RefRng = Rng.Find(what:="#REF!", LookIn:=xlValues)

MsgBox "Found the #REF! " & RefRng.Column & RefRng.Row

End Sub