使用 arrayformula 动态查找并获取平均值

Dynamically lookup and get average using arrayformula

我正在尝试获取我的 SourceSheet 中包含数据的所有行的平均值,这些行需要与 Sheet1 和 [=13] 中的鱼 ID A1:F1 相匹配=] 在 SourceSheet 中。我想通过使用 ARRAYFORMULA() 来做到这一点,因为 Sheet1!A2:A5 是动态的,可能不时包含其他值。

到目前为止,我只通过以下方式管理查找和平均部分:

=AVERAGE(ARRAYFORMULA(HLOOKUP($A2,SourceSheet!A:F,ROW(Items!A:F),FALSE)))

如何在不将此公式复制到所有行的情况下获得结果(见下文)?提前致谢!

源数据(SourceSheet

+------+--------+-----+--------+---------+---------+ | tuna | mullet | cod | salmon | herring | catfish | +------+--------+-----+--------+---------+---------+ | 4 | 3 | 5 | 5 | 5 | 3 | | 5 | 3 | 3 | 1 | 3 | 2 | | 5 | 4 | 4 | 4 | 4 | 4 | | 1 | 2 | 1 | 2 | 3 | 1 | | 3 | 2 | 2 | 2 | 3 | 2 | | 4 | 2 | 4 | 2 | 3 | 3 | | 4 | 2 | 2 | 1 | 2 | 1 | | 4 | 3 | 4 | 3 | 5 | 4 | | 3 | 4 | 4 | 2 | 5 | 1 | | 4 | 3 | 4 | 1 | 2 | 2 | | 2 | 1 | 3 | 1 | 1 | 1 | | 2 | 4 | 3 | 2 | 2 | 2 | | 5 | 3 | 5 | 4 | 5 | 2 | | 4 | 2 | 4 | 2 | 3 | 2 | | 2 | 4 | 4 | 3 | 4 | 2 | | 5 | 4 | 5 | 5 | 3 | 2 | | 3 | 1 | 3 | 3 | 4 | 2 | +------+--------+-----+--------+---------+---------+

我想要实现的目标:(Sheet1)

+---------+---------+ | | Average | +---------+---------+ | mullet | 2.76 | | salmon | 2.75 | | herring | 2.73 | | catfish | 2.64 | +---------+---------+

公式

=ArrayFormula(
MMULT(
hlookup(A2:A5,SourceSheet!A:F,
TRANSPOSE(FILTER(ROW(SourceSheet!A2:A),LEN(SourceSheet!A2:A))),FALSE),
n(ISNUMBER((FILTER(ROW(SourceSheet!A2:A),LEN(SourceSheet!A2:A)))))
)
/
count(SourceSheet!A2:A)
)

说明

AVERAGE 是一个聚合函数。它可以采用逗号分隔的多个值、一个数组或多个值数组作为参数,并且 returns 是单个值。这种函数如果用在数组公式上将 return 一个单一的值,所以当它需要 return 一个值的数组时,它需要使用其他方法。

在这种情况下,MMULT 用于 return 每行值的总和。

另见

  • Using CHOOSE and CONCATENATE with ARRAYFORMULA in Google Sheets