VBA Excel 小计动态范围不起作用

VBA Excel Subtotal Dynamic Ranges Not Working

我有这段代码是从其他 post 那里借来的,并经过编辑(或至少尝试过),我试图用它来对一些动态范围进行小计。我使用包含 0、1 和 2 的键列。我希望代码添加每个 1 的所有对应列,直到它达到 2,然后将小计放在带有 2 的列中。目前,我的代码保持 运行 向后,所以它把错误的小计放在. 下面是我的代码片段。

'count all 1's in each section till next 2 for subtotaling each section
With Range("P13:P" & lRow1)
Set rFind = .Find(What:=2, LookIn:=xlFormulas, SearchOrder:=xlByRows, _
                  Lookat:=xlWhole, SearchDirection:=xlNext, searchFormat:=False)
If Not rFind Is Nothing Then
    s = rFind.Address
    Do
        Set r1 = rFind
        Set rFind = .FindNext(rFind)
        If rFind.Address = s Then
            Set rFind = .Cells(.Cells.Count)
            r1.Offset(, -5).Value = Application.Sum(Range(r1.Offset(-1, -5), r1.Offset(, -5)))
            Exit Sub
        End If
        r1.Offset(, -5).Value = Application.Sum(Range(r1.Offset(-1, -5), rFind.Offset(, -5)))
    Loop While rFind.Address <> s
End If
End With

即使现在我已经输入了这个问题,我仍然在想我应该采取不同的方法。我的代码在每个空白行放置一个 0,我目前将它设置为在第一个 1 上方的行放置一个 0。这样,我也许可以找到第一个 0,然后添加所有 1,直到我达到 2,然后找到下一个 0 等等。这有意义吗?

下面是宏当前生成的图片。

您实际上可以使用公式来做到这一点

=IF(P3=2,SUMIF($P:P2,1,$K:K2)-SUMIF($P:P2,2,$K:K2),"")

在 K 中的每个单元格中,P 列中有一个 2。可以使用 VBA 插入它。


这是一个直接的 VBA 解决方案:

Sub x()

Dim r As Range

For Each r In Range("K:K").SpecialCells(xlCellTypeConstants).Areas
    r(r.Count + 1).Value = Application.Sum(r)
Next r

End Sub