我正在尝试编写一个执行以下操作的公式: 将这一行之上的所有行加起来直到第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
你可以看到我感到困惑的地方。有人可以帮忙吗?
答案 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