LoginSignup
5
4

More than 1 year has passed since last update.

GASでテンプレシートを対象者分コピーするスクリプトを作った

Last updated at Posted at 2022-10-15

概要

対象者を記載することで、スプレッドシートのテンプレシートを対象者の名前でその数分コピーするスクリプトを作りました。
同じシートを複数、名前を変えて作ることができます。

イベントや各種表を人数分作りたい時に便利です。

対象者の名前分、交通費のテンプレートのコピーを作成します。

GAS.gif

アプローチ

以下の方針でアプローチしました。

  1. 対象者を取得する。
  2. 対象者分、繰り返す。
    -1.対象者の名前で既にシートがあればスキップする。
    -2.テンプレシートをコピーする。
    -3.コピーされたシートを対象者の名前でリネームする。
  3. 作成したシート数を表示する

エッセンス

1. 対象者を取得する。

以下のように実装しています。
memberSheet は対象者一覧のシートでSheetオブジェクトです。

.js
    var members = memberSheet.getDataRange().getValues();

Sheetオブジェクト.getDataRange() では Rangeオブジェクトが返ってきます。
Rangeオブジェクトに対して、getValues()することで値が入っている範囲を行・列の二次元配列として取得できます。
https://developers.google.com/apps-script/reference/spreadsheet/sheet#getdatarange
https://developers.google.com/apps-script/reference/spreadsheet/range#getvalues

2. 対象者分、繰り返す。

2-2 対象者の名前で既にシートがあればスキップする。

スプレッドシートでは同じ名前のシートは作れません。
対象の名前で既に存在する場合は、作成をスキップする必要があります。
THIS_SHEETはこのGASがあるスプレッドシートで、SpredSheetオブジェクトです。
memberNameは 1. で取得した対象者の個々の名前です。

.js
    // 対象者の名前のシートを探す
    var memberNamedSheet = THIS_SHEET.getSheetByName(memberName);
    // 作成されていない場合のみ作成する
    if(memberNamedSheet == null){
        // 作成処理
    }

getSheetByName(name)で、その名前のシートを取得できます。
ない場合はNULLが返ります。
https://developers.google.com/apps-script/reference/spreadsheet/spreadsheet#getsheetbynamename

2-3 コピーされたシートを対象者の名前でリネームする。

templateSheet はテンプレートのシートでSheetオブジェクトです。

.js
    // 「テンプレート のコピー」 を作成し、名前を変更する。
    templateSheet.copyTo(THIS_SHEET).setName(memberName);

copyTo(sSheet)でスプレッドシートをコピー先を指定してコピーできます。
名前が「[元の名前]のコピー」となるので、setNameで名前を変更しています。
https://developers.google.com/apps-script/reference/spreadsheet/sheet#copytospreadsheet
https://developers.google.com/apps-script/reference/spreadsheet/sheet#setnamename

その他UI的なところ

実行するためのボタンをツールバーに追加

以下でスプレッドシートを開いた時にボタンを追加します。
addItemの第二引数は関数の名前を指定してあげればOKです。

.js
    function onOpen() {
      var ui = SpreadsheetApp.getUi();
      var menu = ui.createMenu("シート作成");
      menu.addItem("シート作成実行","makeSheets");
      menu.addToUi();
    }
5
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
4