Union multiple ranges in google sheets with programmatic lookup

后端 未结 2 1157
别跟我提以往
别跟我提以往 2021-01-24 17:43

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

相关标签:
2条回答
  • 2021-01-24 18:36

    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

    spreadsheet demo

    0 讨论(0)
  • 2021-01-24 18:42

    Solution without Google App Script.

    Requirements:

    • 3 individual helper cells
    • 1 helper column you will need to manually drag down each time you add a new sheet name, or you can just drag it down 1,000 times and that will be good for the next 1,000 sheets...

    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.

    0 讨论(0)
提交回复
热议问题