我试图在大量变量上随机化一组增量。
例如,我有5,000个人,这些人中的每个人的基值都是1,但添加1对这些人中的每个人都有不同的影响。向Person A添加1的示例表示基数增量为1.1。向人b添加1会使其基数增加1.4,依此类推。
我已经想出如何使用vlookup为每个+1动作分配不同的值,但我现在需要在范围内循环+1增量。
我在B列中设置了基值:B但是无法弄清楚如何循环脚本。这就是我到目前为止所做的:
function increment(){
var ss = SpreadsheetApp.getActiveSpreadsheet(); var sheet = ss.getSheets()[1];
var range = sheet.getRange(" b1"); var value = range.getValue();
for(var i = 1; i> = range; i ++);
range.setValue(value + 1);
}
但这仅将1增加到" b1"。我如何循环它以便它连续运行,比如每秒通过b1,b2,b3,b4等每次增加+1?
答案 0 :(得分:0)
只需在getRange()函数中使用“b”+ i添加范围名称,然后将其移动到for循环中。
或者你可以使用offset()函数。
代码
for (var i = 1; i >= range; i++);
range.setValue(value + 1);
是循环而不运行命令range.setValue(value + 1);因为第一行以分号结尾。
最后,代码应如下所示。
function increment()
{
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheets()[1];
//var range = sheet.getRange("b1");
//var value = range.getValue();
// change 5000 to amount of you need
for (var i = 1; i <= 5000; i++)
{
var range = sheet.getRange("b" + i);
var value = range.getValue();
range.setValue(value + 1);
}
}
如果使用偏移功能代码如下所示。
function increment()
{
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheets()[1];
var range = sheet.getRange("b1");
//var value = range.getValue();
// change 5000 to amount of you need
for (var i = 1; i <= 5000; i++)
{
var value = range.offset(i, 0).getValue();
range.offset(i, 0).setValue(value + 1);
}
}
编辑以改善执行时间
function increment()
{
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheets()[1];
// change 5000 to amount of you need
var formulas = new Array(5000);
for (var i = 0; i < 5000; i++)
{
formulas[i] = "=R[0]C[-1]+1";
}
// Assume that column C is not used
var ranges = sheet.getRange("C1:C5000");
ranges.setFormulasR1C1(formulas)
ranges.copyValuesToRange(sheet, 2, 2, 1, 5000);
ranges.clearContent();
}