将AVERAGEIFS语句重写为STDEV语句

时间:2016-09-19 15:38:45

标签: excel vba excel-vba

我希望将我的averageifs语句重写为STDEV语句。我目前有一个平均if语句,它在类型“M”中查找当前名称“N”,并在“A”和“B”列中找到相同的类型和名称,并将结果“C”平均为那些行。

=AVERAGEIFS(C:C,A:A,M4,B:B,N4)
=AVERAGEIFS(C:C,A:A,M5,B:B,N5)
=AVERAGEIFS(C:C,A:A,M6,B:B,N6)
etc...

我想对STDEV做同样的事情,但输入要求与STDEVIFS不同,不存在。

=STDEV(BG:BG,C:C,BL4,K:K,BM4)将为所有列提供开发。我如何解决这个问题与我的averageifs语句相同,但对于STDEV。

  A       B          C                     M        N            O
  x       x          x                     x        x            x
  x       x          x                     x        x            x
Type    Name       Mass                   Type     Name       AVG Mass
Fruit   Apple        3                    Fruit    Apple       4.25
Veggie  Tomato       5                    Fruit    Orange      6.5
Veggie  Lettuce      1                    Veggie   Tomato      6.333
Veggie  Tomato       7                    Veggie   Lettuce     2.3333
Fruit   Orange       6                    Fruit    Watermelon  5.5
Fruit   Apple        5                    Veggie   Watermelon  4
Fruit   Watermelon   5
Veggie  Watermelon   3
Fruit   Apple        3
Fruit   Apple        6
Veggie  Watermelon   5
Fruit   Watermelon   6
Fruit   Orange       7
Veggie  Lettuce      3
Veggie  Lettuce      3
Veggie  Tomato       7

x = non included info

2 个答案:

答案 0 :(得分:1)

你会得到一个STDEV的数组形式,里面有一个IF():

=STDEV(IF(($A$4:$A$19=M4)*($B$4:$B$19=N4),$C$4:$C$19))

作为数组公式,必须使用Ctrl-Shift-Enter确认,而不是在退出编辑模式时输入。如果操作正确,Excel会将{}放在公式周围。

数组公式与普通公式不同,因为它们将计算引用范围内的所有内容,因此不应使用完整列引用。

你可以像罗恩在他的回答中所说,并命名范围以限制参考。或者您可以使用一个表格来执行相同操作或仅限制范围,就像我在这里所做的那样。

enter image description here

答案 1 :(得分:0)

您可以使用IF函数返回适当的值,或返回将被忽略的布尔值FALSE。因此,给出您的数据样本,示例可能是:(使用 ctrl + shift + 输入作为数组公式输入)

=STDEV(IF((Type=M5)*(Name=N5),Mass))
  • 类型是A列中的命名范围
  • 名称是B列中的命名范围
  • Mass是C列中的命名范围
  • M5包含您要查找的类型
  • N5包含您要查找的名称

注意:您可以在上面的公式中使用整个(或部分)列参数而不是命名范围 - 效率会降低。

enter image description here