Есть табличка в который идет импортрендж и к нему форумла. Нужен скрипт, который в случае если в определнной ячейке FALSE, выполнит растяжение формулы в следующие 1000 строк. И так же Добавит такое же кол-во новых строк.
Вот тут в примере более наглядно описал. Скрипт вроде простой, но чот не могу сообразить.
Есть табличка в который идет импортрендж и к нему форумла. Нужен скрипт, который в случае если в определнной ячейке FALSE, выполнит растяжение формулы в следующие 1000 строк. И так же Добавит такое же кол-во новых строк.
Насколько я знаю, IMPORTRANGE обычно сам добавляет строки в заведомо достаточном количестве, причем, не менее 500 + сколько надо. Сейчас уменьшил диапазон в вашей формуле с IMPORTRANGE до "Лист2!A1:A5" и удалил строки, начиная с 6-й - строк в таблице осталось 5. Потом исправил диапазон на "Лист2!A1:A6", т.е. добавил всего одну ячейку - строк в таблице стало 506.
Насколько я знаю, IMPORTRANGE обычно сам добавляет строки в заведомо достаточном количестве, причем, не менее 500 + сколько надо. Сейчас уменьшил диапазон в вашей формуле с IMPORTRANGE до "Лист2!A1:A5" и удалил строки, начиная с 6-й - строк в таблице осталось 5. Потом исправил диапазон на "Лист2!A1:A6", т.е. добавил всего одну ячейку - строк в таблице стало 506.Gustav
Можно, например, с помощью следующего скрипта, генерирующего последовательность формул: [vba]
Код
function onEdit(e) { var rng = e.range; var val = rng.getValue(); if(~val.indexOf('FILLFORMULA') && rng.getNumRows()==1 && rng.getNumColumns()==1) { var arr = val.split('|'); rng.offset(0,0,Number(arr[1]),1).setFormula(arr[2]); } }
[/vba]Этому скрипту на "вход" (в произвольную ячейку, например, D1, с которой начинается генерация) подается строка специального вида: [vba]
Код
FILLFORMULA|10|=MINIFS(A:A;A:A;A1)
[/vba] В строке просматриваются три элемента, разделенные символом "|" ("вертикальная черта"). Первый элемент - кодовое слово "FILLFORMULA", второй элемент - число повторений формулы вниз, считая от ячейки ввода, третий элемент - сама формула, начинающаяся со знака равенства. Последовательность элементов диктуется удобством использования: удобно сначала отладить формулу в начальной ячейке, а затем приписать в ее начало строку вида FILLFORMULA|25| и нажать Enter - сгенерируется 25 копий формулы.
Можно, например, с помощью следующего скрипта, генерирующего последовательность формул: [vba]
Код
function onEdit(e) { var rng = e.range; var val = rng.getValue(); if(~val.indexOf('FILLFORMULA') && rng.getNumRows()==1 && rng.getNumColumns()==1) { var arr = val.split('|'); rng.offset(0,0,Number(arr[1]),1).setFormula(arr[2]); } }
[/vba]Этому скрипту на "вход" (в произвольную ячейку, например, D1, с которой начинается генерация) подается строка специального вида: [vba]
Код
FILLFORMULA|10|=MINIFS(A:A;A:A;A1)
[/vba] В строке просматриваются три элемента, разделенные символом "|" ("вертикальная черта"). Первый элемент - кодовое слово "FILLFORMULA", второй элемент - число повторений формулы вниз, считая от ячейки ввода, третий элемент - сама формула, начинающаяся со знака равенства. Последовательность элементов диктуется удобством использования: удобно сначала отладить формулу в начальной ячейке, а затем приписать в ее начало строку вида FILLFORMULA|25| и нажать Enter - сгенерируется 25 копий формулы.Gustav
Тут проблема что ОнЭдит работает только при изменение ручном в таблице. Но если эта таблица испортная чисто и я туда не заходу не когда, то не сработает...(
Тут проблема что ОнЭдит работает только при изменение ручном в таблице. Но если эта таблица испортная чисто и я туда не заходу не когда, то не сработает...(negodyaj
function onEdit(e) { var rng = e.range; var val = rng.getValue(); if(~val.indexOf('FILLFORMULA') && rng.getNumRows()==1 && rng.getNumColumns()==1) { var arr = val.split('|'); rng.offset(0,0,Number(arr[1]),1).setFormula(arr[2]); } }
Попробовал этот скрипт, он то хороший) Ну тут надо руками вставять
Код
FILLFORMULA|10|=MINIFS(A:A;A:A;A1)
а мне то надо что б автоматом все срабатовало растяжение дальше формулы что была, а не руками вставлять в ячейку продолжение) Так я могу и сам растянуть фомрулу)
function onEdit(e) { var rng = e.range; var val = rng.getValue(); if(~val.indexOf('FILLFORMULA') && rng.getNumRows()==1 && rng.getNumColumns()==1) { var arr = val.split('|'); rng.offset(0,0,Number(arr[1]),1).setFormula(arr[2]); } }
Попробовал этот скрипт, он то хороший) Ну тут надо руками вставять
Код
FILLFORMULA|10|=MINIFS(A:A;A:A;A1)
а мне то надо что б автоматом все срабатовало растяжение дальше формулы что была, а не руками вставлять в ячейку продолжение) Так я могу и сам растянуть фомрулу)negodyaj
Написал код в итоге сам Вешается на тригер по изменению таблицы или времени
Код
function autofill() { var spreadsheet = SpreadsheetApp.openById("КОД ТАБЛИЦЫ"); var sheetname = spreadsheet.getSheetByName('НАЗВАНИЕ ЛИСТ ГДЕ ТЯНУТЬ ФОРМУЛУ'); var sheetname2 = spreadsheet.getSheetByName('НАЗВАНИЕ ЛИСТА ГДЕ ЯЧЕЙКА С КАКОЙ РАСТЯГИВАТЬ И УСЛОВИЕ НАДО ИЛИ НЕТ'); var triger = sheetname2.getRange('A3').getValue(); // Тут или тру или фолс, выполняем или нет скрипт var iz = sheetname2.getRange('A1').getValue(); //С какой ячейки растягиваем и где лежит формула какую тянуть
var cell = 'A{name2}'.replace('{name2}', iz); var iz2 = iz + 500; // на сколько ячеек тянем var cell2 = 'A{name2}'.replace('{name2}', iz2);
Написал код в итоге сам Вешается на тригер по изменению таблицы или времени
Код
function autofill() { var spreadsheet = SpreadsheetApp.openById("КОД ТАБЛИЦЫ"); var sheetname = spreadsheet.getSheetByName('НАЗВАНИЕ ЛИСТ ГДЕ ТЯНУТЬ ФОРМУЛУ'); var sheetname2 = spreadsheet.getSheetByName('НАЗВАНИЕ ЛИСТА ГДЕ ЯЧЕЙКА С КАКОЙ РАСТЯГИВАТЬ И УСЛОВИЕ НАДО ИЛИ НЕТ'); var triger = sheetname2.getRange('A3').getValue(); // Тут или тру или фолс, выполняем или нет скрипт var iz = sheetname2.getRange('A1').getValue(); //С какой ячейки растягиваем и где лежит формула какую тянуть
var cell = 'A{name2}'.replace('{name2}', iz); var iz2 = iz + 500; // на сколько ячеек тянем var cell2 = 'A{name2}'.replace('{name2}', iz2);