I have a google sheet with a dynamically changing number of worksheets within it. I\'d like to be able to automatically union all worksheets that included in a named range that
without scripts you can build a formula generator in C1 like:
=ARRAYFORMULA({""; "={"&TEXTJOIN("; ", 1,
IF(A1:A="",,"QUERY("&A1:A&"!A2:C, ""where B != ''"")"))&"}"})
and then copy-paste C2 wherever you need
to skip re-copy-pasting you can use script:
function onEdit() {
var sheet = SpreadsheetApp.getActive().getSheetByName("Contants");
var src = sheet.getRange("C2"); // The cell which holds the formula
var str = src.getValue();
var cell = sheet.getRange("C10"); // The cell where I want the results to be
cell.setFormula(str);
}
so it will copy generated "formulaa"-string from C2 and it will paste it in C10 as true formula so all you need to do is type in sheet names in A column and everything gets auto-updated
Solution without Google App Script.
Requirements:
Using your scrap sheet as an example, you have a list in column A.
In cell B1 put =arrayformula(if(len("'"&A1&"'!A2:C")<1,"",query(transpose(substitute(query(substitute(indirect("'"&A1&"'!A2:C")," ","_"),"Select * where Col1 is not null",counta(array_constrain(indirect("'"&A1&"'!A2:C"),99^99,1)))," ","\")),"select * where Col1 is not null",99^99)))
DRAG THIS FORMULA DOWN AS FAR AS YOU NEED SHEET NAMES YOU CAN OVERSHOOT
In cell C1 put =arrayformula(if(len(B:B)<1,"",split(B:B," ")))
In cell F1 put =arrayformula(query(transpose(substitute(query({C:E},"select * where Col1 is not null",counta(array_constrain(A:A,99^99,1)))," ","\")),"select *", 99^99))
In cell F2 put =arrayformula(substitute(transpose(split(transpose(split(F1," ")),"\")),"_"," "))
Now in cell F2 you will have your joined report dynamically updating as you add sheet names.