スプレッドシート内の1シートを、指定した名前でコピーするGoogle Apps Scriptです。シート名が重複した場合はスキップします。
適当な「コピー元シート」を作成しました。
このシートをGASにコピーしてもらいます。
さっそくスクリプトを起動します。
メニューから「シート一括生成」を実行します。
生成したいシート名を聞かれます。
欲しいシートの数だけ、カンマ区切りで入力してください。
例では日付ですが、日本語でも大丈夫です。
続いて、コピー元のシートの名前を入力します。
この例では「コピー元シート」というシート名なので、それを入力します。
これでシートのコピーが実行されます。シートが増えていればOKです。
もし、すでに存在しているシート名を指定してしまっても大丈夫です。
このようにスキップしてくれます。
/**
* このスクリプトの説明、使い方はこちら。
* https://myfunc.jp/items/00006/index.html
*/
function onOpen() {
// スプレッドシートを開いたときに実行される関数
var ui = SpreadsheetApp.getUi()
// メニューの表示名
var menu = ui.createMenu('スクリプト実行');
// メニューに追加するボタン
menu.addItem('シート一括生成', 'generate_sheet');
// メニューを画面に追加する
menu.addToUi();
}
function generate_sheet() {
// 生成するシートの名前を入力させる
const input_sheetname = Browser.inputBox('生成するシート名をカンマ区切りで入力してください', Browser.Buttons.OK_CANCEL);
// 受け取った生成するシート名を配列にする
const sheets_name = input_sheetname.split(',');
// コピー元のシート名を入力させる
const input_formatsheet = Browser.inputBox('コピー元のシート名を入力してください', Browser.Buttons.OK_CANCEL);
// スプレッドシートを開く
let spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
// 重複して作成しないために、すでに存在するシートを取得する
let exist_sheets = spreadsheet.getSheets();
// 入力されたシート名でループ
inputsheetloop:for (i = 0; i < sheets_name.length; i++) {
// すでに存在するシートでループし、重複チェック
for(j = 0; j < exist_sheets.length; j++ ){
if(sheets_name[i] == exist_sheets[j].getSheetName()){
Browser.msgBox('シート名「' + sheets_name[i] + '」はすでに存在するためスキップします');
continue inputsheetloop;
}
}
// コピー元シートを取得
let formatsheet = spreadsheet.getSheetByName(input_formatsheet);
// コピー元からシートを複製する
let copiedsheet = formatsheet.copyTo(spreadsheet);
// 生成したシートの名前を変更する
copiedsheet.setName(sheets_name[i]);
}
}