VBA添加具有可变范围的小计

Posted

技术标签:

【中文标题】VBA添加具有可变范围的小计【英文标题】:VBA to add subtotal with variable range 【发布时间】:2018-07-14 15:00:38 【问题描述】:

我正在尝试找出 excel VBA 代码以将小计 (=SUBTOTAL(9,__:_) 公式添加到工作表中的多个总计行。问题是小计的范围可以是任何高度。每下图,希望 VBA 代码能够识别“总计”何时出现在 B 列中,然后继续在该行中为 E 到 J 列添加小计公式。小计公式需要拉以上余额直到有一个空白单元格以计算特定客户的金额(范围的长度由下图中的箭头表示)。范围可以是任意数量的行,因此必须完全变量。对此的任何帮助将不胜感激!

Updated Sample

【问题讨论】:

为什么小计而不是总和?您是否打算在总数中隐藏您不想要的行? 我想使用小计 bc 我还想在列表的最底部添加一行,用于计算所有客户的总数。小计将允许只取整个范围并计算整个当前余额。这有意义吗? 我想我应该把它包括在我的问题中 :) 非常感谢你的帮助!! 基于您的数据的数据透视表怎么样? 【参考方案1】:

这可以通过跨动态范围的简单小计来完成。可以循环定位 B 列中的 Total。

Option Explicit

Sub totalAllClients()
    Dim rng As Range, rngsb As Range, addr As String

    With Worksheets("sheet11")
        With Intersect(.Columns(2), .UsedRange)
            Set rng = .Find(What:="total", After:=.Cells(1), MatchCase:=False, _
                            LookAt:=xlWhole, SearchDirection:=xlPrevious)
            If Not rng Is Nothing Then
                addr = rng.Address(0, 0)
                Do
                    rng.Offset(0, 1).FormulaR1C1 = _
                        "=index(c2, match(""zzz"", r1c2:r[-1]c2))"
                    rng.Offset(0, 3).Resize(, 6).FormulaR1C1 = _
                        "=subtotal(109, r[-1]c:index(c, match(""zzz"", r1c2:r[-1]c2)))"
                    Set rng = .FindNext(After:=rng)
                Loop Until rng.Address(0, 0) = addr

                rng.Offset(2, 3).Resize(1, 6).FormulaR1C1 = _
                    "=aggregate(9, 3, r2c:r" & rng.Row & "c)"
            End If
        End With
    End With

End Sub

【讨论】:

我的想法是使用小计 bc 我还想在列表的最底部添加一行,用于计算所有客户的总数。小计将允许只取整个范围并计算整个当前余额。这有意义吗? 我想我应该把它包括在我的问题中 :) 非常感谢你的帮助!! 在底部使用=sum(e1:e29)-sumifs(e1:e29, $b1:$b29, "total") 好的,每次我需要运行计算时,数据的大小(行数)都会改变。那么您提到的添加是否会在最后一个客户总数之后插入一行?我希望将此总体总计添加到宏中,因此我不必每次都添加新行。再次感谢 顺便说一句,您提供的添加到 sum 函数中的代码效果很好!您认为最好先进行这些小计,然后添加代码以在最底部(最后一行 +2)添加小计行来小计整列?

以上是关于VBA添加具有可变范围的小计的主要内容,如果未能解决你的问题,请参考以下文章

从小计组创建命名范围

如何避免在小计范围的第一行添加新行以保护小计公式

VBA-Excel ComboBox 具有条目列表,首先显示最后输入的值

如何使用 vba 从具有多个数据字段的 excel 数据透视表中删除小计

如何获得具有可变步数的可枚举范围

当前范围错误中的重复声明;两个循环具有相同的变量,可变范围