【问题标题】:Excel - SUBTOTAL but only where particular criteria is met (SUMIF/AVERAGEIF)Excel - 小计,但仅在满足特定条件时(SUMIF/AVERAGEIF)
【发布时间】:2021-11-16 09:46:50
【问题描述】:

编辑:该文档的设置类似于一系列仪表板。有些如果链接到许多图表的数据在数据透视表中,有些只是常规表。因为图表太多,我使用一些用户选择按钮和字段来更改这些图表中显示的数据。 部分用户在 office 2016 中打开文件。
我找到的所有解决方案要么限于 365,要么涉及创建我试图避免的新数据表或列,因为这意味着相当多的返工。相反,我只使用了一组嵌套的 IFS,并最终考虑将这些特定的数据透视表更改为具有索引查找的常规表,以使实际数据能够位于多个列中。

我目前使用 SUBTOTAL 函数对一个范围内的一组单元格求和、计数或平均。我以前手动过滤范围,所以我只对我想要的行进行总计,但是现在需要能够同时查看多个标准。 即在下面的示例中,我之前手动过滤范围以仅包括“Apple”,但现在我需要能够同时分别总计“Apple”、“Orange”、“Banana”。

小计字段用于图表,我有一个单元格 (F5),其中包含一个对应于 SUM、COUNT 或平均值(9、2 或 1)的数字,用于“汇总表”中的小计公式已链接到工作簿中的其他功能,我仍然需要能够保留该功能。

我的工作表设置示例:

原始数据

Product Type Sales QTY Date
Apple 4 1/9/21
Orange 3 6/9/21
Banana 2 10/9/21
Apple 6 14/9/21
Orange 6 20/9/21
Apple 5 29/9/21

我要匹配的条件在汇总表的第 1 列(产品类型)中。

基本上,我希望最终能够将数据显示为总计

$F$5 = 9

对于每一行: SUBTOTAL($F$5,SalesQTY)

汇总表

Product Type Result (Sales Per Month)
Apple 15
Orange 9
Banana 2

或作为平均值

$F$5 = 1

对于每一行: SUBTOTAL($F$5,SalesQTY)

Product Type Result (Average QTY per Sale)
Apple 5
Orange 4.5
Banana 2

或作为计数

$F$5 = 2

对于每一行: SUBTOTAL($F$5,SalesQTY)

Product Type Result (# Sales Transactions)
Apple 2
Orange 2
Banana 1

有没有什么方法可以将 SUMIF 和 SUBTOTAL 结合起来,同时还能保留在平均值、求和和计数之间切换的能力?

【问题讨论】:

    标签: excel-formula average subtotal


    【解决方案1】:

    使用的解决方案:

    为了避免必须修改工作表中依赖此字段的许多其他表格,并且由于某些用户使用旧(非 365)版本的 excel 打开此文件,我选择了一系列嵌套 IF(CountIF, SumIF, AverageIF) 语句。

    【讨论】:

      【解决方案2】:

      这是在 excel 365 中创建动态汇总表的公式。如果您有任何早期版本的 excel,公式会有所不同,并且必须手动添加或删除行。我假设您的表名为Data_Table

      =LET(
          Column_Product, Data_Table[Product Type],
          Column_QTY, Data_Table[Estimated],
          Column_Date, Data_Table[Date]
      
          Column_Key, Column_Product,
          Column_Filter1, Column_QTY,
          Column_Filter2, Column_Date,
          
          List_Filter1, UNIQUE(Column_Product),
          List_Filter2, 1,
      
          Categories, SORT(UNIQUE(Column_Key)),
          Array_BoolKey, (TRANSPOSE(Column_Key)=Categories)+0,
          Mask1, TRANSPOSE(ISNUMBER(XMATCH(Column_Filter1,List_Filter1))),
          Mask2, TRANSPOSE(Column_Filter2>List_Filter2),
      
          Array_BoolMasked, Array_BoolKey*Mask1*Mask2,
          Masked_QTY, IFERROR(Array_BoolMasked*TRANSPOSE(Column_QTY),0),
          Masked_Date, IFERROR(Array_BoolMasked*TRANSPOSE(Column_Date),0),
      
          Array_Ones, SEQUENCE(COLUMNS(Array_BoolMasked),1,1,0),
      
          Months, DATEDIF(MIN(Column_Date),MAX(Column_Date),"M"),
      
          Body_Count, MMULT(Array_BoolMasked, Array_Ones),
          Body_Sum_QTY, MMULT(Masked_FtModeled, Array_Ones),
          Body_Average_PerSale, Body_Sum_QTY/Body_Count,
          Body_Sum_QTY_PerMo, MMULT(Masked_FtModeled, Array_Ones)/Months,
      
          Total_Count, IFERROR(SUM(Body_Count_Lines),"-"),
          Total_QTY_PerMo, IFERROR(SUM(Body_Sum_QTY)/Months,"-"),
          Total_Average_PerSale, IFERROR(SUM(Body_Sum_QTY)/Total_Count,"-"),
      
          Array_Seq, {1,2,3,4,5},
          Array_Header, CHOOSE(Array_Seq, "Product Type", "Sales Per Month", "Average QTY per Sale", "# Sales Transactions"),
          Array_Body, CHOOSE(Array_Seq, Categories, Body_Sum_QTY_PerMo,  Body_Average_PerSale, Body_Count),
          Array_Total, CHOOSE(Array_Seq,  "Total", Total_QTY_PerMo, Total_Average_PerSale,  Total_Count),
      
          Range1,Array_Header,
          Range2,Array_Body,
          Range3,Array_Total,
          Rows1,ROWS(Range1), Rows2,ROWS(Range2), Rows3,ROWS(Range3), Cols1,COLUMNS(Range1),
          RowIndex, SEQUENCE(Rows1 + Rows2 + Rows3), ColIndex,SEQUENCE(1, Cols1),
          RangeTable,IF(
              RowIndex<=Rows1,
              INDEX(Range1,RowIndex,ColIndex),
              IF(RowIndex<=Rows1+Rows2,
                  INDEX(Range2,RowIndex-Rows1,ColIndex),
                  INDEX(Range3,RowIndex-Rows1-Rows2,ColIndex)
          )),
      
          Return, RangeTable,
          Return
      )
      

      我写了这个通用的,所以你可以只为某些产品、最小数量、日期范围或其他条件添加过滤器。在上面,我设置了过滤器以通过所有内容。

      【讨论】:

      • 谢谢你 - 我会试一试的。虽然有些用户在其他版本的 Excel 中打开此文件 - 这是否意味着他们会有兼容性问题?
      • 该公式将在早期版本的 excel 中返​​回 #NAME!
      • 啊,真可惜。将不得不寻找替代品。不过谢谢,如果我们完全过渡到 365,我会保存这个解决方案
      • 我最终只做了一组嵌套的 IFS,这样我就可以通过返工来避免,直到我们切换为止。再次感谢
      猜你喜欢
      • 1970-01-01
      • 2022-11-24
      • 2013-02-21
      • 2019-05-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-02
      相关资源
      最近更新 更多