我有一个工作表来应用查询函数,以逐行获取相应的搜索数据。但是我需要应用ArrayFormula来自动化这个搜索过程。我想知道我该怎么做。
预期结果
检查短语结果1结果2结果3结果4苹果冰苹果果酱苹果/糖苹果/甜苹果玫瑰苹果/水苹果醋栗/印度浆果/黑麦草
曼芒果芒果
妈妈
水果、龙果、蛋果、西番莲果、黑沙棘/巧克力布丁果j、菠萝、枣、詹尼波波
nake Snake水果/Salak
梅花甜瓜蜜瓜枸杞果鼠瓜
当前
检查短语结果1结果2结果3结果4苹果冰苹果
浆果苹果冰苹果
人类苹果冰苹果
妈妈苹果冰苹果
水果苹果冰苹果
苹果冰苹果
nake苹果冰苹果
我苹果冰苹果
我目前实现的是使用以下方法实现的单行:
=IF(LEN(F2:F)=0, IFERROR(1/0), IF(LEN(F2:F)>0, Query(TRANSPOSE(QUERY(Fruits!B:B, "select B where B contains '" & F2:F & "'")),"select * limit 12")))
我该怎么做。请告诉我。我把我的文件链接附在这里。My Google Sheet file
发布于 2022-11-24 11:01:22
用途:
=ARRAY_CONSTRAIN(LAMBDA(a, b, BYROW(a, LAMBDA(x,
TRANSPOSE(IFNA(FILTER(b, SEARCH(IF(x="", "×", x), b)))))))
(F2:INDEX(F:F, MAX(ROW(F:F)*(F:F<>""))), Fruits!B2:B), 9^9, 12)
发布于 2022-11-24 03:10:39
=LAMBDA(PHRASES,FRUITS,
BYROW(PHRASES,LAMBDA(FRUIT,
TRANSPOSE(FILTER(FRUITS,REGEXMATCH(FRUITS,FRUIT)))
))
)(QUERY({Current!F2:F},"WHERE Col1 IS NOT NULL"),QUERY({Fruits!B:B},"WHERE Col1 IS NOT NULL"))
将此公式放入G2中,结果应该与此图像相同。
我们在这里做的是..。
<代码>H 111使用筛选器过滤数组水果,H 212H 113
使用REGEXMATCH在第5步中设置过滤函数的条件,这对于字符串匹配来说是正确的,
如果需要,还可以用另一个查询函数替换筛选器,在这种情况下,输出应该是相同的。
=LAMBDA(PHRASES,FRUITS,
BYROW(PHRASES,LAMBDA(FRUIT,
TRANSPOSE(QUERY(FRUITS,"WHERE Col1 CONTAINS '"&FRUIT&"'"))
))
)(QUERY({Current!F2:F},"WHERE Col1 IS NOT NULL"),QUERY({Fruits!B:B},"WHERE Col1 IS NOT NULL"))
根据您在评论中的请求,这是更新的代码:
为了使其不区分大小写,在转置查询中将ARRAY_CONSTRAIN(). ()应用于Col1和Col1,当该行上没有输出时,
=LAMBDA(NOTNULL,LAMBDA(PHRASES,FRUITS,
BYROW(PHRASES,LAMBDA(PHRASE,
ARRAY_CONSTRAIN(
TRANSPOSE(IFNA(
QUERY(FRUITS,"WHERE UPPER(Col1) CONTAINS '"&UPPER(PHRASE)&"'"),
"")),
1,12)
))
)(QUERY({Current!F2:F},NOTNULL),QUERY({Fruits!B:B},NOTNULL)))("WHERE Col1 IS NOT NULL")
如果没有找到匹配项,则代码将留下空行,这是注释* Show blank if no valid return. (instead of #N/A)
中所需的,
你说When there is no phrase match, that row skipped
是什么意思
在我的测试环境下是不会的。
但是,如果您的意思是,当您将“check短语”列的某些部分保留为空时,它确实会破坏计算,因为从来没有提到过这种情况,检查短语列中可能有空白,所以我根本没有处理它。
如果是这样的话,你应该总是把这样的条件包含在你刚开始提供的样本数据中,否则这是另一个问题,也许最好是在你自己解决这个问题之后,再提出一个问题来问这个问题。
无论如何,如果您需要处理Check短语列中的空白,这是一个快速的解决方案:
=LAMBDA(NOTNULL,LAMBDA(PHRASES,FRUITS,
BYROW(PHRASES,LAMBDA(PHRASE,
ARRAY_CONSTRAIN(TRANSPOSE(IFNA(IF(PHRASE="","",QUERY(FRUITS,"WHERE UPPER(Col1) CONTAINS '"&UPPER(PHRASE)&"'")),"")),1,12)
))
)({Current!F2:F},QUERY({Fruits!B:B},NOTNULL)))("WHERE Col1 IS NOT NULL")
当“Check短语”列中有空白时,输出结果向上移动的原因是,正如我所说的,我使用查询来消除2源数据的额外空白,这有助于加快速度,但是如果数组值之间存在空白,它们也将被删除,从而导致引用数组被缩短。
要处理这个问题,最简单的slove不是移除空白,而是将它们留在那里,在IFNA()中,无论何时遇到空话,都可以使用IF()跳过它,而不做任何操作,这样会留下空白行。
https://stackoverflow.com/questions/74554798
复制相似问题