Google 按多个变量筛选工作表查询

Google Sheets Query Filter by Multiple Variables

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

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

=if(E1="",QUERY(IMPORTRANGE("Spreadsheetidabcd", "RawData!A:Z"), "Select Col1,Col12,Col2,Col10,Col3 where (Col11=' ')",1),QUERY(IMPORTRANGE("Spreadsheetidabcd", "RawData!A:Z"), "Select 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&"'or Col4 contains '"&$F$1&"'or Lower(Col5) contains Lower('" &$F$1&"')"))

你可以试试这个,尽管如果任何列包含 F1G1[= 的值,这 returns 行52=](我假设这就是您的搜索框的用途,用于查找包含搜索词的行)。

公式:

=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&"') or lower(Col1) contains lower('"&$G&"') or Col1 contains 'Timestamp'"), ",")))

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

  • 当我们将它们合并为 1 列时,它会附加一个标记行末尾的列。
  • 使用 , 作为分隔符将所有列合并为 1(每列 , 标记,每行 ; 标记)
  • 然后我们将它们按 ,;, 拆分以分隔每一行(每行包含 textjoined 结果)
  • 之后,我们使用查询过滤数据,其中一行应包含 F1G1 的值(包括 时间戳 包括 header).
  • 过滤后的数据将 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:, not(isblank($F:))))&"') or Col1 contains 'Timestamp'"), ",")))

输出: