首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Google :在ArraryFormula中使用查询

Google :在ArraryFormula中使用查询
EN

Stack Overflow用户
提问于 2022-11-24 01:50:55
回答 2查看 62关注 0票数 1

我有一个工作表来应用查询函数,以逐行获取相应的搜索数据。但是我需要应用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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-11-24 11:01:22

用途:

代码语言:javascript
运行
复制
=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)

票数 0
EN

Stack Overflow用户

发布于 2022-11-24 03:10:39

代码语言:javascript
运行
复制
=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中,结果应该与此图像相同。

我们在这里做的是..。

  1. 使用查询消除范围当前的空格!F2:F,用LAMBDA命名数组为短语;
  2. 使用查询消除范围水果中的空白!B:B,将数组命名为LAMBDA。
  3. 使用BYROW按值处理单列数组水果值,BYROW内的
  4. LAMBDA将每一行的值命名为水果,

<代码>H 111使用筛选器过滤数组水果,H 212H 113使用REGEXMATCH在第5步中设置过滤函数的条件,这对于字符串匹配来说是正确的,

  1. 将每个过滤器的结果转换为符合您的显示格式。

如果需要,还可以用另一个查询函数替换筛选器,在这种情况下,输出应该是相同的。

代码语言:javascript
运行
复制
=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,当该行上没有输出时,

  • 显示为空白而不是#N/A,将IFNA()应用于TRANSPOSE()内部的整个查询(),

  • 限制输出数组的长度,并使用()来翘曲转置()。

代码语言:javascript
运行
复制
=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短语列中的空白,这是一个快速的解决方案:

代码语言:javascript
运行
复制
=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()跳过它,而不做任何操作,这样会留下空白行。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74554798

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档