【问题标题】:Formula to sum the last thirteen rows in a column对列中最后十三行求和的公式
【发布时间】:2015-10-09 15:35:50
【问题描述】:

我正在搜索一个公式,该公式从底部开始对一列中的最后 13 行求和。我发现:

=SUM(INDEX(R:R,MATCH(9.99999999999999E+307,R:R,1)):INDEX(R:R,MATCH(9.99999999999999E+307,R:R,1)-13,0)) 

它在大多数情况下都有效,除非最后 13 行是空的 它会从最后一个填充的值开始添加最后 13 个数字。这是一个示例:

如您所见,第 V 列给出了 7.4,因为它计算了最后 13 个值 - 远远超过了底部的最后 13 个值。

如何使公式将空单元格计算为零,以便它在 V 中给我0

【问题讨论】:

  • 您是否要对第 99 到 111 行求和?如果是这样,您可以使用=SUM(R99:R111)
  • 不只是添加第 99-111 行,即使我添加更多行,公式也应不断在每列中添加最后 13 行
  • 那么你想把每列最后一个非空白单元格和它上面的12个单元格相加吗?

标签: excel excel-formula sum


【解决方案1】:

求和“N”个数据的最后一行

这是我对要求的理解:

DATA 在顶部有 2 行 Headers 和其他 2 行 Totals,因此 Excel Table 不适用。

6:7 包含TOTALS TO DATETOTALS LAST PAGETOTALS LAST PAGEDATA 的最后一个13 行的SUM。因此,我们需要识别DATA的最后一行,而不是最后一个非空行。

此解决方案假设:

DATA 位于C3:R38 范围内(根据需要调整),前 4 行为 Header 和 Totals;并且数据详细信息从行7开始。

为了能够计算DATA Last Row,我们需要确定一个字段,它的最后一行单元格总是填充(即它永远不会为空)。为了演示这个解决方案,我假设这个字段位于C 列中。还假设我们需要添加总计的字段在​​列F:R

此解决方案适用于以下三个工作单元

  1. DATA Last Row :这个FormulaArray 是公式的重要组成部分,用于添加几列(+20 个字段)TOTALS LAST PAGE,因此在工作单元格中只包含一次,将减少执行工作簿计算所需的资源。

在单元格I2中输入此FormulaArray

(公式数组通过同时按下[Ctrl]+[Shift]+[Enter]输入)

=MAX( (C:C <> "" ) * ROW(C:C) )
  1. Last Page Rows (用户输入) :位于E2,这个工作单元保存最后一页的行数(从DATA的最后一行向上添加的行数)。如果要添加的行数发生变化,它可以灵活地更新结果,而不是更改每个公式(+20 个字段),用户只需在此单元格中输入新的行数.

在单元格E2中输入13

  1. Last Rows to Add (calc) - 可选:用于计算要添加的单元格数量。为了避免在DATA 包含的行数少于最后一页的预期行数的情况下出现无休止的重复。尽管根据示例数据,这似乎不太可能发生,但仍然添加,因为它可能对具有类似情况的其他用户有用。 此工作单元格是可选的,因为提供了备用公式以防它未实现。

在单元格M2中输入此公式

=IF( $I$2 - $E$2 < ROW( $C$7 ), $I$2 - ROW( $C$7 ), $E$2 )

现在要获得TOTALS LAST PAGE,我们在单元格F6 中输入这些公式之一,然后复制到G6:R6 范围内

一个。 Last Rows to Add (calc) 工作单元已实现

=SUM( OFFSET( INDEX(F:F, $I$2, 0 ), 0, 0, -$M$2 ))

b. Last Rows to Add (calc) 工作单元已实施

=SUM( OFFSET( INDEX(F:F, $I$2, 0 ), 0, 0, -$E$2 ))

总是添加最后 13 行数据,无论它们的内容如何

Last Rows to Add (calc) 未实现,DATA 的记录少于 13TOTALS LAST PAGE 不准确,因为下面的总数也被添加了

【讨论】:

    【解决方案2】:

    您似乎正在寻找一种方法来确定列中最后一个非空白行的行号(并从那里倒数)以确定您的SUM() 范围。如果您愿意添加帮助列和/或将您的数据格式化为table,则有几个更简单的公式。 (如果是,请在 cmets 中告诉我,我可以修改答案)。

    尽管不使用辅助单元格和列,您可以尝试以下将大写 A 更改为您选择的列 =SUM(INDIRECT("A"&amp;INDEX(ROW(A:A),MAX((A:A&lt;&gt;"")*(ROW(A:A))))&amp;":A"&amp;INDEX(ROW(A:A),MAX((A:A&lt;&gt;"")*(ROW(A:A))))-13))

    说明:

    1. INDEX(ROW(A:A),MAX((A:A&lt;&gt;"")*(ROW(A:A)))) 确定 A 列中的最后一个非空白行(归功于 Doug Glancy)。这是一个array formula,必须使用 ctrl+shift+enter 进行初始化,然后公式应包含在大括号 {=SUM( 中。 ..)}
    2. INDIRECT() 允许您为 SUM() 函数声明一个动态范围。 INDIRECT() 函数的内部参数计算结果为 Ax:Ay,其中 xy 是倒数第 13 行和最后一行的行引用。

    但是,如果问题是跳过目标列中的非空白单元格在列的末尾,我想不出一个可读的单细胞公式可以做到这一点。我建议设置一个辅助单元格,在其中放置一个公式来确定有效的单元格范围。命名这个/这些单元格( alt+m+m+d 以调出命名范围管理器),将允许您将语法更改为 =SUM(named_range_1,named_range_2,...named_range_13),而无需数组公式。

    希望这会有所帮助!

    【讨论】:

    • 这将非常缓慢地运行,因为查看整列的数组公式实际上会查看整列 - 而不仅仅是使用范围内的单元格。然而,由于 OP 只需要这些公式之一,这应该不是什么大问题。
    • @Grade'Eh'Bacon 是的,使用ctrl+t 格式化为表格可以更轻松地进行评估,但 OP 中给出的示例似乎没有。
    • 嗨,谢谢您的评论,我的原始公式存在的问题是,它会将第 111 行的所有值向后计算 13 行,直到第 98 行,如果您查看单元格 G6=16.5女巫是正确的,但在单元格 V6 中它显示 7.4,因为它不将 v111 到 v98 的空单元格识别为数字,因此它在 V cel 中找到第一个数字,然后从该值开始将所有 13 行相加,例如:我想要它在这种情况下给我从 V111 到 V98 的值,这应该是 0,但如果第一个值在 V70 中,它将对从 v70 到 v57 的值求和并给我 7.4 希望它有意义
    • @GIO 我可以建议在这种情况下尝试“命名范围”解决方案。在新工作表上,编写一个遵循标准的公式,以便它始终以您要开始的单元格为目标。然后按照建议使用 alt+m+m+d 命名单元格。使用偏移方法从那里总结。抱歉,但如果不了解数据表的更多信息,我无法就命名范围单元格的公式应该是什么提供建议。
    【解决方案3】:

    对于我所解释的要求,我在 V112 中建议:

    =SUM(OFFSET(V112,-13,0,13,1))  
    

    如果需要,在不同的单元格中更改引用和行偏移量。

    【讨论】:

    • =SUM(OFFSET(V112,-13,0,13,1)) 我正在寻找的唯一问题是我需要公式从最后一个开始不断计数 13第 112 行不只是第 13 行。
    • 在我的图片中它是 111,但如果我添加更多行,例如 13 行,它将是 124,所以在你的示例中,对于列 V,它的 v124,所以你的公式将是 =SUM(OFFSET(V124,-13 ,0,13,1) 如果我想每次都更改值,那很好,但我需要一些东西,每次我添加更多行时,自动将“V124”值变为最后一个值
    • 好的,插入行确实可以,我会看看我是否可以这样使用它谢谢你
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多