设置从列中第一个到最后一个填充单元格的公式范围?

Setting formula range from first to last populated cell in a column?

对于我 运行 的联赛,我们会跟踪所玩的游戏和 w/l/t 并将其计算为排名分数。选手姓名列于U列,排名得分列于固定的AD列table。然后我使用数组公式在 E 列中按排名顺序列出玩家(然后 vlookup 以根据该行的 E 中的值提取其他统计数据)。具体来说,我在 E 列中使用了这个公式:

=ARRAY_CONSTRAIN(ARRAYFORMULA(INDEX($U:$U3,MATCH(LARGE($AD:$AD3-ROW($AD:$AD3)/COUNT($AD:$AD3),ROW(E72)-ROW(E)+1),$AD:$AD3-ROW($AD:$AD3)/COUNT($AD:$AD3),0))), 1, 1)

我需要能够将玩家添加到 U:AD 中的 table 而不必每次都编辑公式,即从 $U4:$U153 和 $AD$4:$AD$153到公式中所有不同位置的 $U4:$U154 和 $AD$4:$AD$154 然后一直向下复制新公式。

有没有一种方法可以将范围定义为 $U$4:$U(最后填充的行)以及上述公式中的 AD 列?

我最终会在 Excel 和 Google 表格中使用它,所以我真的很想避免编写脚本。首先,我想为 Google Sheets 解决这个问题。

Here is a copy of the sheet我正在努力

为什么要在 U4:U153 周围使用 $ 符号,删除行的 $ 符号,这样可以在保留列的同时为您提供灵活性 fixed.As 您拖动公式,数据数组将附加新填充的单元格或者您可以使用 Ctrl+T 创建 table,它会在您不断添加数据时自动扩展。

您可以使用 INDEXCOUNTA

而不是 $U4$U153

$U4:INDEX(U4:U,COUNTA(A4:A))

COUNTA 部分将给出填充的行数并将其输入 INDEX 以给出 $U4:$U153

您分享的 Google sheet 的答案。

简单解法跳到最后

我通过在 E1 中输入一个公式来使用间接方法,计算玩家统计数据的 AD 列并添加 3 以获得最后一行。 (我打算创建完整的范围 AD4:AD?? 但公式中还有 U4:U73

=counta(AD4:AD)+3

然后我更改了您的公式,使用 indirectindirect("$AD:AD"&E) 来引用单元格 E1 中的最后一行编号以创建所需的范围。

=iferror(ARRAY_CONSTRAIN(ARRAYFORMULA(INDEX(indirect("$U:U"&E),MATCH(LARGE(indirect("$AD:AD"&E)-ROW(indirect("$AD:AD"&E))/COUNT(indirect("$AD:$AD"&E)),ROW(E4)-ROW(E)+1),indirect("$AD:$AD"&E)-ROW(indirect("$AD:$AD"&E))/COUNT(indirect("$AD:AD"&E)),0))), 1, 1),"")

我偶然发现,如果您从公式中删除 ARRAY_CONSTRAIN 并将 U4:U73 更改为 U4:AC73 然后该公式将在您当前拥有 vlookups 的公式右侧填充分数.我在 E4 中放了一个这样的例子,但请注意,如果您想填写公式,则必须删除 vlookup 公式,否则它将显示 REF

我还添加了 iferror 以便可以将公式复制到与 A 列中 "open slots" 末尾相同的行而不会显示错误。

此外,我已经到了这一点,并且认为既然您使用的是 Google 表格,那么更好的方法可能是使用 QUERY函数来提取数据并使用 ORDER BY 对单元格 E4.

中的单个公式进行排序

我还没有真正使用过 QUERY 函数,但也许是时候学习了。

编辑

事实证明不需要太多学习

=QUERY(U4:AD,"SELECT U,V,W,X,Y,Z,AA,AB,AC ORDER BY AD DESC")

将上面的公式放在 E4 单元格中,然后删除下面的所有内容,并将分数移到右边,就完成了。你会注意到没有间接的,因为 Google 明白你不想要空行。

https://docs.google.com/spreadsheets/d/16IclEmKwDFdInIAZhH2vt-tLJ5pbwX06jv9xrUXwhnY/edit?usp=sharing