Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 从索引和匹配中平均非零值_Excel_Excel Formula - Fatal编程技术网

Excel 从索引和匹配中平均非零值

Excel 从索引和匹配中平均非零值,excel,excel-formula,Excel,Excel Formula,我在excel中有一个数据表,其中包含时间、名称和结果列 我的目标是使用公式生成一个不同的新表,其中显示每个时间(列)和名称(行)组合的结果。这将在以后用于生成热图(结果是实数) 我是通过在新表的每个单元格上使用公式来实现的。新表中单元格K5的示例如下: =INDEX($AE$2:$AE$999, MATCH(1, INDEX(($A5=$X$2:$X$999)*(K$4=$V$2:$V$999),0,1),0)) 其中,$AE$2:$AE$999是结果列,$A5是新表中的名称行,$X$2:$

我在excel中有一个数据表,其中包含时间、名称和结果列

我的目标是使用公式生成一个不同的新表,其中显示每个时间(列)和名称(行)组合的结果。这将在以后用于生成热图(结果是实数)

我是通过在新表的每个单元格上使用公式来实现的。新表中单元格K5的示例如下:

=INDEX($AE$2:$AE$999, MATCH(1, INDEX(($A5=$X$2:$X$999)*(K$4=$V$2:$V$999),0,1),0))
其中,
$AE$2:$AE$999
是结果列,
$A5
是新表中的名称行,
$X$2:$X$999
是名称列,
K$4
是新表中的时间列,
$V$2:$V$999
是时间列

问题是我的数据表有多个条目,它们具有相同的名称和时间组合,但结果值不同。对于这些组合,我希望公式返回所有非零结果的平均值

我认为当前公式只返回它遇到的第一个匹配项。我希望此过程尽可能自动化,因为原始数据表将频繁更改

显示两个表的屏幕截图

新桌子。
G6
中显示的公式返回
0
。我希望它返回
3.1
2.6
的平均值

注意:您的问题文本与图片不同。我将使用您的消息文本中提到的列,而不是图像中的列

看起来你正在做的是计算一个平均值,但只是在某些条件下。由于您处理的是多个条件,因此首先要查看公式AVERAGEIFS()

在您的例子中,对于单元格G5,如果列X中的任何一行是印度(A5),列V中的同一行是6(G4),列AE中的同一行不是零,则需要平均值

因此,在其基础上,G5中的公式如下所示:

= AVERAGEIFS(  $AE$2:$AE$999
             , $X$2:$X999, "=India"
             , $V$2:$V$999, "=6"
             , $AE$2:$AE$999, "<>0" )
=AVERAGEIFS($AE$2:$AE$999)
,$X$2:$X999,“=印度”
,$V$2:$V$999,“=6”
,$AE$2:$AE$999,“0”)
然而,您希望它既动态又灵活,为了做到这一点,并防止Excel在移动单元格时弄乱东西,我大量使用了ROW()和COLUMN()函数

我想决赛可能是这样的

= AVERAGEIFS( $AE$2:$AE$999
             , $X$2:$X$999, "=" & INDEX( $A:$A, ROW() )
             , $V$2:$V$999, "=" & INDEX( $4:$4, 1, COLUMN() )
             , $AE$2:$AE$999, "<>0" )
=AVERAGEIFS($AE$2:$AE$999)
,$X$2:$X$999,“=”和索引($A:$A,ROW())
,$V$2:$V$999,“=”和索引($4:$4,1,COLUMN())
,$AE$2:$AE$999,“0”)
这可以粘贴在B5右边和下面的任何单元格中,并且应该在每个单元格中提供您想要的内容。如果结果表中不存在轴的组合,则公式将给出一个错误。因此,您应该将整个过程包装在一个错误函数中,并在发生错误时显示所需内容

供参考

INDEX($A:$A,ROW())
为公式所在行提供列A中的标签。因此,对于第5行中的任何单元格,这是“印度”


INDEX($4:$4,1,COLUMN())
为公式所在的列提供第4行中的标签。因此,对于G列中的任何单元格,这将是“6”。

如果您使用的是Excel版本365,则动态数组函数可以简化此操作

时代公式

=TRANSPOSE(SORT(UNIQUE(FILTER(U:U,(ROW(U:U)>1)*(U:U<>"")))))

如果没有365,则可以使用表格公式

=IFERROR(AVERAGEIFS($AD:$AD,$AD:$AD,">0",$U:$U,C$29,$W:$W,$B30),"")

并复制到表的范围。通过您选择的任何方式创建标题行/列

实际数据将非常有用。一个想法是在数据上创建一个透视表,它将按名称和时间对结果进行汇总。然后,您可以创建公式,而不必担心平均结果。
=IFERROR(AVERAGEIFS(AD:AD,AD:AD,">0",U:U,C4#,W:W,B5#),"")
=IFERROR(AVERAGEIFS($AD:$AD,$AD:$AD,">0",$U:$U,C$29,$W:$W,$B30),"")