代码之家  ›  专栏  ›  技术社区  ›  Bagzli

如何对空单元格使用Averageifs

  •  0
  • Bagzli  · 技术社区  · 6 年前

    我有一个电子表格,在a列我有一个名字列表,然后在B到Z列我有一个0到5之间的数字。我想根据我选择的名称得到B到Z列的平均值。

    Name     Col 1     Col 2
    Bob       4         2
    John      3         5
    Zed                 5
    

    如果名字是Bob,下面的结果是3

    =AVERAGEIF(A2:A4, "Bob", B2:D4)
    

    但是,如果我将名称改为Zed,那么我得到的结果是不能除以0,因为第1列没有填写。我希望只有当它是一个数字时,它才算。我考虑过在列中加入-1,并且有多个条件,这样如果它的值是>-1,那么它就可以算数了,但我似乎无法使公式起作用。以下是我尝试的:

    这很好:

    =AVERAGEIFS( B2:D4, B2:D4, ">-1")
    

    但是当我尝试用name组合时,我总是得到相同的错误,所以我尝试隔离它,结果还是得到了同样的错误。

    =AVERAGEIFS( B2:D4, A2:A4, "=Bob")
    

    上述情况会产生以下错误:

    averageifs的数组参数大小不同

    也试过用过滤器,也没什么好运气的:

    =AVERAGEIF(A3:A43, "Bob", FILTER(B2:D4, NOT(ISBLANK(B2:B4))))
    
    1 回复  |  直到 6 年前
        1
  •  1
  •   basic    6 年前

    你可以用 ARRAYFORMULA / IF 具有 AVERAGE :

    =arrayformula(average(if((E1=A2:A4)*(B2:C4>0),B2:C4,"")))
    

    enter image description here

        2
  •  0
  •   marikamitsos    6 年前

    也可以使用查询

    =IFERROR(AVERAGE(QUERY(A22:C,"where A='"&D21&"'")))

    enter image description here

    使用的功能:

        3
  •  0
  •   Erik Tyler    6 年前

    另一种方法。这将生成所有姓名和平均数的报告:

    =ArrayFormula({FILTER(A2:A,A2:A<>""),MMULT(FILTER(IF(B2:Z>0,B2:Z,0),A2:A<>""),SEQUENCE(COLUMNS(B:Z),1,1,0))/MMULT(FILTER(IF(B2:Z>1,1,0),A2:A<>""),SEQUENCE(COLUMNS(B:Z),1,1,0))})
    

    只需确保将它放在A:Z范围之外,否则会出现循环依赖错误。如果将其移到其他工作表中,请确保在所有区域前面加上源工作表的名称。

    如果我只是硬编码B:Z列(即25列)等,那么这个值可能会更短。相反,如果您将范围更改为B:AA等,那么它的编写非常容易进行编辑。