0

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

4

1 回答 1

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();
    }
    }
};
于 2019-05-14T11:28:39.777 回答