我正在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.
任何人都可以帮助我解决此问题而不求助于应用脚本吗?
在Google表格INDIRECT
中不支持多个单元格/范围引用。每个范围(如您的情况)都需要包装在单独的INDIRECT
中,然后可以像这样构造数组:
={INDIRECT(range1); INDIRECT(range2); etc}
您的解决方案是在某个辅助单元中生成一个被动数组,然后手动或使用某些脚本将其复制粘贴到主动公式中