Skip to content

Instantly share code, notes, and snippets.

@jiro4989
Last active December 10, 2017 09:07
Show Gist options
  • Save jiro4989/7bd2464025e6f94b88da3e6c97f1a005 to your computer and use it in GitHub Desktop.
Save jiro4989/7bd2464025e6f94b88da3e6c97f1a005 to your computer and use it in GitHub Desktop.
入力シートをコピーして指定の範囲のセルの値を初期化する。

大量のデータを処理する際は、複数の範囲に対して、配列を使用して 一度のメソッド呼び出しで値を更新するようにしたほうが高速化できる。

newSheet.getRange(3, 5, lastRow-3, 8-5).setValues(vals);

例えばC2:Eという範囲の場合は下記のようになる。

var row = 2; // 2
var col = 3; // C (A=1, B=2, C=3, D=4, E=5)
var rowSize = sheet.getDataRange().getLastRow() - row;
var colSize = 5 - col;
sheet.getRange(row, col, rowSize, colSize).setValues(vals);
/**
* 特定のシートのコピーを生成する。
*/
function copyTestSheet() {
var prefix = "入力";
var ss = SpreadsheetApp.getActiveSpreadsheet()
var sheet = ss.getSheetByName(prefix + "テンプレート");
var newSheetName = prefix + getTodayString("/");
sheet.copyTo(ss).setName(newSheetName)
// コピーしたシートを対象にデータを初期化
var newSheet = SpreadsheetApp.getActive().getSheetByName(newSheetName);
var lastRow = newSheet.getDataRange().getLastRow();
var vals = getInitMultiArray(8-5, lastRow-3);
newSheet.getRange(3, 5, lastRow-3, 8-5).setValues(vals);
}
/**
* 今日の年月日文字列を返す
* @param sep 年、月、日を区切る文字
* @return 今日の日付
*/
function getTodayString(sep) {
var date = new Date();
var array = [
date.getFullYear()
, date.getMonth() + 1
, date.getDate()
];
return array.join(sep);
}
/**
* 初期化した二次元配列を生成する。
* @param x 列数
* @param y 行数
* @return 二次元配列
*/
function getInitMultiArray(x, y) {
var arr = new Array(y);
for (var i=0; i<y; i++) {
var row = new Array(x);
for (var j=0; j<x; j++) {
row[j] = "";
}
arr[i] = row;
}
return arr;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment