我试图建立一个公式,该公式可以 SPILL 返回除第一列(标题)之外的一列中的所有唯一文本行。
我找到了解决方案https://superuser.com/a/1259946/1137272它可以工作并使用 INDEX 函数给我我需要的东西——这很棒,我已经成功地将它从描述的 SUM() 应用程序翻译成我的带有 UNIQUE() 的应用程序,但我无法理解它是如何实现结果的。
提供的解决方案是
=SUM(A2:INDEX(A:A, ROWS(A:A)))
在我的例子中,这意味着功能更复杂:
=UNIQUE(FILTER('SheetName'!D2:INDEX('SheetName'!D:D,ROWS('SheetName'!D:D)),ISTEXT('SheetName'!D2:INDEX('SheetName'!D:D,ROWS('SheetName'!D:D)))))
我遵循 ROWS(A:A) 给出最后一行的行号(在我的情况下为 1048576)。按 N 索引到数组中将返回数组中的第 N 个值,因此我假设 INDEX 将返回 A1048576 的值 - 在我的情况下为空单元格,并且 SUM 公式将扩展为 SUM(A2:[blank]) 或 SUM(A2:0) 并因此给出错误。
然而,事实并非如此 - 显然 INDEX 函数还有一种“引用”形式,并且 INDEX 以某种方式知道返回单元格引用而不是单元格的值,但我不明白这是如何触发的。在我看来,这两种形式的语法完全相同:
INDEX(array/reference, row_num, [optional_arguments])
在数组和引用看起来相同(A:A)的情况下,它如何知道何时返回值以及何时返回单元格引用?
答案1
在数组和引用看起来相同(A:A)的情况下,它如何知道何时返回值以及何时返回单元格引用?
就像声明的那样这里:
值得注意的是,INDEX 函数返回的是一个引用结果。
OP 提到的公式是=SUM(A2:INDEX(A:A, ROWS(A:A)))
。让我们仅从 INDEX 部分 ( INDEX(A:A, ROWS(A:A))
) 开始。如果这部分是公式的唯一部分,INDEX 将引用 A1048576 并返回其值。您可以将公式的这一部分视为类似于=A1048576
。
在整个公式 ( 的情况下SUM(A2:INDEX(A:A, ROWS(A:A)))
,INDEX 与 SUM 函数结合在一起。因此,如前所述,INDEX 函数返回一个引用,当INDEX(A:A, ROWS(A:A))
由 Excel 处理时,该引用为 A1048576。Excel 在 SUM 函数中使用此引用。因此,您将得到SUM(A2:A1048576)
。
区分数组和引用形式的好的经验法则是,如果使用 INDEX 函数:
- 另一个函数如上例所示,那么它就是参考形式。
- 多个范围作为其第一个参数,那么它就是参考形式。
- 只有一个范围作为其第一个参数,那么它就是数组形式。