【问题标题】:Google Sheets Query Filter by Multiple Variables谷歌表格查询过滤器按多个变量
【发布时间】:2021-12-22 09:24:57
【问题描述】:

有没有更好的方法来写出这个公式?我的意思是它可以工作,但必须有更好的方法来做,我可以有多个搜索参数。 我正在使用搜索框,然后使用此公式拆分单元格 =if(E1="","", if(REGEXMATCH(E1,";"),SPLIT(E1,";"),E1))

https://docs.google.com/spreadsheets/d/1-ymDylwRjd0zYnu3m0uxCz8hAavnL5Sxx39YrtlWylc/edit?usp=sharing 示例表

=if(E1="",QUERY(IMPORTRANGE("Spreadsheetidabcd", "RawData!A:Z"), "选择 Col1,Col12,Col2,Col10,Col3 where (Col11='')",1) ,QUERY(IMPORTRANGE("Spreadsheetidabcd", "RawData!A:Z"), "选择 Col1,Col12,Col2,Col10,Col3 其中 Col1 包含 '"&$F$1&"' 或 Lower(Col12) 包含 Lower(' "&$F$1&"') 或 Lower(Col12) 包含 Lower('"&$G$1&"') 或 Lower(Col10) 包含 Lower('"&$F$1&"') 或 Lower(Col10)包含 Lower('"&$G$1&"') 或 Lower(Col2) 包含 Lower('"&$F$1&"') 或 Lower(Col2) 包含 Lower('"&$G$1&"') 或Col3 包含 '"&$F$1&"' 或 Col3 包含 '"&$G$1&"' 或 Col4 包含 '"&$F$1&"' 或 Lower(Col5) 包含 Lower('"&$F$1& "')"))

【问题讨论】:

  • 请记住,我们看不到您所看到的。我们不知道您的最终目标、您的工作表布局、数据、数据类型等。所以您向我们展示了一英寸的毛皮并让我们猜测动物。请分享指向您的电子表格(或其副本)的链接。
  • 我添加了指向工作表副本的链接
  • 请编辑 E1 以包含您使用的真实搜索词;请确保搜索词包含分号。您的帖子说,“......它工作......”我希望看到它使用搜索词而不是空白搜索按您的意图工作。
  • Erik Tyler 我把搜索词放在那里了。目前我已经设置好了,所以我只能做 2 个变量,但我希望它是静态的,并且按照我放入的数量做多少
  • 您目前有两个搜索词:ThrallIllidan。您的搜索返回三个订单项。然而,我在您的完整数据集中看到了与其中一个术语匹配的九个行项目。你能解释一下为什么你的退货数只有三而不是九吗?

标签: google-sheets formula


【解决方案1】:

你可以试试这个,虽然如果任何列包含 F1G1 的值,这会返回该行(我假设这就是你的搜索框for,查找包含搜索词的行)。

公式:

=if(E1="",
QUERY(IMPORTRANGE("Spreadsheetidabcd", "RawData!A:Z"), "Select Col1,Col12,Col2,Col10,Col3 where (Col11='')",1),
arrayformula(split(query({transpose(split(textjoin(",", true, QUERY(IMPORTRANGE("Spreadsheetidabcd", "RawData!A:Z"), "Select Col1, Col12, Col2, Col10, Col3, ';' label ';' ';'")), ",;,",))}, "where lower(Col1) contains lower('"&$F$1&"') or lower(Col1) contains lower('"&$G$1&"') or Col1 contains 'Timestamp'"), ",")))

基本上,公式一步一步做的是:

  • 当我们将它们组合成一列时,它会附加一列来标记行的末尾。
  • 使用,作为分隔符将所有列合并为1(,每列标记,;每行标记)
  • 然后我们将它们除以,;, 以分隔每一行(每一行包含textjoined 结果)
  • 之后,我们使用查询过滤数据,其中一行应包含 F1G1 的值(并包括 Timestamp 以包含标题)。
  • 过滤后的数据随后将split 恢复为原始形式

输出:

编辑:

  • 为了动态,我将其修改为检查 F1:1 范围。

公式:

=if(E1="",
QUERY(IMPORTRANGE("Spreadsheetidabcd", "RawData!A:Z"), "Select Col1,Col12,Col2,Col10,Col3 where (Col11='')",1),
arrayformula(split(query({transpose(split(textjoin(",", true, QUERY(IMPORTRANGE("Spreadsheetidabcd", "RawData!A:Z"), "Select Col1, Col12, Col2, Col10, Col3, ';' label ';' ';'")), ",;,",))}, "where lower(Col1) contains lower('"&join("') or lower(Col1) contains lower('", filter($F$1:$1, not(isblank($F$1:$1))))&"') or Col1 contains 'Timestamp'"), ",")))

输出:

【讨论】:

  • 完美是不是也可以让它变成静态的,这样我就可以有更多不同数量的搜索词?
  • 我认为您的意思是动态@JacobLenertz。我会更新我的答案。
  • 我现在已经更新了答案。请参阅 EDIT 部分@JacobLenertz
猜你喜欢
  • 1970-01-01
  • 2021-04-29
  • 1970-01-01
  • 1970-01-01
  • 2019-10-19
  • 2017-02-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多