公式小计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")