我有一个电子表格,其中包含许多小计,并且它们之间的行数不定。如果我仅显示小计行,添加公式并将其向下拖动,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
小计行通常是可识别的(例如,使用Average
或Count
- 或最常见的是 和 ,就像您的情况一样Total
)。筛选“在列中每次更改时”以查找包含“Tot”以仅访问小计行。
请注意,虽然经过过滤,结果可能看起来不正确,但在移除过滤器后应该进行适当调整。
答案2
我必须对带有单独加权类别的加权决策矩阵执行类似操作。电子表格如下所示:
出现“#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
如果折叠所有不想覆盖的行,可以通过执行以下操作来粘贴公式:
- 复制公式
- 突出显示要应用公式的区域
- 转到“转到特殊选项”(主页功能区右上角,或按 CtrlSG 然后按 Alt+S)
- 仅选择可见单元格,点击确定
- 粘贴公式
希望这可以帮助