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

How to avoid adding a new row to the first row of subtotaled ranges to protect Subtotal formula

我有一个Excelsheet,其中包括很多组和子组。每个子组都有自己的小计。只要我不知道用户需要多少行来创建子组,我就只为每个子组留了 3 行空白,并创建了一个按钮来触发自动复制和插入复制行宏。

现在我需要避免用户在任何子组的第一行和最后一行时触发按钮。 (如果您复制并插入第一行,小计公式无法识别新添加的行,因为它将超出范围并且最后一行有另一个我不希望用户在上面复制的特定公式)

我已经搜索 SO 和其他 Excel 博客很长时间了,但由于我的列表非常动态并且有许多不同的小计,其中 none 适合我的情况。

如何定义不同小计范围(可能还有标题行)的所有第一行和最后一行,以避免它们被复制然后插入到上面?

我可以想出 2 种方法来做到这一点。当 "New Row" 按钮被按下时,检查当前行是否是 headline/subheadline 任何...

  1. 通过检查其格式(例如特定的背景颜色等)。

    If Not Worksheets("Sheet1").Range("A" & iRow).Interior.Color = 15004911 Then 
        'copy that row
    End If
    
  2. 或者使用额外的辅助列,将行指定为 header 行或不可复制的行。如果您不想看到辅助列,可以将其隐藏。

    If Not Worksheets("Sheet1").Range("X" & iRow).Value = "Header" Then 
        'copy that row
    End If
    'where X is the helper column
    

    如果是标题行则拒绝复制过程。

一种不涉及编程的方法是将总和范围扩展到不会更改的行中。因此,您可以在 header 行中开始小计(假设该行的相关单元格中没有内容)。另一种方法是在每个总和范围的顶部和底部都有一个隐藏行,并将其包含在总和范围中。因此,您将对第 10 行和第 14 行求和,但第 10 行和第 14 行将被隐藏(并且为空),用户只会看到第 11、12 和 13 行。添加新行会将隐藏的行向下推并扩展小计。

另一种方法是使用间接函数。

假设你的公式是

=SUBTOTAL(9,H7:H10)

如果您对下限使用间接的,它将始终引用紧邻上方的单元格,无论中间添加了多少行。

=SUBTOTAL(9,H7:INDIRECT("H"&ROW()-1))

更进一步,使用上面的标题行作为锚点,始终将标题和小计之间的差距相加。

 =SUBTOTAL(9,INDIRECT("H"&ROW(H6)+1):INDIRECT("H"&ROW()-1))