为了MWE,我有一个$ AP $ 4的数组:$ BO $ 20,每个单元格中有一个字符串。每个单元格中的数据是字母数字代码,例如1,1a,2b,3c等。
第22行,从AQ列开始,包含一个字符串,该字符串与上面命名的数组中的一个或多个字符串相匹配。目标:使用AQ22中的每个字符串:AO22,创建一个公式,提取数组$ 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))
以下是使用此信息测试想法的toy sheet。请注意公式将开始的单元格的注释。
答案 0 :(得分:1)
在Excel中,您可以在没有输入CSE
公式的情况下执行此操作,但我不知道表格中是否有AGGREGATE
功能:
=IFERROR(AGGREGATE(15,6,1/((AQ$22=arr)*(LEN(arr)>0))*ROW(arr),ROWS($1:1)),"")
对于输入数组的数组:
=IFERROR(SMALL(IF((AQ$22=arr)*(LEN(arr)>0),ROW(arr),""),ROWS($1:1)),"")
对于这些公式中的任何一个,输入AQ24,然后填写,直到你得到空白,然后穿过。当你填满时,没有任何“目标行”可以被隐藏(否则公式的结果将被隐藏)。
arr
指的是$AP$4:$BO$20
答案 1 :(得分:1)
不确定我是否正确理解了所需的结果,但
= IfError( Filter( Row($AL$4:$AL$16), RegExMatch( $AL$4:$AL$16, "\b" & AQ22 & "\b" ) ), "")
导致7
和9
位于其下方的单独单元格中。 \b
是word boundary,可在字母数字和非字母数字字符之间进行匹配。如果您希望将结果放在一个单元格中,可以加入它们:
=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")), "")
答案 2 :(得分:1)
虽然这是一个非常具体的应用程序来回答这个问题,但为了知识库,我想展示我是如何处理多个匹配值的实例的。可能有更好的方法,但这是一种方式。
为了给出这个背景,假设LIST_CELL
是一个问题编号列表
(在作为标题行输入,在与某些标准相对应的测试中调用范围QUESTIONS
),目标是仅平均与列表所在的标准对应的问题,并为每个学生。使用
=iferror(join(",",ArrayFormula(match(split(LIST_CELL,","),QUESTIONS,FALSE))),"")
split函数在逗号上拆分手工输入的问题列表,match函数在QUESTIONS
中返回该特定问题的列号,join函数将数据重新连接在一起。 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
。通过ArrayFormula
hlookup
抓取相应QUESTIONS
列中同一行的每个值 - 在上下文中,它会获取与标准匹配的每个问题的得分。
最后,平均值是不言自明的,并且显然将数组作为输入。
组合这两个函数允许在数组公式中使用间接单元格引用,并解决了很多问题,“我如何在计算中包含多个匹配”问题。至少在这个特定的背景下。