【问题标题】:Dynamic query formula nested inside an array嵌套在数组中的动态查询公式
【发布时间】:2021-03-23 23:42:48
【问题描述】:

我在 Google 表格中有一个查询公式,它会根据我在此处看到的 Google 表格中的其他数据列进行更新=QUERY('Deals List - URL Split'!A:DZ, "select A, C where C contains 'http'",)

所以它可能会添加QUERY('Deals List - URL Split'!A:DZ, "select A, E where E contains 'http'",)然后它最终会变成下面的,依此类推。

=QUERY('Deals List - URL Split'!A:DZ, "select A, C where C contains 'http'",);QUERY('Deals List - URL Split'!A:DZ, "select A, E where E contains 'http'",) 

我想要做的是让单元格“列表”中的结果查询公式!A1 as QUERY('Deals List - URL Split'!A:DZ, "select A, C where C contains 'http'",);QUERY('Deals List - URL Split'!A:DZ, "select A, E where E contains 'http'",) 在数组公式中用作参考,因此我不必每次更新公式添加了新的查询公式。

静态查询公式为

=SORT(ARRAYFORMULA({QUERY('Deals List - URL Split'!A:DZ, "select A, C where C contains 'http'",);QUERY('Deals List - URL Split'!A:DZ, "select A, E where E contains 'http'",)}),1,TRUE,2,TRUE)

实际上,获得动态公式的公式如下所示,但我总是遇到错误,只得到上面的文字静态公式。

=SORT(ARRAYFORMULA({'List'!A1}),1,TRUE,2,TRUE)

【问题讨论】:

  • 分享您的工作表副本
  • 根据 player0 的要求,请使用本指南分享一张表格:support.google.com/docs/thread/3808684?hl=en 如果我们可以看到数据结构和示例数据以及其他逻辑,那么处理任何表格问题几乎总是更容易你的工作表。
  • 但是,如果我理解您的问题,您想搜索可变数量的列(或者只是 C 和 E?)以查找文本“http”并从 A 列返回所有匹配的条目。是否正确?
  • @kirkg13 基本上在我的工作簿上面的工作表“5 QUERY FORMULA”是动态更新的,并且查询公式返回到该工作表上的红色单元格。然后,该查询公式位于数组中“6 项和 URL”上的红色单元格中。由于公式会根据导入工作簿的内容自动更新,因此我正在尝试使其自动从“5 QUERY FORMULA”红色单元格中提取查询公式,并将其放入数组之间的“6 项和 URL”红色单元格中。我希望这能让它更清楚。

标签: google-sheets formula google-sheets-formula array-formulas


【解决方案1】:

我想我有一个(或两个)答案给你。看了你的床单后,我不得不说我确信你的床单可以有一个更简单的设计,这会简化一切。无论如何,我已经建立了一个公式,仅使用工作表“2 URL SPLIT”上的数据!以及来自“4 URL FILTER”的所需列!A1:1。请参阅我的示例标签 GK-6 项目和 URL,已添加到您的工作表中。

公式,简化为它的基本形式,是:

={
IFERROR({'2 URL SPLIT'!$A$2:$A, INDIRECT(INDEX(
  {ARRAYFORMULA(IFERROR("'2 URL SPLIT'!" 
   & TRANSPOSE('4 URL FILTER'!1:1) 
   & TRANSPOSE(SPLIT(
      {"2:" 
       & TEXTJOIN("~2:",1,TRANSPOSE('4 URL FILTER'!1:1))},"~",0,0)) 
       & ROWS('2 URL SPLIT'!A:A)))},1,0))},{"",""})
}

公式不是真正的动态,但它会忽略空白列。所以我使用的作弊方法是扩展公式的容量以包含额外的空白列,如果它们被填充数据,则将使用数据。我已将其设置为包含 50 列数据,您当前使用的是 39 列,但您可以将其扩展为处理大约 200 列,然后再达到单元格的 50,000 个字符限制。

如上所示的公式处理一列。对于处理 50 列的那个,如在我的示例表中,我只是复制内部公式,外部大括号“{....}”内的所有内容并增加其中的数字。你只需要这样做一次,或者从我的工作表中复制我的。如果/当您的数据列扩展时,您不需要更新。

如果您认为此公式适合您,我很乐意添加更多解释。但该公式的基础是动态构建要查询的单元格范围。公式内部的结果如下所示。请注意,每个范围中的 2 是硬编码的,如果您的结构发生变化,可以更改,但范围的限制是根据您的数据计算的。

公式的其余部分使用此“表”中的索引,递增 1 以选择每个连续的数据范围,这会添加要查询的新数据列。这些数据范围从“2 URL SPLIT!”包括列 A 和一个后续数据列,如 '4 URL FILTER'!A1:A 中所指定,并通过使用“;”堆叠在另一个之上分隔符。

然后针对这个垂直的两列堆栈运行查询,选择第 2 列包含“http”的所有行。

最终结果如下图:

【讨论】:

    猜你喜欢
    • 2016-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-12
    • 1970-01-01
    • 2018-06-13
    • 2022-01-12
    相关资源
    最近更新 更多