用于重建多列 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:AB3: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。也就是说,如果按照我所描述的那样设置,此公式需要零维护。