Я работаю над электронной таблицей, для которой без макросов потребовалось бы несколько миллионов ячеек, содержащих формулы, я хотел бы макрос, который бы взял формулу в верхнем ряду выделения, а затем скопировал / автозаполнил формулу в строки вниз по листу, а затем замените эти строки значениями после вычисления формул.
Поскольку существует около 20 000 строк с ~ 20 столбцами и несколько листов, подобных этому, даже если я запустил макрос который будет копировать формулы вниз через каждый лист и затем заменять их значениями, это все равно будет очень медленным, поэтому я бы хотел, чтобы он копировал формулы только в те строки, где ячейка в указанном столбце c не является пустой (в каждой строке есть входная ячейка), а также копирование только в те строки, где ячейки, которые должны быть заполнены, пусты.
Если мы возьмем пример простой настройки столбца 1 для ввода, и столбец 2 является формулой, основанной на нем, и я уже выполнил это после ввода входных данных до второй строки, а затем введите В 3-м и 4-м ряду тоже есть что-то похожее на это . Я хотел бы, чтобы при запуске макрос копировал формулы в ячейки строк 3 и 4, а затем заменял их значениями.
Я также не уверен, как можно получить формулы в несмежных столбцах для копирования вниз по тем же строкам, поскольку их нельзя отобразить в одном диапазоне.
Сейчас у меня есть 2 макроса basi c, один из которых будет копировать формулы вниз через заданный диапазон, а другой - заменить это со значениями, как если бы у меня были их в том же макросе, казалось, что замена произойдет до загрузки формул, поэтому она будет заменена ничем.
Если то, к чему я стремлюсь, не возможно с макросами Google листов, но возможно с VBA в Excel, я не исключаю, что мне придется попробовать переключиться в Excel, но я бы предпочел сделать это в листах Google.
Спасибо заранее за любую помощь.
Редактировать: Это самая базовая c настройка, которую я сейчас имею:
function Autofillformulas() {
var spreadsheet = SpreadsheetApp.getActive();
spreadsheet.getRange('A4:C5000').activate();
spreadsheet.getRange('A4:C4').copyTo(spreadsheet.getActiveRange(), SpreadsheetApp.CopyPasteType.PASTE_NORMAL, false);
};
function Autofillvalues2() {
var spreadsheet = SpreadsheetApp.getActive();
spreadsheet.getRange('A5:C5000').activate();
spreadsheet.getRange('A5:C5000').copyTo(spreadsheet.getActiveRange(), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false);
};
Редактировать 2: Благодаря комментариям я уже получил ее в к одному макросу:
function Autofillformulas() {
var spreadsheet = SpreadsheetApp.getActive();
spreadsheet.getRange('A4:C5000').activate();
spreadsheet.getRange('A4:C4').copyTo(spreadsheet.getActiveRange(), SpreadsheetApp.CopyPasteType.PASTE_NORMAL, false);
SpreadsheetApp.flush()
var spreadsheet = SpreadsheetApp.getActive();
spreadsheet.getRange('A5:C5000').activate();
spreadsheet.getRange('A5:C5000').copyTo(spreadsheet.getActiveRange(), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false);
};