如何使用另一列的键来完成某列的功能

如何使用另一列的键来完成某列的功能

我正在尝试计算数千名学生的加权平均值。

我可以依次为个别学习者做这件事(SUM PRODUCTS)。

问题是我不知道如何同时为数千名学生做到这一点。

每个学生的成绩数不同,每个成绩的权重也不同。

我发现的只是根据学生代码对数据进行排序。并试图让给定的公式对我有用,只要键相同,它就会重复。

请帮我解决这个问题

在此处输入图片描述

答案1

至少有两种简单的方法可以做到这一点。两者都“过滤”所需的值,然后进行算术运算。

一种很简单,使用SUMPRODUCT()您满意的,但对值列表进行过滤,以便选择合适的项目进行处理。它使用FILTER()选择符合条件的行,然后再次使用从内部的结果FILTER()中选择列:FILTER()

=SUMPRODUCT(  FILTER(  FILTER(B1:D12, B1:B12=I1),  {0,1,0}),  FILTER(  FILTER(B1:D12, B1:B12=I1),  {0,0,1}))

如上所述,该公式假设学生要查找的查找条目单元格为 I1。当然,列的范围是千位,而不是 12 位。

但是,对于“千位”,只需将地址更改为一个范围,就可以根据需要使用 I 列中的任意数量。或者,如果 1(似乎很有可能)在表示“千位”时也表示“全部”,则可以将UNIQUE()其第三个参数设置为FALSE提取这些“千位”中的每个学生姓名的单个实例列表。但是,即使创建该数组,似乎也不能仅使用它I1#来捕获整个结果。我认为这是由于查找范围的长度不同以及 的输出较短UNIQUE()

FILTER()实际上会为其中包含的行创建一个 TRUE/FALSE 结果列表。这里的“技巧”是,您可以通过直接键入该列表来获取所需的列(例如:{0,1,0} 以选择第二列)。硬编码实际上很有用,尽管您绝对可以通过让公式动态的方式创建这些数组。但这里永远不需要。

请记住,可以使用INDEX()选择要用于SUMPRODUCT()数组的列。就我个人而言,我认为这更容易,但区别不大。

就说这么多了。一种更老派的方法,适用于相当老版本的 Excel,只需进行范围比较来“过滤”数据并将其呈现给SUMPRODUCT()

=SUMPRODUCT(  IF(B1:B12=I1, C1:C12, 0),  IF(B1:B12=I1, D1:D12, 0)  )

函数中的每个数组均由 提供,IF()它只是将查找范围与行的第 I 列单元格进行比较(是的,这两种方法都不是SPILL公式,因此您必须向下复制到第 I 列延伸的范围UNIQUE())并将两列数据返回到函数的参数中。

直接、清晰、简单,多年来易于理解和维护。应该很快,因为它使用简单的 TRUE/FALSE 测试,而不是函数。这两种方法都没有使用SPILL其列中的功能SUMPRODUCT(),因此两者都没有优势。

但是这个只使用您熟悉的功能,所以为什么不呢?

实际上,令人讨厌的部分,列出独特的学生名单,使用SPILL这个任务也可以很好地完成。

相关内容