在Excel/Google工作表中查找加权平均值

在Excel/Google工作表中查找加权平均值,excel,google-sheets,Excel,Google Sheets,我尝试使用加权平均值计算学生分数,如本表所示: B4:B13有一个等式,但我会有大约40个作业,这会让我很长时间打字 我尝试使用SUMPRODUCT,但有两个问题: 1.权重每隔一列显示一次 2.如果标记是空白单元格,则该赋值的权重应为零。(例如,见学生10,作业1权重应为零,整体分数应为100%) 如何使用公式来实现这一点?试试以下方法: =ArrayFormula(SUM(IF((MOD(COLUMN($D4:$Z4),2)=0)*(N(+D$1:$Z$1)<>0)*($D4:

我尝试使用加权平均值计算学生分数,如本表所示:

B4:B13有一个等式,但我会有大约40个作业,这会让我很长时间打字

我尝试使用SUMPRODUCT,但有两个问题: 1.权重每隔一列显示一次 2.如果标记是空白单元格,则该赋值的权重应为零。(例如,见学生10,作业1权重应为零,整体分数应为100%)

如何使用公式来实现这一点?

试试以下方法:

=ArrayFormula(SUM(IF((MOD(COLUMN($D4:$Z4),2)=0)*(N(+D$1:$Z$1)<>0)*($D4:$Z4<>""),$D4:$Z4*$D$2:$Z$2/$D$1:$Z$1)*100/SUM(IF((MOD(COLUMN($D4:$Z4),2)=0)*(N(+D$1:$Z$1)<>0)*($D4:$Z4<>""),$D$2:$Z$2))))
=ArrayFormula(SUM(如果)((MOD(列($D4:$Z4),2)=0)*(N(+D$1:$Z$1)0)*($D4:$Z4“”),$D4:$Z4*$d2:$Z$2/$d1:$Z$1)*100/和(如果((MOD(列($D4:$Z4,2)=0)*(N(+D$1:$Z$1)0)*($D4:$Z4:$Z4“”),$2:$Z$2)))

如果您想要一个随着额外列的添加而增长的公式,请使用以下怪物:

=ArrayFormula(SUM(IF((MOD(COLUMN($D4:INDEX(4:4,MATCH(1E+99,$2:$2))),2)=0)*(N(+D$1:INDEX($1:$1,MATCH(1E+99,$2:$2)))<>0)*($D4:INDEX(4:4,MATCH(1E+99,$2:$2))<>""),$D4:INDEX(4:4,MATCH(1E+99,$2:$2))*$D$2:INDEX($2:$2,MATCH(1E+99,$2:$2))/$D$1:INDEX($1:$1,MATCH(1E+99,$2:$2)))*100/SUM(IF((MOD(COLUMN($D4:INDEX(4:4,MATCH(1E+99,$2:$2))),2)=0)*(N(+D$1:INDEX($1:$1,MATCH(1E+99,$2:$2)))<>0)*($D4:INDEX(4:4,MATCH(1E+99,$2:$2))<>""),$D$2:INDEX($2:$2,MATCH(1E+99,$2:$2))))))
(2)2=0)*(N(+D$D$D$1:1:1$1$1$1$1$1,匹配(1E+99+99+99$99,$2$2$2$2$2$2$1,匹配(1$1$1$1,匹配(1E+99+99+99+99+99,$2$2$2$2:)))0(若)(若)(若)(若)(若)(若)(若)(若)(若)(若)(若)(若)(若)(若)(若)阵列(模(第4$D4:索引(4:索引(4:索引(4:索引(4:4:4:4:4:4:4,匹配(4:4:4:4,匹配(4:4:4,匹配(4:4,匹配(4,匹配(4:4,匹配(4,匹配(4:4,匹配(4,匹配(4,匹配)(匹配)(匹配)(匹配)(匹配)(匹配)(匹配(1E+4:4)((2)=0)*(N(+D$1:指数)($1:$1,匹配(1E+99,$2:$2)))0)*($D4:INDEX(4:4,匹配(1E+99,$2:$2))),$D$2:INDEX($2:$2,匹配(1E+99,$2:$2‘);)
它将在第2行中找到最后一列,其中有一个数字,并将其用作其结束列。

如果要排除空字段,只需使用类似于
=(D13*$D$2/$D$1+F13*$F$2/$F$1)*100/($D$2*(D13“”)+F$2*(F13“”)
(如果有零,仍将计算)。该公式适用于学生10,但您也可以复制粘贴到其他字段…怪物公式有效!但是如果单元格移动,有没有简单的方法可以更改它?我已将我的工作表调整为:(我的错误在于进行更改)@utphx刚意识到我有足够的其他检查,我不需要MOD()因此,请使用以下替代方式来使用这一。<代码>>=数组形式的数组形式(总和)(如果((N(+M$M$M$M$1:1美元1:1美元,匹配(1E+99,$2$2:$2:)))0)*(0)0)0)*(($4:4:索引(如果((N(+N(+M(+M+M$M$M$M$1:1:1:1:1:1,匹配(N+1美元1:1:1:1:1:1:1:1:1:1:1,2,$2,$2,$2,$2,$2,$2::$2::::::::::)))请请请请请请)使用)使用)的)使用这一次次次,请请使用,所以,所以,请使用这将使用这种做法,所以,所以,所以,所以使用这种做法)来使用这一个数组形式,所以,所以使用2:$2)),$M$2:INDEX(2:$2:$2:$2:$2:$2:$2:$2:$2:$2:$2:$2:$2:$2:$2:$2:$2:$2:$2:$2,匹配(1E+99,$2:$2:$2:$2:$2:$2:$2:$2:$2:$2:$2::)我能够修改你原始的怪物代码::::::::::=数组形式为:=Arrayf3:Arrayfora(我能够修改你的原始的怪物代码::::::::::::::::::::::)数组数组形式(以及(我能够修改你的原始的怪物代码:::::::::::::::::::::::)数组)数组数组形式)数组形式为:。以及(如果(如果(如果((如果((如果((如果(美元+99美元,4美元(4美元)))*100/和(如果((MOD(COLUMN($N8:INDEX)(8:8,MATCH(1E+99,$4:$4))),2)=0)*(N(+N$3:INDEX($3:$3,MATCH(1E+99,$4:$4)))0)*($N8:INDEX(8:8,MATCH(1E+99,$4:$4)))”),$N$4:INDEX($4:$4:$4:$4:$4:$4:$4:$4:$4:)),而且它工作得很好,谢谢!