复制18行并粘贴转置,重复直到数据结束

时间:2019-05-14 03:16:22

标签: google-apps-script google-sheets google-sheets-macros

我是Google表格宏的初学者。 我在a列中有468行的电子表格。 我想复制18行,然后从b1列开始粘贴转置。 然后移至下18行(19-37),重复直到数据结束。 应该以行1,19、37、55等结尾的转置数据结束 我尝试录制宏;但是,我无法移动到下一组数据。

1 个答案:

答案 0 :(得分:0)

我使用相对的单元格引用和相对简单的分配策略记录了一个宏(对于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();
    }
    }
};