来自arrayssearch的多个匹配结果

为了MWE,我在$ AP $ 4:$ BO $ 20中有一个数组,每个单元格中有一个string。 每个单元格中的数据是字母数字代码,如1,1a,2b,3c等

从AQ列开始的第22行包含与上述数组中的一个或多个string匹配的单个string。 目标:使用AQ22中的每个string:AO22,创build一个提取数组$ AP $ 4:$ BO $ 20中每个单元格的行数的公式,该数组恰好包含AQ22:AO22中的值。

不用使用数组公式就可以获得奖励。 VBA不是一个选项,因为这是Google表格,我真的更喜欢避免g-apps-script。

我尝试过使用

=INDIRECT(ADDRESS(MIN(IF(NOT(ISERROR(FIND(AQ22,$AP$4:$BO$20,1))),ROW($AP$4:$BO$20),"")),1)) 

 =IFERROR(INDEX($AP$4:$BO$20,SMALL(IF($AP$4:$BO$20=AQ22,ROW($AP$4:$BO$20)-4),ROW(A1)),2),"") 

甚至是赫赫有名

 =IF(ISERROR(INDEX($AP$4:$BO$20,SMALL(IF($AP$4:$BO$20=AQ22,ROW($AP$4:$BO$20)),ROW(1:1)),2)),"",INDEX($AP$4:$BO$20,SMALL(IF($AP$4:$BO$20=AQ22,ROW($AP$4:$BO$20)),ROW(1:1)),2)) 

这是一个玩具表 ,用这些信息来testing想法。 注意公式将从何处开始的单元格的注释。

不知道我是否理解正确的结果,但

 = IfError( Filter( Row($AL$4:$AL$16), RegExMatch( $AL$4:$AL$16, "\b" & AQ22 & "\b" ) ), "") 

结果在79下面的一个单独的单元格中。 \b是在字母数字和非字母数字字符之间匹配的字边界 。 如果你想在一个单元格的结果,你可以join他们:

 =IfError(Join(",", Filter(Row($AL$4:$AL$16), RegExMatch($AL$4:$AL$16, "\b"&AQ22&"\b"))), "") 

您也可以匹配多个值:

 =IfError(Filter(Row($AL$4:$AL$16), RegExMatch($AL$4:$AL$16, "\b(" & Join("|", AQ22:AZ22) & ")\b")), "") 

在Excel中,您可以在没有CSEinput公式的情况下执行此操作,但是我不知道在表格中是否可以使用AGGREGATE函数:

 =IFERROR(AGGREGATE(15,6,1/((AQ$22=arr)*(LEN(arr)>0))*ROW(arr),ROWS($1:1)),"") 

对于input公式的数组:

 =IFERROR(SMALL(IF((AQ$22=arr)*(LEN(arr)>0),ROW(arr),""),ROWS($1:1)),"") 

对于其中任何一个公式,inputAQ24,然后填写,直到你得到空白,并跨越。 当你填写的时候,“目标行”都不能被隐藏(否则公式的结果将被隐藏)。

arr是指$AP$4:$BO$20

虽然这是一个非常具体的应用程序来回答这个问题,为了知识库,我想展示如何处理多个匹配值的实例。 有可能有更好的方法,但这是一种方法。

为了给出这个上下文,设想LIST_CELL是一个问题编号列表(它是作为标题行input的,称为范围QUESTIONS )在与某些标准相对应的testing中,目标是仅平均相应的问题列表写在旁边的标准,以及每个学生。 运用

 =iferror(join(",",ArrayFormula(match(split(LIST_CELL,","),QUESTIONS,FALSE))),"") 

split函数将用逗号分隔手动input的问题列表,匹配函数返回QUESTIONS中特定问题的列号,连接函数将数据连接在一起。 ArrayFormula允许在数组上执行匹配,而不仅仅是第一个值。

另一个单行标题列出了每个问题已经被LIST_CELL的逗号分隔列表匹配的标准(可能超过一个标准)。 对于A:A中的学生列列表,每个标准需要平均标准旁边列出的每个问题的分数。 这是由漂亮(如果笨重)完成的:

 average(ArrayFormula(hlookup(split(vlookup(LOOKUP_VAL,SEARCH_RANGE,COL_W_LIST),","),DATA_SOURCE,row(CURRENT_CELL)))) 

从中心向外的分解:

LOOKUP_VAL是正在查找的值(具有多个匹配的值); 在示例中,这是标准。

SEARCH_RANGE是包含查找值列表(上下文中的标准)和由第一个函数生成的列号的逗号分隔列表的单元格范围。 COL_W_LIST是数组SEARCH_RANGE中的列号,其中包含从LIST_CELL匹配的行号列表。

Split将元素分开,并将它们放置在一个临时数组中, hlookup可以在每个元素上执行hlookup 。 通过ArrayFormulahlookup在适当的QUESTIONS列中获取同一行上的每个值 – 在上下文中,它抓取与标准匹配的每个问题的得分。

最后,平均值是不言自明的,显然是以数组为input的。

这两个函数的组合允许在数组公式中使用间接单元格引用,并解决了许多问题,“我如何在计算中包含多个匹配”问题。 至less在这个特定的背景下。