我是编程的新手,我正在尝试在Google工作表上创建一个短宏。我想根据变量see here复制并粘贴一定数量的单元格列表。在第一列中,您有一个位置列表,第二列是它们应该粘贴到第三列的列表(列F)。例如,我想将A4粘贴五次到F4列。然后A5两次进入F8(F4 + 5行),所以一直到我的列表结束。
我想出了下面的代码,但它目前在同一行(F4-F8)上复制了我的列表的每个位置5次,然后在接下来的5行重复相同的过程,依此类推。我认为问题在于循环的顺序,但我无法弄明白。
我遇到的另一个问题是它只复制每个位置5次(B1),但我不知道如何使我的变量numShift成为(B4-B16)的数组,以便每个位置被复制正确的次数
任何帮助都会非常感激!
function myFunction() {
var app = SpreadsheetApp;
var ss = app.getActiveSpreadsheet()
var activeSheet = ss.getActiveSheet()
var numShift = activeSheet.getRange(4,2).getValue()
for (var k=0;k<65;k=k+5){
for (var indexNumLocation=0;indexNumLocation<15;indexNumLocation++){
for (var indexNumShift=0;indexNumShift<numShift;indexNumShift++)
{var locationRange = activeSheet.getRange(4+indexNumLocation,1).getValue();
activeSheet.getRange(4+k+indexNumShift,6).setValue(locationRange);
}
}
}
}
答案 0 :(得分:1)
试试这个
function myFunction() {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var lastRow = sheet.getLastRow();
var data = [];
var i, j;
// get times count for each row from B4 to last row
var times = sheet.getRange(4, 2, lastRow - 4, 1).getValues();
// get the data that needs to be copied for each row from A4 to last row
var values = sheet.getRange(4, 1, lastRow - 4, 1).getValues();
// loop over each row
for (i = 4; i <= lastRow; i++) {
// run loop number of times for that row
for (j = 1; j <= times[i]; j++) {
// push the value that needs to be copied in a temporary array
data.push([values[i][0]]);
}
}
// finally put that array data in sheet starting from F4
sheet.getRange(4, 6, data.length, 1).setValues(data);
}