Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.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
Google sheets 将公式转换为带总和和索引的数组公式问题_Google Sheets_Google Sheets Formula_Array Formulas_Google Sheets Query_Gs Vlookup - Fatal编程技术网

Google sheets 将公式转换为带总和和索引的数组公式问题

Google sheets 将公式转换为带总和和索引的数组公式问题,google-sheets,google-sheets-formula,array-formulas,google-sheets-query,gs-vlookup,Google Sheets,Google Sheets Formula,Array Formulas,Google Sheets Query,Gs Vlookup,我有一个我正在进行的比赛的计分表。参赛者的位置/排名将根据相应的数值图表转换为整个系列的分数。对于平局,所有平局位置所覆盖的积分之和在平局的参赛者之间平均分配(即第三名的双向平局;如果第三名通常得到10分,第四名通常得到8分,则这些参赛者将获得(10+8)/2分(2分为平局的参赛者),因此他们每人获得9分)。 我有一个精确计算的公式: =IFERROR(IF(ISBLANK($A4:$A),,SUM(INDEX(SeriesPoints, E4:E):INDEX(SeriesPoints, MI

我有一个我正在进行的比赛的计分表。参赛者的位置/排名将根据相应的数值图表转换为整个系列的分数。对于平局,所有平局位置所覆盖的积分之和在平局的参赛者之间平均分配(即第三名的双向平局;如果第三名通常得到10分,第四名通常得到8分,则这些参赛者将获得(10+8)/2分(2分为平局的参赛者),因此他们每人获得9分)。 我有一个精确计算的公式:

=IFERROR(IF(ISBLANK($A4:$A),,SUM(INDEX(SeriesPoints, E4:E):INDEX(SeriesPoints, MIN(E4:E + COUNTIF(E$4:E, E4:E) - 1, ROWS(SeriesPoints)))) / COUNTIF(E$4:E, E4:E), 0))
其中“SeriesPoints”是一个2列数组;第1列是位置/等级(1:125),第2列是其对应的点值。“E”列是竞争对手在比赛中的排名

我无法将此公式转换为ARRAYFORMULA(),因此我可以避免将其拖到整个工作表中(整个系列中可能有1000多个竞争对手)。 我对MMULT()略知一二,所以我知道这是一个很好的方法来切换SUM(),然而,我还不能创建一个要求和的值的矩阵。 INDEX():INDEX()不适用于ARRAYFORMULA(),因此我尝试切换到VLOOKUP()。通过VLOOKUP(),我能够生成平局值范围的起始值和结束值,但不能生成完整列表。例如,如果第四节有一个三向平局,我可以为第四节和第六节生成相应的点(平局的边界)。 为了列出4:6中的数字,我遇到了一个难题,将简单的ROW()或SEQUENCE()公式转换为矩阵/数组

下面的公式将生成一个由tie的上下界组成的数组,如果没有tie,则生成单个位置,尽管单个位置会重复

=ARRAYFORMULA(IF(COUNTIF(E$4:E,E4:E)=1,E4:E,{E4:E,E4:E+COUNTIF(E$4:E,E4:E)-1}))
我假设如果我能让VLOOKUP({#::})正确填充,我会在我需要的地方。 从这里开始,我对自己的能力充满信心,可以用一个VLOOKUP()表示实际的点值,用一个MMULT()表示总计,然后用一个简单的除法生成正确的点值

电子表格: 目前,我的工作区位于右侧。原始公式在F4中,我的测试代码在G列而不是E列上工作

因此,对于1,1,3,3,3,6,7,8的样本位置和1000,85073866633603573550的样本点值,我预计两个并列第一名的竞争对手的输出为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))))

不确定你那半张空纸上到底发生了什么。。。您能在工作表中添加所需输出的示例吗?@player0所需输出已添加,一些空列已删除。这张表是原件的复制品,用来隐藏一些个人数据,很抱歉有点凌乱。如果参赛者没有按位置/等级排序,这张表似乎不起作用。有没有一个公式可以解决这个问题,我不想重新格式化竞争对手添加到工作表中的方式。@JoshLowy
=ARRAYFORMULA(IFERROR(IFERROR)(VLOOKUP(G4:G),QUERY({SORT(INDIRECT(“G4:G”)和counta(A4:a)+3)),VLOOKUP(ROW(INDIRECT(“A1:a”和counta(A4:a)),SeriesPoints,2,0)},“选择Col1,sum(Col2)按Col1标签sum(Col2)”分组),0),2,0))/IFERROR(VLOOKUP(G4:G,QUERY(SORT(G4:G),“选择Col1,count(Col1),其中Col1不为空,按Col1标签计数(Col1)分组”(Col1,0),2,0)))
工作起来很有魅力!非常感谢@player0!!