GASでスプレッドシートをコピーする方法【Google Apps Script 】

Google Apps Script (GAS)

スプレッドシートを使っていて、シートのコピーを作成したいことって多いですよね。

こんな経験ありませんか?
  • 手動でコピーする操作が面倒
  • 複数のシートを作るのに時間が掛かる
  • 雛形(テンプレート)シートを自動でコピーできたらいいのに…
  • 他のファイルにコピーする操作が面倒

この記事では、GASを使ってスプレッドシートをコピーする方法をご紹介します。

GASでコピーできるようになれば、複数のシートを短時間で作ることができます。

しかも、シートのコピーはGASが自動で行ってくれるので、自分は他の仕事が出来るといったメリットもあります。

こんな人におすすめ
  • シートのコピーを自動化したい
  • 短時間で複数のシートを作りたい
  • 雛形(テンプレート)を決まった数だけ複製したい

はじめに

今回は以下の3パターンを想定してスクリプトを考えていきます。

今回の想定パターン
  1. 同じファイル内にシートをコピーする
  2. 他のファイルにシートをコピーする
  3. シートを複数回コピーする

準備するもの

スプレッドシートを開いて、コピーしたいシートを作成しましょう。(コピー先を別のスプレッドシートにしたい場合は、ファイルをもう1つ開いて下さい。)

以下の例では、シート名を”テンプレート”として、コピーしたいシートに雛形を作成してみました。

今回はこれをコピーしていきます。

ちなみに、後述の解説がややこしくならないように、スプレッドシートの構成を簡単に図解しました。

後述の解説では、ファイル=下図②のSpreadsheet、シート=下図③のSheetを表します。

”ファイル”とか”シート”という言葉がややこしく感じたときは、見直してみて下さい。

コピーまでの流れ

基本的な流れは以下のとおりです。

コピーまでの流れ
  1. ファイル(Spreadsheet)を取得
  2. コピーしたいシート(Sheet)を取得
  3. (他のファイルにコピーする場合)コピー先のファイル(Spreadsheet)を取得
  4. copyToメソッドでシート(Sheet)をコピー

後述しますが、決まった数だけシートをコピーしたい場合は、for文を使って同じ処理を繰り返していきます。

雛形の中の値だけをコピーしたいという方はこちらの記事をご参照下さい↓

1.同じファイル内にシートをコピーする

下の図のように、同じスプレッドシートファイル内にシートをコピーしていく方法です。

前述の通り、コピーしたいシートを取得してcopyToメソッドでシートをコピーしていきます。

サンプルコードはこんな感じです↓

function myFunction(){
  const ss = SpreadsheetApp.getActiveSpreadsheet(); //現在開いているスプレッドシートファイルを取得
  const sheet = ss.getSheetByName("テンプレート");  //シート名を指定してシートを取得
  sheet.copyTo(ss); //取得したシートを現在開いているファイルに複製
}

今回はgetActiveSpreadsheet()で現在開いているスプレッドシートを取得し、getSheetByNameでシート名を指定してコピー元となるシート(テンプレート)を取得しました。

スクリプトを実行すると、こんな感じになります↓ (メニューボタンからスクリプトを実行したい場合は過去の記事をご参照下さい。)

”テンプレート”シートの右隣に”テンプレートのコピー”が作成されていますね。

2.他のファイルにシートをコピーする

続いて、コピー先のスプレッドシートファイルが異なる場合の解説です。

今回はコピー元のシートがあるファイルを”オリジナルファイル”、シートのコピー先となるファイルを”コピー先ファイルと名前をつけました。

1の方法と異なるのは、コピー先のファイルを取得する作業が増えるという点です。

”オリジナルファイル”はgetActiveSpreadsheet()で取得できますが、コピー先ファイルはURLまたはIDのいずれかを使って取得します。

URLまたはIDでファイルを取得する方法について詳しく知りたい方は、過去の記事をご参照下さい。

以下のサンプルコードでは、oepnByUrl()でURLを指定して”コピー先ファイル”を取得しました↓

function myFunction() {

  const ss = SpreadsheetApp.getActiveSpreadsheet(); //現在開いているスプレッドシートファイルを取得
  const sheet = ss.getSheetByName("テンプレート");  //シート名を指定してシートを取得
  const file = SpreadsheetApp.openByUrl("https://docs.google.com/spreadsheets/d/1gXxpfJKbz1vktRBZ07XqCWh6ECit7joNaHizqEN5KtI/edit#gid=0");  //URLを指定して”コピー先ファイル”を取得する

  sheet.copyTo(file); //取得したシートを”コピー先ファイル”に複製
}

スクリプトを実行するとこんな感じになります↓

コピー元ファイルにあったテンプレートが、コピー先ファイルに複製されていますね。

スポンサーリンク

3.決まった数だけシートをコピーする

シートを複数回コピーしたいという方は、for文で繰り返し処理を実行しましょう。

for文について詳しく知りたい方は過去の記事をご参照下さい↓

今回は、1でご紹介したオリジナルファイル内に同じシートを5回コピーします。

i<=〇の部分に任意の数字を入れると、その回数だけシートがコピーされます。

先程のサンプルコードと異なるのは、sheet.copyTo()をfor文の中に記述しているという点です。

他のファイル内にシートを複数回コピーする場合も、for文の中にsheet.copyTo()を記述すれば同様の処理が実行可能です。

シートを複数回コピーする場合のサンプルコードはこんな感じです↓

function myFunction(){
  const ss = SpreadsheetApp.getActiveSpreadsheet(); //現在開いているスプレッドシートファイルを取得
  const sheet = ss.getSheetByName("テンプレート");  //シート名を指定してシートを取得

  for(let i=1; i<=5; i++){  //同じ処理を5回繰り返す
    sheet.copyTo(ss); //取得したシートを現在開いているファイルに複製
  }

}

スクリプトを実行するとこんな感じになります↓

スポンサーリンク

まとめ

今回は、GASを使ってスプレッドシートをコピーする方法についてご紹介しました。

同じシート内にコピーする場合でも、他のファイルにコピーする場合でも、copyTo()メソッドを使用することで簡単に実行できます。

3でご紹介したfor文も簡単に使えるので、ぜひ試してみて下さい!

スポンサーリンク
スポンサーリンク

コメント

タイトルとURLをコピーしました