如何从Google表格中的范围动态构建数组?

问题描述 投票:0回答:1

我正在Google表格中工作,我想使用一系列单元格,每个单元格中都有一个工作表名称,以便在每个引用工作表的行中构建一个数组。但是我希望数组保持动态,以便当我更改源范围时,数组将自行更新。

我的工作簿为here。我正在尝试为“周末和工作日”(工作表:工作日模板)构建模板工作表,可以在其中使用下拉菜单(从工作表:“列表”)选择块。然后,在每一天的节目表(Sheet:星期一节目)上,使用“ Block”表(Sheet:Morning Music Block)中的行进行填充。

我在星期三的节目(Sheet:星期三节目)上作弊,我以自己想要的方式手动制作。但是不得不使用一个不可持续的公式:

=query({'Bible Reading NKJV Block'!B3:D;'Bible Reading NKJV Block'!B3:D;'Bible Reading NKJV Block'!B3:D;'Bible Reading NKJV Block'!B3:D;'Bible Reading NKJV Block'!B3:D;'Bible Reading NKJV Block'!B3:D;'Bible Reading NKJV Block'!B3:D;'Antonye Holyde Block'!B3:D;'Mike Macintosh Block'!B3:D;'Sam Allen Block'!B3:D;'Chuck Smith Block'!B3:D;'Greg Laurie Block'!B3:D;'Jon Courson Block'!B3:D;'Morning Music Block'!B3:D;'Joe Focht Block'!B3:D;'Skip Heitzig Block'!B3:D;'Pancho Juarez Block'!B3:D;'Damian Kyle Block'!B3:D;'Sam Allen Block'!B3:D;'Chuck Smith Block'!B3:D;'Greg Laurie Block'!B3:D;'Jon Courson Block'!B3:D;'Afternoon Music Block'!B3:D;'J. Vernon McGee Block'!B3:D;'Mike Macintosh Block'!B3:D;'Sam Allen Block'!B3:D;'Chuck Smith Block'!B3:D;'Greg Laurie Block'!B3:D;'Jon Courson Block'!B3:D;'Evening Music Block'!B3:D;'Joe Focht Block'!B3:D;'J. Vernon McGee Block'!B3:D;'Skip Heitzig Block'!B3:D;'Pancho Juarez Block'!B3:D;'Damian Kyle Block'!B3:D;'Antonye Holyde Block'!B3:D;'Bible Reading NKJV Block'!B3:D;'Bible Reading NKJV Block'!B3:D;'Bible Reading NKJV Block'!B3:D},"Select * where Col1 is not null")

我可以使用以下方式生成可怕的数组引用文本:

=join(";",ArrayFormula("'"&If(A1,query({indirect("'"&D1&" Modifier'!D2:D")},"Select * where Col1 is not null "),query({'Weekday Template'!D2:D},"Select * where Col1 is not null "))&" Block'!B3:D"))

(并且我已经将其隐藏在'星期一程序'中!C1,以供参考。)

但是当我尝试将基于查询构建的数组插入查询时,我得到的外部查询试图针对文本运行,而根本不遵循引用。

=query({join(";",ArrayFormula("'"&If(A1,query({indirect("'"&D1&" Modifier'!D2:D")},"Select * where Col1 is not null "),query({'Weekday Template'!D2:D},"Select * where Col1 is not null "))&" Block'!B3:D"))},"Select * where Col1 is not null")

输出:

'Bible Reading NKJV Block'!B3:D;'Bible Reading NKJV Block'!B3:D;'Bible Reading NKJV Block'!B3:D;'Bible Reading NKJV Block'!B3:D;'Bible Reading NKJV Block'!B3:D;'Bible Reading NKJV Block'!B3:D;'Bible Reading NKJV Block'!B3:D;'Antonye Holyde Block'!B3:D;'Mike Macintosh Block'!B3:D;'Sam Allen Block'!B3:D;'Chuck Smith Block'!B3:D;'Greg Laurie Block'!B3:D;'Jon Courson Block'!B3:D;'Morning Music Block'!B3:D;'Joe Focht Block'!B3:D;'Skip Heitzig Block'!B3:D;'Pancho Juarez Block'!B3:D;'Damian Kyle Block'!B3:D;'Sam Allen Block'!B3:D;'Chuck Smith Block'!B3:D;'Greg Laurie Block'!B3:D;'Jon Courson Block'!B3:D;'Afternoon Music Block'!B3:D;'J. Vernon McGee Block'!B3:D;'Mike Macintosh Block'!B3:D;'Sam Allen Block'!B3:D;'Chuck Smith Block'!B3:D;'Greg Laurie Block'!B3:D;'Jon Courson Block'!B3:D;'Evening Music Block'!B3:D;'Joe Focht Block'!B3:D;'J. Vernon McGee Block'!B3:D;'Skip Heitzig Block'!B3:D;'Pancho Juarez Block'!B3:D;'Damian Kyle Block'!B3:D;'Antonye Holyde Block'!B3:D;'Bible Reading NKJV Block'!B3:D;'Bible Reading NKJV Block'!B3:D;'Bible Reading NKJV Block'!B3:D

并以其他方式尝试:

=query({indirect("'"&If(A1,query({indirect("'"&D1&" Modifier'!D2:D")},"Select * where Col1 is not null "),query({'Weekday Template'!D2:D},"Select * where Col1 is not null "))&" Block'!B3:D")},"Select * where Col1 is not null")

输出:

Interrupt   Station ID          Serial:ID
Spot        Promo               Album:%Block%
Fill        The Word of Promise Serial:TWoP;Announce:5
Spot        Sandy Adams         Serial:Sandy;Album:%Block%
Fill        Music               Genre:Worship

这是正确但部分的结果,它仅查询我的39个范围中的第一个。

甚至:

=ArrayFormula(indirect("{"&join(";","'"&If(A1,query({indirect("'"&D1&" Modifier'!D2:D")},"Select * where Col1 is not null "),query({'Weekday Template'!D2:D},"Select * where Col1 is not null "))&" Block'!B3:D")&"}"))

...工作。它只是说:

Function INDIRECT parameter 1 value is '{'Bible Reading NKJV Block'!B3:D;'Bible Reading NKJV Block'!B3:D;'Bible Reading NKJV Block'!B3:D;'Bible Reading NKJV Block'!B3:D;'Bible Reading NKJV Block'!B3:D;'Bible Reading NKJV Block'!B3:D;'Bible Reading NKJV Block'!B3:D;'Antonye Holyde Block'!B3:D;'Mike Macintosh Block'!B3:D;'Sam Allen Block'!B3:D;'Chuck Smith Block'!B3:D;'Greg Laurie Block'!B3:D;'Jon Courson Block'!B3:D;'Morning Music Block'!B3:D;'Joe Focht Block'!B3:D;'Skip Heitzig Block'!B3:D;'Pancho Juarez Block'!B3:D;'Damian Kyle Block'!B3:D;'Sam Allen Block'!B3:D;'Chuck Smith Block'!B3:D;'Greg Laurie Block'!B3:D;'Jon Courson Block'!B3:D;'Afternoon Music Block'!B3:D;'J. Vernon McGee Block'!B3:D;'Mike Macintosh Block'!B3:D;'Sam Allen Block'!B3:D;'Chuck Smith Block'!B3:D;'Greg Laurie Block'!B3:D;'Jon Courson Block'!B3:D;'Evening Music Block'!B3:D;'Joe Focht Block'!B3:D;'J. Vernon McGee Block'!B3:D;'Skip Heitzig Block'!B3:D;'Pancho Juarez Block'!B3:D;'Damian Kyle Block'!B3:D;'Antonye Holyde Block'!B3:D;'Bible Reading NKJV Block'!B3:D;'Bible Reading NKJV Block'!B3:D;'Bible Reading NKJV Block'!B3:D}'. It is not a valid cell/range reference.

任何人都可以帮助我解决此问题而不求助于应用脚本吗?

arrays google-sheets concatenation google-sheets-formula array-formulas
1个回答
0
投票

在Google表格INDIRECT中不支持多个单元格/范围引用。每个范围(如您的情况)都需要包装在单独的INDIRECT中,然后可以像这样构造数组:

={INDIRECT(range1); INDIRECT(range2); etc}

您的解决方案是在某个辅助单元中生成一个被动数组,然后手动或使用某些脚本将其复制粘贴到主动公式中

© www.soinside.com 2019 - 2024. All rights reserved.