使用 SUM 和 INDEX 将公式转换为 ARRAYFORMULA 问题

Converting formula to ARRAYFORMULA issues with SUM and INDEX

我有一个我正在参加的比赛的得分分布sheet。参赛者的 place/rank 将根据相应值的图表转换为整个系列的积分。对于平局,所有并列名次的总分平分给并列的参赛者(即第 3 名的 2 路平局;如果第 3 名通常获得 10 分而第 4 名通常获得 8 分,则这些参赛者将获得(10+ 8)/2(2 是并列竞争对手的数量),因此他们每人获得 9 分)。 我有一个公式可以精确计算:

=IFERROR(IF(ISBLANK($A4:$A),,SUM(INDEX(SeriesPoints, E4:E):INDEX(SeriesPoints, MIN(E4:E + COUNTIF(E:E, E4:E) - 1, ROWS(SeriesPoints)))) / COUNTIF(E:E, E4:E), 0))

其中 'SeriesPoints' 是一个 2 列数组;第 1 列是 places/ranks (1:125),第 2 列是它们对应的点值。 'E' 列是参赛者在比赛中的排名。

我一直无法将此公式转换为 ARRAYFORMULA(),因此我可以避免将其拖到整个 sheet(系列中可能有 1000 多个参赛者)。 我对 MMULT() 略微精通,所以我知道这是切换 SUM() 的好方法,但是,我无法创建要求和的值矩阵。 INDEX():INDEX() 不适用于 ARRAYFORMULA(),因此我尝试切换到 VLOOKUP()。使用 VLOOKUP() 我已经能够生成领带值范围的起始值和结束值,但不能生成完整列表。例如,如果第 4 名有 3 路平局,我可以生成第 4 名和第 6 名的相应分数(平局的界限)。 为了甚至只列出 4:6 中的数字,我在将简单的 ROW() 或 SEQUENCE() 公式转换为 matrix/array.

时碰壁了

下面的公式生成一个数组的上限和下限,如果没有平局或单个位置,尽管单个位置会重复。

=ARRAYFORMULA(IF(COUNTIF(E:E,E4:E)=1,E4:E,{E4:E,E4:E+COUNTIF(E:E,E4:E)-1}))

我假设如果我能让 VLOOKUP({#:#}) 正确填充,我就会到达我需要去的地方。 从这里开始,我对自己的能力充满信心,可以为实际点值包装一个 VLOOKUP(),一个 MMULT() 对这些行求和以获得总数,然后进行简单除法以生成正确的点值。

传播sheet:https://docs.google.com/spreadsheets/d/1lpNewR3p4i7ZHmlFGLlG1tLuxgO-6onSeH8mWTeclBw/edit?usp=sharing 目前,我的工作区在右边。原始公式在 F4 中,我的测试代码在 G 列而不是 E 列上工作。

因此,对于 1,1,3,3,3,6,7,8 的样本放置和 1000、850,738,663,633,603,573,550 的样本点值,我预计两个并列第一的竞争对手的输出为 925,678并列第三名,第六名603分,第七名573分,第八名550分

非常感谢任何帮助!

=ARRAYFORMULA(IFERROR(IFERROR(VLOOKUP(G4:G, QUERY({INDIRECT("G4:G"&counta(A4:A)+3), 
 VLOOKUP(ROW(INDIRECT("A1:A"&COUNTA(A4:A))), SeriesPoints, 2, 0)}, 
 "select Col1,sum(Col2) group by Col1 label sum(Col2)''", 0), 2, 0))/
 IFERROR(VLOOKUP(G4:G, QUERY(G4:G, 
 "select G,count(G) where G is not NULL group by G label count(G)''", 0), 2, 0))))