此代码将帮助您
function onEdit(e) {
let source = e.source,
range = e.range,
col = range.columnStart,
row = range.rowEnd,
sheet = range.getSheet();
if (sheet.getName() == 'Rules' && row == 1 && col>2){
let sheetNames = sheet.getRange('1:1').getDisplayValues()[0].filter(String).slice(3),
formula = sheetNames.reduce((r,element)=>{
return r += `SUMIF('` + element + `'!A:A&'` + element + `'!B:B,A2:A&B2:B,'` + element + `'!T:T)+`
},`={"SUM";ArrayFormula(if(A2:A<>"",`).replace(/\+$/,',))}');
SpreadsheetApp.getActive().getSheetByName('Sheet1').getRange('C1').setFormula(formula)
}
}
每次更改Rules 上1:1 行中的数据时,此脚本都会重写Sheet1 上单元格C1 中的公式
添加...
为了将公式更改为您想要的公式
={"SUM";ArrayFormula( if(A2:A<>"",ifs((SUMIF('5/31/2021'!A:A&'5/31/2021'!B:B,A2:A&B2:B,'5/31/2021'!T:T)+SUMIF('6/16/2021'!A:A&'6/16/2021'!B:B,A2:A&B2:B,'6/16/2021'!T:T))=2,"New Full Time",SUMIF('5/31/2021'!A:A&'5/31/2021'!B:B,A2:A&B2:B,'5/31/2021'!T:T)+SUMIF('6/16/2021'!A:A&'6/16/2021'!B:B,A2:A&B2:B,'6/16/2021'!T:T))<2,"Part Time",(SUMIF('5/31/2021'!A:A&'5/31/2021'!B:B,A2:A&B2:B,'5/31/2021'!T:T)+SUMIF('6/16/2021'!A:A&'6/16/2021'!B:B,A2:A&B2:B,'6/16/2021'!T:T))>2,"Full Time"),))}将部分代码改成这个
...
subFormula = sheetNames.reduce((r,element)=>{
return r += `SUMIF('` + element + `'!A:A&'` + element + `'!B:B,A2:A&B2:B,'` + element + `'!T:T)+`
},`(`).replace(/\+$/,')'),
formula = '={"SUM";ArrayFormula(if(A2:A<>"",ifs(' +
subFormula + '=2,"New Full Time",' + subFormula + '<2,"Part Time",' + subFormula + '>2,"Full Time"),))}'
...
但我认为下一个公式会更容易并且工作得更快
={"SUM";ArrayFormula( if(A2:A<>"",SWITCH((SUMIF('5/31/2021'!A:A&'5/31/2021'!B:B,A2:A&B2:B,'5/31/2021'!T:T)+SUMIF('6/16/2021'!A:A&'6/16/2021'!B:B,A2:A&B2:B,'6/16/2021'!T:T)),0,"Part Time",1,"Part Time",2,"New Full Time","Full Time"),))}将其插入代码中,更改如下
...
formula = sheetNames.reduce((r,element)=>{
return r += `SUMIF('` + element + `'!A:A&'` + element + `'!B:B,A2:A&B2:B,'` + element + `'!T:T)+`
},`={"SUM";ArrayFormula(if(A2:A<>"",SWITCH((`).replace(/\+$/,'),0,"Part Time",1,"Part Time",2,"New Full Time","Full Time"),))}');
...
但更快的是一个常数公式,可以写在下一列D
={"-Header-";ArrayFormula(if(C2:C<>"",ifs(C2:C<2,"Part Time",C2:C=2,"New Full Time",C2:C>2,"Full Time"),))}