Макрос листов Google для автозаполнения значений - PullRequest
0 голосов
/ 10 марта 2020

Я работаю над электронной таблицей, для которой без макросов потребовалось бы несколько миллионов ячеек, содержащих формулы, я хотел бы макрос, который бы взял формулу в верхнем ряду выделения, а затем скопировал / автозаполнил формулу в строки вниз по листу, а затем замените эти строки значениями после вычисления формул.

Поскольку существует около 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); 
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...