将一系列单元格作为变量值传递给单个查询?

我有两张纸,sheet1和sheet2。 sheet2的E列包含数量,K列包含文本字符串(即键)。 sheet2中的多行包含相同的文本字符串,但数量不同。

在sheet1列B上,我有一个文本字符串列表。对于每个文本字符串,我要查询sheet2并汇总其E列中的所有数量,其中K列中的值与文本字符串匹配。

当前,我需要执行x个查询,其中x是sheet1的B列中文本字符串的数量。

sheet1中的每个当前查询如下:

使用sheet1的B1中的文本字符串在sheet1单元格A1中查询

 =SUM(
  QUERY(
    'sheet2'!$A$2:INDIRECT(concatENATE("'sheet2'!O",'sheet2'!P1)),"select  E where K="""&B1&""""
  ))

在工作表1的B2中使用文本字符串在A2中进行查询

 =SUM(
  QUERY(
    'sheet2'!$A$2:INDIRECT(concatENATE("'sheet2'!O","select  E where K="""&B2&""""
  ))

以此类推...

sheet2的单元格P1包含sheet2中非零行的数量

这很好用,但是问题是sheet2包含200,000行。 我大约有100个文本字符串要搜索,因此我目前正在使用100个查询,每个查询查找20万行x 15列= 300万个单元格

可以理解,工作表更新需要很长时间,因为在sheet2更新时所有这些查询都会重新运行。

是否可以将所有这些查询合并为一个?换句话说,告诉公式“我希望您使用范围B1:B100中的每个单元格作为查询中K = x的变量x来执行求和查询,并将结果分别放在单元格A1:A100中” / p>

wsg19870213 回答:将一系列单元格作为变量值传递给单个查询?

在某些情况下,将其放入数组可能会提高性能:

={SUM(QUERY('sheet2'!$A$2:INDIRECT(CONCATENATE("'sheet2'!O",'sheet2'!P1)),"select E where K="""&B1&""""));
  SUM(QUERY('sheet2'!$A$2:INDIRECT(CONCATENATE("'sheet2'!O","select E where K="""&B2&""""))}

但是,应避免使用过多的QUERY函数以防止停止。最佳性能属于DGET,备选方案包括FILTERSUMIF

,

我希望这是您的单个查询,必须将B8更改为sheet1的最后一行

=arrayformula(vlookup({Sheet1!B1:B8},QUERY(Sheet2!A1:K,"select K,sum(E) where K<>0 group by K "),2,false))
本文链接:https://www.f2er.com/3134201.html

大家都在问