見出し画像

フォーマットコピー・リストを使ってシート名を変更【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

どんな記事ならサポートしてみようと思えるか、ご要望ありましたら教えてくださいね。