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

我在列B中有公式,其中列E开头的所有其他列都是小计。所以列E,G,I,K,M,O,Q,S,最后是更多。 第4行的公式是

=SUBTOTAL(109,E4,G4,I4,K4,M4,O4,Q4,S4) 

当我隐藏其中一列时,B列中的总数不会调整以减less值。

任何想法可能导致这一点。 看来这应该是直截了当的。 我以前使用小计,它在我的其他工作簿。 这是一本简单的工作书,或者看起来如此。 在这张表上有55个行,其中52个有这个公式。 他们都没有工作。 这将是简单的,我敢肯定,我会尴尬,但我已经尝试了一些不成功的东西。

我build议创build帮助者行,如E12 – S12

 =CELL("Width",E4) 

把这个代码放在每一列中,并隐藏整行

然后在总和单元格中,我们假设T4写这个代码

 =SUMIF($E$12:$S$12,">0",E4:S4) 

这个公式唯一的问题是,特定的事件“隐藏”,“取消隐藏”没有注册为事件,总和单元格不被重新计算。 这可以通过VBA和UIeditor来解决。

您需要使用UIeditor为您的工作表添加自定义function区以捕获此特定事件,例如隐藏/取消隐藏列,以便您可以在此处下载编辑器: 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 > 

所以现在当有人点击隐藏或取消隐藏列macros“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 

将此代码添加到模块而不是工作表或工作簿代码!

现在,当您隐藏或取消隐藏列时,您应该每次都重新计算表单。

干杯…

SUBTOTAL过滤隐藏的行,而不是隐藏的列或单元格。

此行为与允许使用下拉控件隐藏行的自动筛选function密切相关。

最简单的解决scheme是重构您的工作表并使用隐藏的行。

对于SUBTOTAL请阅读此

SUBTOTAL函数是为数据列或垂直范围而devise的。 它不是为数据行或水平范围devise的。 例如,当您使用function_num为101或更大(例如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不)。 只需input一个单元格,然后按下回车键(或select一个空单元格的del),或在“公式”选项卡中点击“立即计算”。

它使用隐藏行返回宽度为0(对于行和高度相同)的行为,但它在此处检查整个列(逐行隐藏一个单元格,不会更改宽度)。

此外,你不能像这样的数组中使用它,公式也看起来不太好。 但至less,你可以简单地把它复制下来。

例如,第12行在每个不想总和的列中input“H”。 单元格B4中的公式是

 =SUMIFS(E4:S4,E12:S12,"<>H")