隐藏列时公式小计 109 在 Excel 中不起作用
Posted
技术标签:
【中文标题】隐藏列时公式小计 109 在 Excel 中不起作用【英文标题】:formula Subtotal 109 when hiding columns does not work in excel 【发布时间】:2015-12-20 22:33:48 【问题描述】:我在 B 列中有公式,从 E 列开始每隔一列小计。所以列 E、G、I、K、M、O、Q、S 以及最终更多。第4行的公式是
=SUBTOTAL(109,E4,G4,I4,K4,M4,O4,Q4,S4)
当我隐藏其中一列时,B 列中的总数不会调整以减少值。
任何可能导致此问题的想法。看来这应该是直截了当的。我以前使用过小计,它适用于我的其他工作簿。这是一本简单的工作簿,或者看起来如此。工作表上有 55 行,其中 52 行具有此公式。它们都不起作用。这很简单,我敢肯定,我会很尴尬,但我尝试了很多事情都没有成功。
【问题讨论】:
从帮助 ...隐藏列不会影响小计。但是,在垂直范围的小计中隐藏一行确实会影响小计 @chrisneilsen 谢谢克里斯,我忽略了显而易见的问题,但 Dirk 下面的回答确实让我到达了我想去的地方,所以这是一场双赢。 【参考方案1】:对于SUBTOTAL
,请阅读This
SUBTOTAL 函数专为数据列或垂直范围而设计。它不适用于数据行或水平范围。例如,当您使用 101 或更大的 function_num 对水平范围进行小计时,例如 SUBTOTAL(109,B2:G2),隐藏列不会影响小计。但是,在垂直范围的小计中隐藏一行确实会影响小计。
执行此操作的唯一非 VBA 方法(我知道)是像这样使用 CELL
:
=SUM(E4*(CELL("width",E4)>0),G4*(CELL("width",G4)>0),I4*(CELL("width",I4)>0),K4*(CELL("width",K4)>0),M4*(CELL("width",M4)>0),O4*(CELL("width",O4)>0),Q4*(CELL("width",P4)>0),S4*(CELL("width",S4)>0))
缺点是,您需要执行任何实际操作来重新计算(而小计通过隐藏一行进行重新计算,CELL
不会)。只需输入一个单元格并按回车键(或在选择空单元格时直接删除)或在“公式”选项卡中点击“立即计算”。
它使用隐藏行返回宽度为 0(行和高度相同)的行为,但它在此处检查整个列(逐行隐藏单元格,不会更改宽度)。
此外,您不能在这样的数组中使用它,而且公式看起来也不是很好。但至少,您可以简单地将其复制下来。
【讨论】:
这是完美的,效果很好。它确实需要一些公式工作,但将是完成电子表格返工的一个很好的选择。非常感谢。【参考方案2】:我建议创建辅助行,例如 E12 - S12
=CELL("Width",E4)
将此代码放在每一列中并隐藏整行
然后在 sum 单元格中,假设 T4 编写此代码
=SUMIF($E$12:$S$12,">0",E4:S4)
此公式的唯一问题是,特定事件“隐藏”、“取消隐藏”未注册为事件,并且未重新计算总和单元格。这可以通过 VBA 和 UIeditor 修复。
您将需要 UIeditor 为您的工作表添加自定义功能区以捕获此特定事件,例如隐藏/取消隐藏列,您需要在此处下载编辑器:http://www.rondebruin.nl/win/s2/win001.htm
然后为您的工作表添加此代码:
<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui" >
<commands >
<command
idMso="ColumnsHide"
onAction="Column_Hide_Macro"/>
<command
idMso="ColumnsUnhide"
onAction="Column_UnHide_Macro"/>
</commands >
所以现在当有人点击隐藏或取消隐藏列宏时“Column_Hide_Macro”或“Column_UnHide_Macro”被激活
然后将此添加到您的电子表格中
Sub column_hide_Macro(control As IRibbonControl, ByRef cancelDefault)
cancelDefault = False
alertTime = Now + TimeSerial(0, 0, 0.1)
Application.OnTime alertTime, "reCalc"
End Sub
Sub column_unhide_Macro(control As IRibbonControl, ByRef cancelDefault)
cancelDefault = False
alertTime = Now + TimeSerial(0, 0, 0.1)
Application.OnTime alertTime, "reCalc"
End Sub
Sub reCalc()
Application.CalculateFullRebuild
End Sub
将此代码添加到模块中,而不是工作表或工作簿代码!
现在,当您隐藏或取消隐藏列时,您应该每次都重新计算工作表。
干杯...
【讨论】:
【参考方案3】:例如,在第 12 行中,将“H”放在您不想求和的每一列中。 B4单元格中的公式是
=SUMIFS(E4:S4,E12:S12,"<>H")
【讨论】:
【参考方案4】:SUBTOTAL
过滤隐藏的行,而不是隐藏的列或单元格。
此行为与允许使用下拉控件隐藏行的自动过滤功能密切相关。
最简单的解决方案是重组工作表并使用隐藏行。
【讨论】:
@Amit 本质上是的,它是最简单的。我现在看到情况确实如此。不幸的是,在此应用程序中,A 列是一个相当长的描述字段,即使使用换行,也不能将其放置在多个列标题中的干净外观中。感谢您抽出宝贵时间回复。以上是关于隐藏列时公式小计 109 在 Excel 中不起作用的主要内容,如果未能解决你的问题,请参考以下文章