В Google таблице есть несколько листов которые сводиться на один, поиск происходит по имени и потом в колонки подставляются числа сопоставленные с сменами по строкам, Колонок больше 200 и количество строк постоянно меняется.
Это неполный вариант скрипта:
function myF10() {
/*Калонка F10*/
var list = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet() ;
list.getRange("F10").setFormula("=IFERROR(VLOOKUP(B10;'Эта неделя'!$B$3:$E$120;3;FALSE);0)");
var ksF10 = list.getLastRow();
var diapF10 = list.getRange(10, 6, ksF10-9);
list.getRange("F10") .copyTo(diapF10) ;
/*Калонка G10*/
var list = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet() ;
list.getRange("G10").setFormula("=IFERROR(VLOOKUP(B10;'Эта неделя'!$B$3:$E$120;4;FALSE);0)");
var ksG10 = list.getLastRow();
var diapG10 = list.getRange(10, 7, ksG10-9);
list.getRange("G10") .copyTo(diapG10) ;
/*Калонка H10*/
var list = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet() ;
list.getRange("H10").setFormula("=IF(C10>=10;F10-70;(F10+G10)-70)+J10");
var ksH10 = list.getLastRow();
var diapH10 = list.getRange(10, 8, ksH10-9);
list.getRange("H10") .copyTo(diapH10) ;
/*Калонка I10*/
var list = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet() ;
list.getRange("I10").setFormula("=H10+J10");
var ksI10 = list.getLastRow();
var diapI10 = list.getRange(10, 9, ksI10-9);
list.getRange("I10") .copyTo(diapI10) ;
/*Калонка K10*/
var list = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet() ;
list.getRange("K10").setFormula("=IFERROR(VLOOKUP(B10;'Прошлая неделя'!$B$3:$E$120;3;FALSE);0)");
var ksK10 = list.getLastRow();
var diapK10 = list.getRange(10, 11, ksK10-9);
list.getRange("K10") .copyTo(diapK10) ;
/*Калонка L10*/
var list = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet() ;
list.getRange("L10").setFormula("=IFERROR(VLOOKUP(B10;'Прошлая неделя'!$B$3:$E$120;4;FALSE);0)");
var ksL10 = list.getLastRow();
var diapL10 = list.getRange(10, 12, ksL10-9);
list.getRange("L10") .copyTo(diapL10) ;
/*Калонка N10*/
var list = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet() ;
list.getRange("N10").setFormula("=IFERROR(VLOOKUP(B10;'Позапрошлая неделя'!$B$3:$E$120;3;FALSE);0)");
var ksN10 = list.getLastRow();
var diapN10 = list.getRange(10, 14, ksN10-9);
list.getRange("N10") .copyTo(diapN10) ;
/*Калонка O10*/
var list = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet() ;
list.getRange("O10").setFormula("=IFERROR(VLOOKUP(B10;'Позапрошлая неделя'!$B$3:$E$120;4;FALSE);0)");
var ksO10 = list.getLastRow();
var diapO10 = list.getRange(10, 15, ksO10-9);
list.getRange("O10") .copyTo(diapO10) ;
/*Калонка Q10*/
var list = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet() ;
list.getRange("Q10").setFormula("=IFERROR(VLOOKUP(B10;'Месяц'!$B$3:$E$120;3;FALSE);0)");
var ksQ10 = list.getLastRow();
var diapQ10 = list.getRange(10, 17, ksQ10-9);
list.getRange("Q10") .copyTo(diapQ10) ;
/*Калонка R10*/
var list = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet() ;
list.getRange("R10").setFormula("=IFERROR(VLOOKUP(B10;'Месяц'!$B$3:$E$120;4;FALSE);0)");
var ksR10 = list.getLastRow();
var diapR10 = list.getRange(10, 18, ksR10-9);
list.getRange("R10") .copyTo(diapR10) ;
/*Калонка S10*/
var list = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet() ;
list.getRange("S10").setFormula("=IF(C10>=10;F10+K10+N10+Q10;F10+G10+K10+L10+N10+O10+Q10+R10)+J10");
var ksS10 = list.getLastRow();
var diapS10 = list.getRange(10, 19, ksS10-9);
list.getRange("S10") .copyTo(diapS10) ;
/*Калонка T10*/
var list = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet() ;
list.getRange("T10").setFormula("=IF(C10>=10;(K10-70)+J10;(K10+L10)+J10-100)");
var ksT10 = list.getLastRow();
var diapT10 = list.getRange(10, 20, ksT10-9);
list.getRange("T10") .copyTo(diapT10) ;
}
Как его сократить?