来自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" ) ), "")
结果在7
和9
下面的一个单独的单元格中。 \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中,您可以在没有CSE
input公式的情况下执行此操作,但是我不知道在表格中是否可以使用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
。 通过ArrayFormula
, hlookup
在适当的QUESTIONS
列中获取同一行上的每个值 – 在上下文中,它抓取与标准匹配的每个问题的得分。
最后,平均值是不言自明的,显然是以数组为input的。
这两个函数的组合允许在数组公式中使用间接单元格引用,并解决了许多问题,“我如何在计算中包含多个匹配”问题。 至less在这个特定的背景下。