增加+1到范围

时间:2015-10-10 02:42:43

标签: increment

我试图在大量变量上随机化一组增量。

例如,我有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?

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();
}