Indexing 如何避免在电子表格=索引(FILTER(),FILTER())表达式中重复我自己?

Indexing 如何避免在电子表格=索引(FILTER(),FILTER())表达式中重复我自己?,indexing,filter,google-sheets,dry,Indexing,Filter,Google Sheets,Dry,我有一个电子表格公式,其中我在索引函数中使用了两次完全相同的过滤函数。有没有办法避免重复我自己和/或更简单的表达方式 表达式如下所示(分成多行以获得更清晰的信息): 表达式的作用是返回行中最右边的非空列的标题,只要该列是ANIM、COMP或发送到编辑的中的一列 请参阅本手册第Q列中的公式 由于FILTER函数两次都完全相同,如果我可以使用一个变量,它可以像这样重新编写: range1 = FILTER(.....); INDEX(range1, COLUMNS(range1)); =REGEX

我有一个电子表格公式,其中我在索引函数中使用了两次完全相同的过滤函数。有没有办法避免重复我自己和/或更简单的表达方式

表达式如下所示(分成多行以获得更清晰的信息):

表达式的作用是返回行中最右边的非空列的标题,只要该列是
ANIM
COMP
或发送到编辑的
中的一列

请参阅本手册第Q列中的公式

由于FILTER函数两次都完全相同,如果我可以使用一个变量,它可以像这样重新编写:

range1 = FILTER(.....); INDEX(range1, COLUMNS(range1));
=REGEXEXTRACT(JOIN("|",FILTER($A$1:$P$1, Regexmatch($A$1:$P$1,"ANIM|SENT TO EDIT|COMP"), NOT (ISBLANK(A2:P2)))),"([^|]+)$")

为了避免重复我的筛选表达式,是否有任何方法可以执行类似操作?或者类似操作?

您的想法是正确的,避免重复长的子公式的方法是将它们从公式中移出,并以某种方式调用结果。在某些情况下,可以使用对显示结果的范围的引用,但对于返回动态数组的公式,自定义函数可能是更好的选择

例如:

假设你搬走了

FILTER($A$1:$P$1, ($A$1:$P$1 = "ANIM")+($A$1:$P$1 = "COMP")+($A$1:$P$1 = "SENT TO EDIT"), 
NOT (ISBLANK(A2:P2)))
干燥!A1
(别忘了在前面加上
=

以下只是一个“mcve”。假设te干纸仅包含上述公式:

function headers(){
   var ss = SpreadsheetApp.getActiveSpreadsheet();
   var sheet = ss.getSheets().getSheeyByName('dry');
   return sheet.getDataRange().getValues();
}
将原始公式替换为以下公式:

=INDEX(headers(dry!A1:P1),COLUMNS(headers(dry!A1:P1))
注意:使用干燥!A1:P1作为headers()的参数,每次子公式的结果更改时,都会强制重新计算


另请参见:

您可以尝试以下方法:

range1 = FILTER(.....); INDEX(range1, COLUMNS(range1));
=REGEXEXTRACT(JOIN("|",FILTER($A$1:$P$1, Regexmatch($A$1:$P$1,"ANIM|SENT TO EDIT|COMP"), NOT (ISBLANK(A2:P2)))),"([^|]+)$")

使用是一种像文本一样处理数组的方法。

我希望避免使用外部函数;在这种情况下,我想我宁愿重复我自己,也不愿使用函数。:-)如果生成的数组大小始终相同,则可以避免使用自定义函数。否则,如果您不想使用自定义函数,恐怕您应该重复一下。