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

Posted

技术标签:

【中文标题】VBA Excel小计动态范围不起作用【英文标题】:VBA Excel Subtotal Dynamic Ranges Not Working 【发布时间】:2019-02-04 16:56:50 【问题描述】:

我有这段从其他帖子借来并编辑(或至少尝试过)的代码,我试图用它来对一些动态范围进行小计。我使用带有 0、1 和 2 的键列。我希望代码从每个 1 添加所有 coorosponding 列,直到它达到 2,然后将小计放在带有 2 的列中。目前,我的代码一直向后运行,所以它输入了错误的小计。下面是我的代码的 sn-p。

'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 等等。这有意义吗?

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

【问题讨论】:

如果你的块总是被一个或多个空白行分隔,有一种更快的方法,使用区域? 区域。我在搜索时确实看到了一些东西,但不确定,因为我以前从未使用过它们,甚至从未听说过它们。谢谢!我会调查的。 我提出了这样的答案。 【参考方案1】:

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

=IF(P3=2,SUMIF($P$1:P2,1,$K$1:K2)-SUMIF($P$1:P2,2,$K$1: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

【讨论】:

由于某种原因,您的 VBA 代码只能在 K 列的标题中找到文本(抱歉在我的原始帖子中没有提及)并在其下放置一个 0.00。然后继续执行我的其余代码。我尝试将 Range 更改为从 K13 开始,一直到 Last Row,但它什么也找不到。 我根据你上面的图片,看看我的,所以你需要弄清楚有什么不同。 我明白了!不得不将类型更改为公式。完全错过了那个。非常感谢!! 啊,是的,我应该提到这一点。很高兴你成功了。

以上是关于VBA Excel小计动态范围不起作用的主要内容,如果未能解决你的问题,请参考以下文章

Excel VBA 到 PPT 在 Office 365 64 位中不起作用

vba粘贴不起作用

Excel vba拆分功能不起作用

Excel VBA UDF 操作字符串不起作用

VBA Dir 函数在 Excel 2010 上不起作用

AppleScriptTask 命令在 Excel 2016 for Mac VBA 中不起作用