【发布时间】:2014-11-21 18:39:52
【问题描述】:
我的问题是here 和here 的混合,但两者都不是。我有一个奇怪的数据集,其结构更像是层次结构,而不是纯数据点系列。像这样的:
项目预算销售 组 - 猫 0 120 FY 13 波斯语 0 0 13 财年缅因浣熊 12 0 14 财年缅因猫 50 0 12 财年虎斑猫 1 0 13 财年虎斑猫 1 0 14 财年虎斑猫 2 0 FY 14 胡同 12 0 组 - 狗 0 201 14 财年牧羊犬 20 0 FY 14 实验室 31 0 FY 13 金毛猎犬 12 0 FY 12 金毛猎犬 0 0 组 - 金鱼 0 50 FY 14 金鱼 100 0 FY 13 小丑鱼 20 0 坦克费用 150 0
我需要一个宏,它可以整齐地识别 GROUP 行,然后对它下面的组求和——而不捕获下一个组。换句话说,我需要 cat 预算线来仅汇总 cat 预算。
因此,宏需要用“GROUP*”标识行,然后向下搜索直到找到下一个“GROUP*”,然后将 Cats 和 Dogs 之间的空间相加 - 最好作为一个函数 - on “GROUP - Cats”行。
我知道这是可能的,但我担心这对于我的 VBA 基本能力来说太复杂了。
编辑:最终产品将是预算列中的一个公式,即 =SUM(B3:B9)。然后 B10(Dogs GROUP)将有一个公式,例如 =SUM(B11:B14)。金鱼:=SUM(B16:18)。
但由于我的每个数据集总是在变化(例如,本周 Cats 部分可能有 20 行,而不是前一周的 18 行),我需要一个可以找到 GROUP 行之间的空间的宏。
编辑 2: 我当前使用的 VBA 的功能与我正在寻找的类似 - 它基本上根据销售列中出现的数字对我的部分进行分组和折叠:
Dim rStart As Range, r As Range
Dim lLastRow As Long, sColumn As String
Dim rColumn As Range
'### The Kittens everywhere! thing is just to make sure the last group has an end point
Range("C1").End(xlDown).Offset(1).Value = "Kittens everywhere!"
sColumn = "C"
With ActiveSheet.Outline
.AutomaticStyles = False
.SummaryRow = xlAbove
.SummaryColumn = xlRight
lLastRow = Cells(Rows.Count, sColumn).End(xlUp).Row
With ActiveSheet
Set rColumn = .Range(.Cells(1, sColumn), Cells(lLastRow, sColumn))
With rColumn
Set r = .Cells(1, 1)
Do Until r.Row > lLastRow
If rStart Is Nothing Then
If r.Value = "0" Then
Set rStart = r
End If
Else
If r.Value <> "0" Then
Range(rStart, r.Offset(-1, 0)).Rows.Group
Set rStart = Nothing
End If
End If
Set r = r.Offset(1, 0)
Loop
End With
End With
ActiveSheet.Outline.ShowLevels RowLevels:=1
End With
Range("C:C").Find("Kittens everywhere!").ClearContents
宏还有更多功能——因为它还可以做一些事情,比如突出显示 GROUP 行——但我确定我是否可以将这个 SUM 函数的东西塞进那个部分。
【问题讨论】:
-
我不确定您到底在哪里感到困惑,但我添加了更多信息。希望这会有所帮助。 ://
-
正式注明。我已经添加了一些我已经拥有的东西,虽然我不确定它是否能适应当前的目标。