フォーマットコピー・リストを使ってシート名を変更【GAS】【Googleスプレッドシート】【関数】
スクリプト効果のイメージ
・フォーマットシートをコピーして利用したい
・リストは準備する
・シート名と、シートの一部はリストから取得したい
・何回も手作業はめんどくさい
・間違えたら削除したいが、こちらも手作業はめんどくさい。
動作イメージ
ボタンを配置し、
sheetsetを押すと一括作成
sheetdeleteを押すと一括削除
スクリプト:sheetset
function sheetset() {
var mySS = SpreadsheetApp.getActiveSpreadsheet();
var setS = mySS.getSheetByName("リスト");
var copyS = mySS.getSheetByName("フォーム");;
for (i=1;i<=6;i++){
var newsheetname = setS.getRange(i,1,1,1).getValue();
var newS = copyS.copyTo(mySS);
newS.getRange(2,2).setValue(newsheetname);
newS.setName(newsheetname);
}
}
解説:シートの取得
var mySS = SpreadsheetApp.getActiveSpreadsheet();
var setS = mySS.getSheetByName("リスト");
var copyS = mySS.getSheetByName("フォーム");
「リスト」という名前のシート・「フォーム」という名前のシートを取得する
解説:繰り返す内容
var newsheetname = setS.getRange(i,1,1,1).getValue();
リストの値を取得する。シート名と、シート内に反映する予定
var newS = copyS.copyTo(mySS);
「copyS」を「mySS」というスプレッドシート内にコピーして新しいシートを作ると同時に、そのシートを「newS」と定義する
newS.getRange(2,2).setValue(newsheetname);
newS.setName(newsheetname);
「newS」の「B2」にリストの値を入力する
「newS」の名前をリストの値に変更する
名前の変更は同時に:
newS.setName(newsheetname);var newS = copyS.copyTo(mySS);
この一行で、シートのコピーと定義が一緒に行われています。
シートをコピーするだけだとvar newS = copyS.copyTo(mySS); でいいのですが、
これだと新しくできたシートをを名前を変えるときに、もう一度探し出さないといけません。
シートの名前の変更は、新規作成・コピーの時はセットで行ったほうがよさそうです。
var newS = copyS.copyTo(mySS);
newS.setName(newsheetname);
スクリプト:sheetdelete
function sheetdelete() {
var mySS = SpreadsheetApp.getActiveSpreadsheet();
var setS = mySS.getSheetByName("リスト");
for (i=1;i<=6;i++){
var newsheetname = setS.getRange(i,1,1,1).getValue();
var delS = mySS.getSheetByName(newsheetname);
mySS.deleteSheet(delS);
}}
解説:シートの取得
var mySS = SpreadsheetApp.getActiveSpreadsheet();
var setS = mySS.getSheetByName("リスト");
シートを取得します。消すシートの名前が載っているシートを指定してます。
解説:繰り返す内容
var newsheetname = setS.getRange(i,1,1,1).getValue();
リストの値を取得する。削除するシートの指定に使う予定
var delS = mySS.getSheetByName(newsheetname);
削除するシートの指定
mySS.deleteSheet(delS);
指定したシートの削除
まとめ
今までの記事では、シートの指定をおこなうのを
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet()
一本で通してきました。
この構成が「アクティブなスプレッドシート」の「アクティブなシート」という指定でした。
今回は getSheetByName を使い、「シート名」をキーにシートを指定しています。
複数シートを使うためには必要な記載方法です。
今回のシートです。
https://docs.google.com/spreadsheets/d/1Qb5TdDK7aJvSN7uGb8708N6OqVtMe6MmBxhW9DWcJzM/edit#gid=0
どんな記事ならサポートしてみようと思えるか、ご要望ありましたら教えてくださいね。