如何将公式应用于小计行?

如何将公式应用于小计行?

我有一个电子表格,其中包含许多小计,并且它们之间的行数不定。如果我仅显示小计行,添加公式并将其向下拖动,Excel 会将公式添加到所有行,而不仅仅是小计行:-

小计前:

产品数量价格
1 3 55
1 4 66
2 5 77
2 6 88
2 7 99
2 8 110
2 9 121
3 10 132
3 11 143
3 12 154

压缩后小计:

产品数量价格
1 总计 7 121
2 总计 35 495
3 总计 33 429
总计 75 1045

将平均值添加到小计中:

产品数量价格加权平均
1 总计 7 121 17.28571429
2 总计 35 495 14.14285714
3 总计 33 429 13
总计 75 1045

拖下公式并解压缩

产品数量价格加权平均
1 3 55   
1 4 66   
1 总计 7 121 17.28571429
2 5 77 15.4
2 6 88 14.66666667
2 7 99 14.14285714
2 8 110 13.75
2 9 121 13.44444444
2 总计 35 495 14.14285714
3 10 132 13.2
3 11 143 13
3 12154 12.83333333
3 总计 33 429 13
总计 75 1045   

请不要专注于此示例以及如何以不同的方式完成它。实际的工作表非常复杂,我们需要在公式中使用小计。

我只需要将公式应用于小计。我该怎么做?

答案1

小计行通常是可识别的(例如,使用AverageCount- 或最常见的是 和 ,就像您的情况一样Total)。筛选“在列中每次更改时”以查找包含“Tot”以仅访问小计行。

请注意,虽然经过过滤,结果可能看起来不正确,但在移除过滤器后应该进行适当调整。

SU585375 示例

答案2

我必须对带有单独加权类别的加权决策矩阵执行类似操作。电子表格如下所示:

excel 截图

出现“#NAME?”的地方是几个公式,我将对此进行描述。电子表格依赖于宏 - 一旦启用宏,“#NAME?”就会消失,并显示正确的数字。

每个类别都有多个带有权重的标准。标准下方会计算类别总数,但总数左侧的行中有一个单元格,其中写有“类别”一词。类别分数使用以下公式:

=ROUND(SUMPRODUCT(range_up($C83),range_up(D83))/SUM(range_up($C83)),1)

如果将上述公式输入到单元格 D84 中,并且类别权重在 $C84 中,则该公式是正确的。

最终得分采用以下公式:

=sum_categories($B4:$B98,1,2)

其中“$B4:$B98”是包含单词“Category”的范围,“1”是权重在“Category”列右侧出现多少列,“2”是分数在“Category”列右侧出现多少列(即,这应该是公式所在的列)。

上述公式使用了下面提供的两个函数,range_up 和 sum_categories:

Function range_up(r As Range) As Range
  Dim t As Range, b As Range

  Application.Volatile

  Set b = r.Cells(1, 1) 'make sure it's only one cell

  If IsEmpty(b.Value) Then 'if cell is empty, start one cell up
    Set b = b.offset(-1)
  End If

  'end(xlup) has strange behaviour if cell above is blank, so fix it manually
  If IsEmpty(b.offset(-1)) Then
    Set t = b
  Else
    Set t = b.End(xlUp)
  End If
  Set range_up = t.Resize(b.Row - t.Row + 1)

End Function

Function sum_categories(r As Range, offset1 As Integer, offset2 As Integer) As Variant
  Dim sum As Variant
  Dim c As Range

  Application.Volatile

  sum = 0
  For Each c In r.Cells
    If c.Value = "Category" Then
      sum = sum + c.offset(0, offset1).Value * c.offset(0, offset2).Value
    End If
  Next c

  sum_categories = sum
End Function

最后,如果您想手动重新计算,请在表单上添加一个调用此函数的按钮:

Sub force_recalc()
  Application.CalculateFullRebuild
End Sub

答案3

问题只是在演示中吗?如果是这样,那么您可以使用简单的条件来隐藏不需要的输出。 =IF(RIGHT(B10,5)="Total",INDEX(Summary,A10),"") (用您实际使用的任何公式替换 INDEX)

答案4

如果折叠所有不想覆盖的行,可以通过执行以下操作来粘贴公式:

  1. 复制公式
  2. 突出显示要应用公式的区域
  3. 转到“转到特殊选项”(主页功能区右上角,或按 CtrlSG 然后按 Alt+S)
  4. 仅选择可见单元格,点击确定
  5. 粘贴公式

希望这可以帮助

相关内容