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&"')"))
你可以试试这个,尽管如果任何列包含 F1 或 G1[= 的值,这 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(每列 ,
标记,每行 ;
标记)
- 然后我们将它们按
,;,
拆分以分隔每一行(每行包含 textjoin
ed 结果)
- 之后,我们使用查询过滤数据,其中一行应包含 F1 和 G1 的值(包括 时间戳 包括 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'"), ",")))
输出:
这个公式有没有更好的写法?我的意思是它可以工作,但必须有更好的方法来实现,我可以有多个搜索参数。 我正在使用搜索框,然后使用此公式拆分单元格 =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&"')"))
你可以试试这个,尽管如果任何列包含 F1 或 G1[= 的值,这 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(每列,
标记,每行;
标记) - 然后我们将它们按
,;,
拆分以分隔每一行(每行包含textjoin
ed 结果) - 之后,我们使用查询过滤数据,其中一行应包含 F1 和 G1 的值(包括 时间戳 包括 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'"), ",")))