用于重建多列 table 到 Col1(键)、Col2(所有其他列的值)的 QUERY 内范围问题
Problem with range inside QUERY for rebuilding multicolumn table to Col1(key),Col2(values from all other columns)
我想将 table 的 Col1(键)、Col2、Col3、Col4、Col5 重建为 table 的 Col1(键)和 Col2(包括列中的所有符合值2,3,4,5...),请检查示例:
https://docs.google.com/spreadsheets/d/1je3uc1DHitzzsFK6Xag_ld531p7ozeheO4PwpCfZjQA
如果我在查询中使用以下纯文本作为范围:
=QUERY({A2:A7\B2:B7;A2:A7\C2:C7;A2:A7\D2:D7;A2:A7\E2:E7},"Select * where Col2 >0")
效果很好。但是我不能使该范围在查询中是动态的,我试图将范围(基于公式甚至作为文本)放在某个单元格中,然后按如下方式提取它
=QUERY(A1,"Select * where Col >0")
或
=QUERY({indirect(A1)},"Select * where Col2 >0")
但是没用。
您可以使用此公式,您只需更改一个范围,以防出现更多列:
=SORT(SPLIT(QUERY(FLATTEN(IF(B3:E = "",, A3:A & "♥" & B3:E)), "WHERE Col1 IS NOT NULL"), "♥"))
或者您可以在某些单元格中放置 A3:A
和 B3:E
范围作为参数并使用 INDIRECT
您需要的是:
=SORT(SPLIT(QUERY(FLATTEN(IF(INDIRECT(N4) = "",, INDIRECT(N3) & "♥" & INDIRECT(N4))), "WHERE Col1 IS NOT NULL"), "♥"))
当原始数据集可能会扩展时,我总是建议将原始数据集单独保留在 sheet 中。现在,让我们假设您在 'Sample' sheet.
中只有 现有的原始数据集
在 new 空白 sheet 中,放置此公式:
=ArrayFormula(QUERY(SPLIT(FLATTEN(FILTER(Sample!A3:A,Sample!A3:A<>"")&"|"&FILTER(FILTER(INDIRECT("Sample!B3:"&ROWS(Sample!A:A)),Sample!A3:A<>""),Sample!B2:2<>"")),"|"),"Select * WHERE Col2 Is Not Null",0))
这个公式类似于@kishkin 提供的。但是,FILTER
包含项会自动扩展以包含原始数据的所有部分,其中 A 列中有内容并且 header 中添加了 B3:B。也就是说,如果按照我所描述的那样设置,此公式需要零维护。
我想将 table 的 Col1(键)、Col2、Col3、Col4、Col5 重建为 table 的 Col1(键)和 Col2(包括列中的所有符合值2,3,4,5...),请检查示例: https://docs.google.com/spreadsheets/d/1je3uc1DHitzzsFK6Xag_ld531p7ozeheO4PwpCfZjQA
如果我在查询中使用以下纯文本作为范围:
=QUERY({A2:A7\B2:B7;A2:A7\C2:C7;A2:A7\D2:D7;A2:A7\E2:E7},"Select * where Col2 >0")
效果很好。但是我不能使该范围在查询中是动态的,我试图将范围(基于公式甚至作为文本)放在某个单元格中,然后按如下方式提取它
=QUERY(A1,"Select * where Col >0")
或
=QUERY({indirect(A1)},"Select * where Col2 >0")
但是没用。
您可以使用此公式,您只需更改一个范围,以防出现更多列:
=SORT(SPLIT(QUERY(FLATTEN(IF(B3:E = "",, A3:A & "♥" & B3:E)), "WHERE Col1 IS NOT NULL"), "♥"))
或者您可以在某些单元格中放置 A3:A
和 B3:E
范围作为参数并使用 INDIRECT
您需要的是:
=SORT(SPLIT(QUERY(FLATTEN(IF(INDIRECT(N4) = "",, INDIRECT(N3) & "♥" & INDIRECT(N4))), "WHERE Col1 IS NOT NULL"), "♥"))
当原始数据集可能会扩展时,我总是建议将原始数据集单独保留在 sheet 中。现在,让我们假设您在 'Sample' sheet.
中只有 现有的原始数据集在 new 空白 sheet 中,放置此公式:
=ArrayFormula(QUERY(SPLIT(FLATTEN(FILTER(Sample!A3:A,Sample!A3:A<>"")&"|"&FILTER(FILTER(INDIRECT("Sample!B3:"&ROWS(Sample!A:A)),Sample!A3:A<>""),Sample!B2:2<>"")),"|"),"Select * WHERE Col2 Is Not Null",0))
这个公式类似于@kishkin 提供的。但是,FILTER
包含项会自动扩展以包含原始数据的所有部分,其中 A 列中有内容并且 header 中添加了 B3:B。也就是说,如果按照我所描述的那样设置,此公式需要零维护。