【GAS】シート名を変更しながら、元シートをたくさんコピーする

GAS(Google Apps Script)を利用して、元シートをシート名を変更しながらコピーする方法を説明していきます
日報などをスプレッドシートで作成して配布するときに、対象者の名前をシート名にしながら、コピーして作成したいといったときに便利な方法です。

記事を書いた人

こんにちは。当ブログの管理人の『くろん』です。
30代サラリーマン、新規事業推進室に所属。新卒ブラック企業努め時代に身に着けた業務効率化ノウハウをアウトプットしていきます。
読んでくれた方の業務が一秒でも早く終わりますようにの精神で記事書いてます!!

スポンサーリンク
目次

元シートをコンパネシート記載の名前リストにシート名を変更しながらコピー

日報を想定して、GASを書いていきます。
コピーしたい日報のテンプレを『元シート』シートで作成し、それをコピーしながら、『コンパネ』シートに記載してある名前リストの名前をシート名につけていく。そういったGASを作成します。

こちらが『コンパネ』シートの内容です。『A2セル』に日付を、『B2セル』を起点にB列に名前リストを記入します。記載できる名前に個数の上限はありません。

『元シート』シートの日報内容です。(簡易的でごめんなさい)
このシートがコピーされる側のシートの内容になります。コピーしてシート名を変更、ついでに『コンパネ』シートに記載した日付情報を『B2セル』に、名前を『B3セル』に入力していきます。

コピペで動くプログラムはこちら

function myFunction1() {
  // コンテナバインドされてるスプレッドシートを取得
  let spreadsheet1 = SpreadsheetApp.getActiveSpreadsheet();
  // シート名指定でシートを取得
  let sheet1 = spreadsheet1.getSheetByName('コンパネ');
  let sheet2 = spreadsheet1.getSheetByName('元シート');
  // 日付を取得
  let hiduke =  sheet1.getRange(2, 1).getDisplayValue();
  // 名前記載列B列の最終行が何行目か取得
  let name_saigogyou = sheet1.getRange(2,2).getNextDataCell(SpreadsheetApp.Direction.DOWN).getRow();
  // 名前を配列として取得
  let names = sheet1.getRange(2,2,name_saigogyou-1,1).getValues();

  // 取得した名前の配列に対して、すべての要素でループ 
  for (let name of names){ 
  // 『元データ』シートの内容をコピー
  let sheet_copy= sheet2.copyTo(spreadsheet1);
  // シートの名前を、取得した名前に変更
  sheet_copy.setName(name); 
  // シートの『B2セル』に日付を、『B3セル』に名前を入力  
  sheet_copy.getRange(2, 2).setValue(hiduke);
  sheet_copy.getRange(3, 2).setValue(name);
  }
}

このGASを動かすためには、『コンパネ』『元シート』シートが存在するスプレッドシートとコンテナバインドしたGASでなくてはなりません。こちらの記事を参考にして、作成してくださいませ。

プログラム実行後

このように、『コンパネ』シート記載の名前リストに従って、シート名が自動的に変更されているのが分かるかと思います。

まとめ

元シートをシート名を変更しながらコピーしていうという内容のGASを紹介しました!
同時に多くの人に記入してもらえるように、それぞれ個別のシートを用意しておくというのは、良く使うので便利に使えるプログラムなのではないかなと思います。ぜひ、ベースとして使ってみてくださいー。

スポンサーリンク
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次