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

Posted

技术标签:

【中文标题】如何避免在小计范围的第一行添加新行以保护小计公式【英文标题】:How to avoid adding a new row to the first row of subtotaled ranges to protect Subtotal formula 【发布时间】:2017-03-22 06:44:11 【问题描述】:

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

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

我一直在搜索 SO 和其他 Excel 博客很长时间,但由于我的列表非常动态并且有许多不同的小计,它们都不适合我的情况。

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

【问题讨论】:

【参考方案1】:

我可以想象两种方法来做到这一点。当按下“新行”按钮时,检查当前行是否是标题/副标题……

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

    If Not Worksheets("Sheet1").Range("A" & iRow).Interior.Color = 15004911 Then 
        'copy that row
    End If
    

    或通过使用额外的帮助列将行指定为标题行或不可复制的行。如果您不希望看到帮助列,可以将其隐藏。

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

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

【讨论】:

第二个选项似乎是可能的选项,但我有很多列和宏。其中一些只有在所有列都未隐藏时才有效,因此(我不确定 %100 但是)我可能通过其中一个宏在工作表中的某处未隐藏隐藏的列。所以我不希望它随时对用户隐藏。我认为这对工具的专业性来说有点冒险。对于第一个选项,它将再次相同,因为我已经有不同的颜色来显示它。 @Mertinc 好的,但我们同意您需要检测当前行是哪种类型的行来解决该问题。除了区分 A) 允许复制的行和 B) 不允许 允许复制的行之外,我肯定没有其他方法。要确定您拥有哪种类型的行,您需要通过任何标记(格式、帮助列、内容...)来识别它。因此,您的练习是为该任务找到合适的标记。你不能说我想飞到月球,但我不喜欢用火箭,因为只有火箭才能飞到月球。您将不得不选择较小的邪恶。 嗨 Peh,今天很长一段时间后,我不得不在这个问题上做一些事情,并改变我不希望它们被复制的单元格的背景颜色。(但我选择列绝版布局,因此这种不同的颜色不会显示在任何地方。)您能否增加您对该建议的回答,以便我可以选择此作为答案。 (例如,我们如何避免复制某些特定的行?在这种情况下,基于它们的背景颜色。)所以你能在你的答案中包括如何写if Range("A" & row ).interior.color=15004911 Then avoid copying this entire row @Mertinc 如果这就是你的意思,我添加了一些代码示例。 确实不错,但是对avoid copying this entire row有什么建议吗?【参考方案2】:

一种不涉及编程的方法是将总和范围扩展到不会改变的行。因此,您可以在标题行中开始小计(假设该行的相关单元格中没有内容)。另一种方法是在每个总和范围的顶部和底部都有一个隐藏行,并且包含在总和范围内。因此,您将对第 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))

【讨论】:

标题行已经有自己的小计公式,所以第一个选项是不可能的。对于第二个,我不想隐藏任何行,因为行号对用户很重要。我不想让他们感到困惑。 间接使用怎么样? 那个公式对于小计公式非常聪明。 (除了我无法通过单击 F2 轻松查看范围,因为在小计公式中使用了间接)但我仍然可以应用它(因为它被锁定以供用户查看和编辑公式)但是如何避免标题和下面的行要复制和插入? 当您单击公式时,它将突出显示区域正上方的单元格,因此您可以看到它将添加公式上方的所有单元格直到,但不包括突出显示的单元格.关于添加行,如果您向次要项目 0.0% 行添加了一些背景颜色(这是我假设您的公式所在的位置),那么您可以检查单元格背景颜色,然后仅在单元格有时复制该行没有背景。 十年或更久以前,我创建了一个工作簿,其中包含一些受保护的部分等并发送给其他用户。从内存中,一个宏将用户从他们不允许进入的任何单元格中逐出(我认为它将活动单元格移动到他们被允许进入的单元格)并且为了确保宏运行,工作表全部自动隐藏,直到打开通过宏,因此打开禁用宏的工作簿并没有获得访问权限。

以上是关于如何避免在小计范围的第一行添加新行以保护小计公式的主要内容,如果未能解决你的问题,请参考以下文章

在 Excel 中将 Countif 添加到数组公式(小计)

将固定范围的小计复制到其他表格单元格

vba中的相对参考小计公式

在每个小计 excel vba 之后添加行 [关闭]

隐藏列时公式小计 109 在 Excel 中不起作用

如何在 power bi 中向现有数据添加小计行