0

onEdit()Googleスプレッドシート関数で使用している次のコードスニペットは次のとおりです。

else if(editedCell.getColumn() == 13 && editedCell.getRow() == 29) {
    var modVal = sheet.getRange("L29").getValue();

    if(editedCell.getValue() == "Yes") {
      sheet.getRange("G23").setValue(sheet.getRange("G23").getValue() + modVal);
      sheet.getRange("G24").setValue(sheet.getRange("G24").getValue() + modVal);
      sheet.getRange("G25").setValue(sheet.getRange("G25").getValue() + modVal);
      sheet.getRange("G26").setValue(sheet.getRange("G26").getValue() + modVal);
      sheet.getRange("G27").setValue(sheet.getRange("G27").getValue() + modVal);
      sheet.getRange("G28").setValue(sheet.getRange("G28").getValue() + modVal);
      sheet.getRange("G29").setValue(sheet.getRange("G29").getValue() + modVal);
    }
    else if(editedCell.getValue() == "No") {
      sheet.getRange("G23").setValue(sheet.getRange("G23").getValue() - modVal);
      sheet.getRange("G24").setValue(sheet.getRange("G24").getValue() - modVal);
      sheet.getRange("G25").setValue(sheet.getRange("G25").getValue() - modVal);
      sheet.getRange("G26").setValue(sheet.getRange("G26").getValue() - modVal);
      sheet.getRange("G27").setValue(sheet.getRange("G27").getValue() - modVal);
      sheet.getRange("G28").setValue(sheet.getRange("G28").getValue() - modVal);
      sheet.getRange("G29").setValue(sheet.getRange("G29").getValue() - modVal);
    }
}

ご覧のとおり、私は各セルを1行ずつ手動で実行しているだけです。foreach()範囲の配列を指定してから、単純な型の関数で計算を行う方法はありますか?質問の仕方はわかりませんが、上記のコードを見ると自明だと思います。

ありがとう。

4

1 に答える 1

1
var modVal = sheet.getRange("L29").getValue();

// Create a function that updates a given sheet at a given range with
// the result of a value function
var changeRangeValue = new function(sheet, range, value) {
    sheet.getRange(range).setValue(value(sheet, range));
};

var calculateValue;

if(editedCell.getValue() == "Yes") {
    // Create a function that returns a value of a given sheet at a given range with
    // the mod value added
    calculateValue = new function(sheet, range) {
        return sheet.getRange(range).getValue() + modValue; 
    };
}
else if(editedCell.getValue() == "No") {
    // Create a function that returns a value of a given sheet at a given range with
    // the mod value added        
    calculateValue = new function(sheet, range) {
        return sheet.getRange(range).getValue() - modValue;
    };
}
else {
    // Create a function that returns the current value of a given sheet at a given range
    calculateValue = new function(sheet, range) {
        return sheet.getRange(range).getValue();
    };
}

// Go through G23-G29 and update the range value with the correct value
for(var i=23; i <= 29; i++) {
    changeRangeValue(sheet, "G"+i, calculateValue);
}
于 2012-06-29T20:03:27.263 に答える