シート保護も含めてコピーするGAS
code:gas
function copySheetWithinSpreadsheet() {
// コピー元のシート名
var sourceSheetName = "コピーするシート名";
// 作成するコピーの数
var numberOfCopies = 3; // 任意の数を指定
// 編集可能なセル範囲
var editRanges = [
"B9:B33",
"D9:M33",
"O9:O33",
"R9:R33",
"T9:T33",
"C3",
"G3",
"L3",
"V5",
"U37:U38"
];
// 元のシートを取得
var sourceSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(sourceSheetName);
// 指定された数だけコピーを作成
for (var i = 0; i < numberOfCopies; i++) {
// 新しいシートを作成
var newSheet = SpreadsheetApp.getActiveSpreadsheet().insertSheet(sourceSheetName + "_Copy" + (i + 1));
// 元のシートのデータを新しいシートにコピー
var sourceRange = sourceSheet.getDataRange();
sourceRange.copyTo(newSheet.getRange(1, 1));
// 列のサイズを含めてコピー
for (var col = 1; col <= sourceSheet.getMaxColumns(); col++) {
newSheet.setColumnWidth(col, sourceSheet.getColumnWidth(col));
}
for (var row = 1; row <= sourceSheet.getMaxRows(); row++) {
newSheet.setRowHeight(row, sourceSheet.getRowHeight(row));
}
// 新しいシートに保護を設定
var newProtection = newSheet.protect();
newProtection.setDescription('Edit protection');
newProtection.setWarningOnly(false);
// 新しいシートに編集範囲を設定
setEditProtection(newSheet, editRanges, "メールアドレス");
}
// 完了メッセージ
Logger.log(numberOfCopies + " sheets copied within the spreadsheet with protection and column sizes.");
}
function setEditProtection(sheet, editRanges, editorEmail) {
// 新しいシートに編集範囲を設定
for (var i = 0; i < editRanges.length; i++) {
var rangeA1Notation = editRangesi;
var range = sheet.getRange(rangeA1Notation);
var protection = range.protect();
protection.getEditors().push(editorEmail);
protection.setDescription('Edit protection');
}
}
#GAS