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

时间:2014-10-06 15:17:27

标签: excel excel-formula

我回来了我的新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 

现在,在Cell C2中,我选择了ABC。

所以在单元格D2中,我想要所有" ABC"的平均值( from col B ) ( col A ),其中月份= 10( col A ),并且在所有&#34的单元格E2,Max( from col B )中; ABC"其中Month = 10( col A )。

所以,我在细胞D2和E2中的结果分别为6和7。

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

更新
谢谢大家的帮助。
现在让我们说我不确定我会在这个电子表格上有多少行,所以我想出了这个公式,但它没有用,给我 #DIV / 0!错误。
*注意:我正在使用公式来获得" ABC"和" 10"来自C2。

=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)))))  

你能帮我解决这个问题吗?

3 个答案:

答案 0 :(得分: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列的前3个字符(=LEFT(A9,3)),而第二个中间列包含月份(=MID(A9,7,2))。仅当您的ENV记录具有固定大小和同类记录时(例如,您的env名称恰好有3个字符),此方法才能正常工作。

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

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

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

One Shot紧凑型解决方案(阵列)

可以依靠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:A12D9:D12为值区间。

此解决方案的优势在于您不需要任何中间列,并且您可以将此方法扩展到所有其他不具备' xxxxxIFS&#的公式39; (这是MAX)的情况。

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

现场演示

enter image description here

现场演示available here

答案 1 :(得分:1)

您可以先使用 - 数据>将A列拼接成日期和字母。带有分隔符“ - ”的列的文本。 在你有了新的两列之后(比如F和G)你可以使用函数“AVERAGEIF”,条件是检查“F”中的单元格的值是ABC,而Moth(单元格中的“G”)= 10。 对于最大值,您可以对E列进行相同的MAX(IF ....)。

答案 2 :(得分:0)

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

在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都喜欢窒息任何类似于错误的内容,因此请保持单元格范围引用您的实际数据并避免空白。

您的结果应如下所示。

enter image description here

相关问题