繁体   English   中英

根据Excel中的多个条件计算平均值

[英]Calculate Average based on multiple condition in Excel

我回来了我的新的Excel问题。 可以说我有这样的桌子。

    |  A                           |  B  
------------------------------------------
 1  |  ENV                         |  Value
------------------------------------------
 2  |  ABC - 10/1/2014 1:38:32 PM  |  4
 3  |  XYZ - 10/1/2014 1:38:32 PM  |  6 
 4  |  ABC -  9/1/2014 1:38:32 PM  |  1 
 5  |  XYZ - 10/1/2014 1:38:32 PM  |  10 
 6  |  ABC - 10/1/2014 1:38:32 PM  |  7
 7  |  XYZ -  9/1/2014 1:38:32 PM  |  1 
 8  |  ABC -  9/1/2014 1:38:32 PM  |  10 
 9  |  ABC - 10/1/2014 1:38:32 PM  |  7 
10  |  XYZ - 10/1/2014 1:38:32 PM  |  7 

现在,在单元格C2中,我选择了ABC。

因此,在细胞D2,我希望所有的“ABC”(COL A)其中所有的“ABC”的月= 10(COL A)和在细胞E2,MAX( 从列B),其中的平均( 从列B)月= 10( col A )。

因此,我在单元格D2和E2中的结果分别为6和7。

我希望我的问题和榜样有意义。

更新:
谢谢大家的帮助。
现在让我们说我不确定该电子表格上将有多少行,所以我想出了这个公式,但是它不起作用,给了我#DIV / 0! 错误。
*注意:我正在使用公式从单元格C2中获取“ ABC”和“ 10”。

=AVERAGEIFS(
(OFFSET($A$1,1,1,COUNTA($B:$B)-1,1)),
OFFSET($A$1,1,0,COUNTA($A:$A)-1,1), (MID(C2,1,(FIND("-",C2))-2)),
OFFSET($A$1,1,0,COUNTA($A:$A)-1,1), (MID(C2,(FIND("-",C2)+1),(FIND("/",C2))-(FIND("-",C2)+1))))  

甚至尝试过此方法,但存在相同错误:

=SUMPRODUCT(((MID(A2:A10,1,(FIND("-",A2:A10))-1))=(MID(C2,(FIND("-",C2)+1),(FIND("/",C2))-(FIND("-",C2)+1))))*
(MONTH(DATEVALUE(MID(A2:A10,7,99)))=(MID(C2,(FIND("-",C2)+1),(FIND("/",C2))-(FIND("-",C2)+1))))*
(B2:B10))/SUMPRODUCT(((MID(A2:A10,1,(FIND("-",A2:A10))-1))=(MID(C2,(FIND("-",C2)+1),(FIND("/",C2))-(FIND("-",C2)+1))))*
(MONTH(DATEVALUE(MID(A2:A10,7,99)))=(MID(C2,(FIND("-",C2)+1),(FIND("/",C2))-(FIND("-",C2)+1)))))  

你能帮我这个吗?

具有中间价值的解决方案

为了解决该问题(我仅测试了平均值 ),我首先使用了2个中间值:此解决方案不是最佳解决方案,将有许多更智能的方法来解决该问题(例如数据透视表)。

ENV                                Value        Intermediary 1  Intermediary 2  

ABC - 10/1/2014 1:38:32 PM          4           ABC             10  
XYZ - 10/1/2014 1:38:32 PM          6           XYZ             10  
ABC -  9/1/2014 1:38:32 PM          1           ABC             9   
XYZ - 10/1/2014 1:38:32 PM          10          XYZ             10  

第一中间列包含ENV列的前三个字符( =LEFT(A9,3) ),而第二中间列包含月份( =MID(A9,7,2) )。 仅当您的ENV记录是固定大小且同质的(例如,您的环境名称恰好有3个字符)时,此方法才有效。

使用此布局,您可以计算以下公式在任何单元格中的平均放置:

=AVERAGEIFS(D9:D12, F9:F12,"=ABC", G9:G12, "=10")

其中D9:D12是值间隔, F9:F12是第一中间列, G9:G12是第二中间列。

一站式紧凑型解决方案(阵列)

可以找到依赖于arrays的优化解决方案。 例如,要基于2个“矢量”条件计算间隔的平均值和最大值,可以编写此衬纸:

= MAX(IF((LEFT(A9:A12,3)="ABC")*(MID(A9:A12,7,2)="10"),D9:D12))

= AVERAGE(IF((LEFT(A9:A12,3)="ABC")*(MID(A9:A12,7,2)="10"),D9:D12))

使用A9:A12您的原始记录,而D9:D12是值间隔。

该解决方案的优点是您不需要任何中间列,并且可以将此方法扩展到所有其他没有' xxxxxIFS '的公式(对于MAX就是这种情况)。

注意 :您必须使用CTRL + SHIFT + RETURN确认此公式,否则您的公式将因#VALUE错误而失败。

现场演示

在此处输入图片说明

现场演示可在此处获得

您可以使用-数据>带有分隔符“-的列到文本”,将A列插入日期和字母开始。 在有了新的两列(假设F和G)之后,可以使用函数“ AVERAGEIF”,条件是检查“ F”中单元格的值是ABC且Moth(“ G”中单元格)= 10.至于最大值,您可以对列E的MAX(IF ....)进行相同操作。

SUMPRODUCT将允许您分析组合字符串中最左边和日期的字符。 可以使用MAX()INDEX()类似地构造伪MAXIF INDEX()

在D2中使用=SUMPRODUCT((LEFT(A2:A10,3)="ABC")*(MONTH(DATEVALUE(MID(A2:A10,7,99)))=10)*(B2:B10))/SUMPRODUCT((LEFT(A2:A10,3)="ABC")*(MONTH(DATEVALUE(MID(A2:A10,7,99)))=10))

在E2中使用=MAX(INDEX((LEFT(A2:A10,3)="ABC")*(MONTH(DATEVALUE(MID(A2:A10,7,99)))=10)*(B2:B10),,))

SUMPRODUCTINDEX喜欢在解析文本时对任何类似于错误的东西进行阻塞,因此使单元格范围引用始终与实际数据相同,并避免出现空白。

您的结果应如下所示。

在此处输入图片说明

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM