【问题标题】:Use Google Sheets ARRAYFORMULA to create QUERY input使用 Google 表格 ARRAYFORMULA 创建 QUERY 输入
【发布时间】:2021-11-28 13:02:09
【问题描述】:

我有一个QUERY,它可以从各种不同的工作表中查找值,这是它的输入:

=QUERY( {
        IFNA( QUERY({'Week 1'!A2:Z133;'Week 2'!A2:Z133;'Week 3'!A2:Z133;'Week 4'!A2:Z133;'Week 5'!A2:Z133},"select Col26, Col1, Col2,  Col4,  Col5  where Col1 IS NOT NULL and Col4  IS NOT NULL", 0), { "","","","","" } );
        IFNA( QUERY({'Week 1'!A2:Z133;'Week 2'!A2:Z133;'Week 3'!A2:Z133;'Week 4'!A2:Z133;'Week 5'!A2:Z133},"select Col26, Col1, Col6,  Col8,  Col9  where Col1 IS NOT NULL and Col8  IS NOT NULL", 0), { "","","","","" } );
        IFNA( QUERY({'Week 1'!A2:Z133;'Week 2'!A2:Z133;'Week 3'!A2:Z133;'Week 4'!A2:Z133;'Week 5'!A2:Z133},"select Col26, Col1, Col10, Col12, Col13 where Col1 IS NOT NULL and Col12 IS NOT NULL", 0), { "","","","","" } );
        IFNA( QUERY({'Week 1'!A2:Z133;'Week 2'!A2:Z133;'Week 3'!A2:Z133;'Week 4'!A2:Z133;'Week 5'!A2:Z133},"select Col26, Col1, Col14, Col16, Col17 where Col1 IS NOT NULL and Col16 IS NOT NULL", 0), { "","","","","" } );
        IFNA( QUERY({'Week 1'!A2:Z133;'Week 2'!A2:Z133;'Week 3'!A2:Z133;'Week 4'!A2:Z133;'Week 5'!A2:Z133},"select Col26, Col1, Col18, Col20, Col21 where Col1 IS NOT NULL and Col20 IS NOT NULL", 0), { "","","","","" } )
}, "SELECT * WHERE Col1 IS NOT NULL ORDER BY Col1")

{} 变得重复且冗长,每次我再添加一周时都需要手动更新。

最近我发现我可以使用以下公式生成周工作表名称列表:

=ARRAYFORMULA(
    "Week " & 
    {1;2;3;4;5;6;7;8;9;10;11;12;13;14;15;16;17;18;19;20;21;22;23;24;25;26;27;28;29;30}
    & "!A2:Z133"
)

然后在另一列中仅列出实际存在的那些工作表:

=IF(
        ISERROR(CELL("address",INDIRECT($U2))),
        "",
        $U2
)

现在我有一列包含Week1!A2:Z133Week2!A2:Z133 等值。如何使用此列自动创建QUERY 公式源?

使用这个公式可以得到第一个引用的范围,但没有列中的后续范围:

={ARRAYFORMULA(INDIRECT(AA:AA) )}

【问题讨论】:

  • 我可以使用{INDIRECT( ARRAYFORMULA( "Week " & { 1;2;3} & "!A2:Z133" ) )},但如果第 3 周不存在,它将失败,如果我可以轻松过滤掉无效单元格引用的项目,我想我会有一个解决方案可以避免需要任何列
  • 这是一个非常常见的问题,常见的答案是您不应该在不同的选项卡上跟踪每周数据,而应该在一个选项卡上,作为一个额外的列来记录从哪一周开始正在输入数据。
  • 我知道,但这不是一个选项(这个公式将它编译成一个标签,以便我可以规范化事情)。我有一个单独的工作表,其中包含无休止的数据序列,这些数据确实遵循推荐的模式,但我不需要关于该工作表的帮助,它是每周工作表。
  • 如果我使用我的引用列并尝试使用={ARRAYFORMULA(INDIRECT( 显示它们,则只显示第一个引用结果
  • INDIRECT() 在数组公式中根本不起作用

标签: google-sheets google-sheets-formula


【解决方案1】:

this sheet 中的此处是一个基本脚本,用于组合以单词“Week”开头的选项卡。

function tabCombo(){
    var ss = SpreadsheetApp.getActive();

    //Filters sheets to just the ones that start with "Week"
    var sheets = ss.getSheets().filter(function (e){return e.getName().slice(0,4)=='Week'});

    //combines all tab values into one array and filters out the rows with a certain value in the first column
    var combo = sheets.map(e=>e.getDataRange().getValues()).flat().filter(e=>e[0]!='Header1');

    //writes that new value to a 'Master' tab.
    ss.getRange('Master!A2').offset(0,0,combo.length,combo[0].length).setValues(combo);
}

注意“周”这个词,它决定要抓取哪些标签。

记下数字 4(即“周”有多少个字母)

注意范围“Master!A2”,它是组合数据的左上角。

注意术语“Header1”,它是组合数组如何从所有选项卡中过滤掉标题行的方式。

【讨论】:

  • 我希望不需要求助于 JS,但看起来这是唯一的选择,我会测试一下
猜你喜欢
  • 2021-02-27
  • 2021-08-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-08-04
  • 2023-03-07
  • 1970-01-01
相关资源
最近更新 更多