Скопируйте 18 строк и вставьте транспонированный, повторяйте до конца данных - PullRequest
0 голосов
/ 14 мая 2019

Я новичок в макросах Google Sheets. У меня есть таблица с 468 строками в столбце а. Я хочу скопировать 18 строк, вставьте транспонированное начало в столбце b1. Затем перейдите к следующим 18 строкам (19-37) и повторяйте до конца данных. Должны заканчиваться транспонированными данными в строках 1,19,37,55 и т. Д. Я пытался записать макрос; однако я не могу заставить его перейти к следующей группе данных.

1 Ответ

0 голосов
/ 14 мая 2019

Я записал макрос, используя относительные ссылки на ячейки и относительно простую стратегию присвоения (просто устанавливая содержимое = в правую ячейку для каждой из 18 ячеек).Затем я заключил это в цикл for, чтобы он повторялся.Когда я запускаю B1 и запускаю его, он делает то, что вы хотите.Ясно, что существует множество способов улучшить его, например, сделать более приятным отступ, сделать 468 чем-то похожим на число строк или объяснить в комментарии, что такое 18.Вы можете даже переписать макрос, записанный с помощью цикла for.Но это должно помочь вам начать.

function SOrevSheetRange() {


 var spreadsheet = SpreadsheetApp.getActive();
  var i;
  for (i=0; i<468/18; i++){
  spreadsheet.getCurrentCell().setFormulaR1C1('=R[17]C[-1]');
  spreadsheet.getCurrentCell().offset(1, 0).activate();
  spreadsheet.getCurrentCell().setFormulaR1C1('=R[15]C[-1]');
  spreadsheet.getCurrentCell().offset(1, 0).activate();
  spreadsheet.getCurrentCell().setFormulaR1C1('=R[13]C[-1]');
  spreadsheet.getCurrentCell().offset(1, 0).activate();
  spreadsheet.getCurrentCell().setFormulaR1C1('=R[11]C[-1]');
  spreadsheet.getCurrentCell().offset(1, 0).activate();
  spreadsheet.getCurrentCell().setFormulaR1C1('=R[9]C[-1]');
  spreadsheet.getCurrentCell().offset(1, 0).activate();
  spreadsheet.getCurrentCell().setFormulaR1C1('=R[7]C[-1]');
  spreadsheet.getCurrentCell().offset(1, 0).activate();
  spreadsheet.getCurrentCell().setFormulaR1C1('=R[5]C[-1]');
  spreadsheet.getCurrentCell().offset(1, 0).activate();
  spreadsheet.getCurrentCell().setFormulaR1C1('=R[3]C[-1]');
  spreadsheet.getCurrentCell().offset(1, 0).activate();
  spreadsheet.getCurrentCell().setFormulaR1C1('=R[1]C[-1]');
  spreadsheet.getCurrentCell().offset(1, 0).activate();
  spreadsheet.getCurrentCell().setFormulaR1C1('=R[-1]C[-1]');
  spreadsheet.getCurrentCell().offset(1, 0).activate();
  spreadsheet.getCurrentCell().setFormulaR1C1('=R[-3]C[-1]');
  spreadsheet.getCurrentCell().offset(1, 0).activate();
  spreadsheet.getCurrentCell().setFormulaR1C1('=R[-5]C[-1]');
  spreadsheet.getCurrentCell().offset(1, 0).activate();
  spreadsheet.getCurrentCell().setFormulaR1C1('=R[-7]C[-1]');
  spreadsheet.getCurrentCell().offset(1, 0).activate();
  spreadsheet.getCurrentCell().setFormulaR1C1('=R[-9]C[-1]');
  spreadsheet.getCurrentCell().offset(1, 0).activate();
  spreadsheet.getCurrentCell().setFormulaR1C1('=R[-11]C[-1]');
  spreadsheet.getCurrentCell().offset(1, 0).activate();
  spreadsheet.getCurrentCell().setFormulaR1C1('=R[-13]C[-1]');
  spreadsheet.getCurrentCell().offset(1, 0).activate();
  spreadsheet.getCurrentCell().setFormulaR1C1('=R[-15]C[-1]');
  spreadsheet.getCurrentCell().offset(1, 0).activate();
  spreadsheet.getCurrentCell().setFormulaR1C1('=R[-17]C[-1]');
  spreadsheet.getCurrentCell().offset(1, 0).activate();
  }
};

Как я отмечал в предыдущем комментарии, всю эту задачу можно выполнить без макроса, но я понимаю, что вы хотите привыкнуть к макросам, поэтому ядаю этот ответ.Пересмотр: меня беспокоило, как долго это было, поэтому я переписал то, что было записано как цикл.Это выглядит так:

function SOrevSheetRange() {
var spreadsheet = SpreadsheetApp.getActive();
var i;
var j;
for (i = 0; i < 468 / 18; i++) {
    for (j = 0; j < 18; j++) {
        spreadsheet.getCurrentCell().setFormulaR1C1('=R[' + (17 - 2 * j) + ']C[-1]');
        spreadsheet.getCurrentCell().offset(1, 0).activate();
    }
    }
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...