【问题标题】:Ignoring a hidden column in an excel sum formula忽略excel求和公式中的隐藏列
【发布时间】:2015-02-18 17:23:09
【问题描述】:

我基本上想忽略 excel 中的随机列。有没有办法检测一列是否隐藏,然后不在公式中包含该列?

例如 F1 = B1 + C1 + E1(忽略 D 列) 但第二天 F 列可能需要改为 = B + D + E。

有没有办法简单地实现这一点?我见过一些忽略特定列的公式,但没有任何动态可以检测隐藏数据然后不包含它。谢谢!!

例子

所以基本上,如果我隐藏 Greg 的列,我希望所有行的总数能够反映这种变化。因此,当他的列被隐藏时,E2 将等于 8 而不是 12。

此处的第二张图片显示公式未按预期工作

【问题讨论】:

  • 如果您不受数据结构的束缚,SUBTOTAL 函数可以排除隐藏的行(但不幸的是,它不适用于列)
  • 您好,我想让您知道您在@WaiHaLee 的以下答案中提到的公式(显示在 OP 图像中)中缺少IF 函数。每次隐藏列时都需要重新计算公式。您可以为此使用F9。我认为 WaiHaLee 的回答非常出色,对我来说效果很好。

标签: excel-formula


【解决方案1】:

方法一:使用CELLINDIRECT

细胞功能

cell function 允许您查找单元格的属性,例如宽度:

=CELL("width")

间接函数

Indirect function 允许您通过 字符串 引用单元格,例如得到A1的值,

=INDIRECT("A1")

=INDIRECT("R1C1", true)

取所有内容的总和(例如E2 = B2 + C2 + D2),然后使用 CELL 找出每个单元格宽度是否为零,然后将其从总和中取出。


方法二:使用IFCELL

或者,您可以使用IF function 和 CELL 函数,例如

E1 = IF(CELL("width", B2) = 0, 0, B2)
   + IF(CELL("width", C2) = 0, 0, C2)
   + IF(CELL("width", D2) = 0, 0, D2)

【讨论】:

  • 谢谢!我在我的原始帖子中添加了一个示例图片链接,其下方有一段显示我正在寻找的内容。
  • 嗨@bkoverflow,我已经更新了我的答案以包含一个适用于您的示例的可粘贴答案。
  • 很好的解决方案,+1。您可以将方法 2 缩短为 =(CELL("width",B2)>0)*B2 + (CELL("width",C2)>0)*C2 + (CELL("width",D2)>0)*D2,但可能会丢失易读性。
  • @RickHitchcock,非常感谢您的反馈和 +1。我认为这不会妨碍易读性,但我可能会保留我的答案以使其明确。
  • 感谢大家的帮助!!!不幸的是,这两个函数都没有正确忽略该列。我在原始帖子中添加了另一个屏幕截图,显示了隐藏 D 列的方法 2。如您所见,E 列中的总计仍在将 D 列中的值添加到公式中。
【解决方案2】:

nbastos's answer 中的两点都准确且有助于获得有效的解决方案:

  • 较新版本的 Office 确实会溢出到两个单元格中,因此获取数组第一个元素的 INDEX 函数可以令人满意地解决问题。
  • 我也发现,即使我的工作簿处于自动计算模式,也必须使用键盘上的 F9 强制重新计算(或者在我的情况下,通过 VBA 中的 .Calculate 方法)。显然 Cell() 函数不是带有“width”参数的 Volatile 函数。

【讨论】:

    【解决方案3】:

    要处理溢出功能,您可以在 CELL 前面加上 @:@CELL("width",b2)

    【讨论】:

    • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
    【解决方案4】:

    我在“Excel for Office 365”中发现,Wai Ha Lee 公式溢出到相邻单元格中,因为 =CELL("width") 返回 2 个值的数组(宽度和布尔值)。

    这个“溢出”是一个new feature,可以通过使用 INDEX 只使用数组中的第一个值来避免这种情况。 以下在 Office 365 中适用于我:

    = IF(INDEX(CELL("宽度", B2),1) = 0, 0, B2) + IF(INDEX(CELL("宽度", C2),1) = 0, 0, C2) + IF(INDEX(CELL("宽度", D2),1) = 0, 0, D2)

    注意: 使用“组”隐藏列会自动重新计算公式,但在我的版本中,手动隐藏列不会触发重新计算公式(它需要手动 F9 触发器或其他单元格更改)。

    【讨论】:

      猜你喜欢
      • 2016-09-06
      • 1970-01-01
      • 1970-01-01
      • 2015-08-25
      • 2018-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-18
      相关资源
      最近更新 更多