GASで特定のシートを新しいスプレッドシートに簡単にコピーする方法

book-and-pc-on-desk プログラミング

そまちょブログのそまちょ(@somachob)です。

この記事では、GASを使って特定のシートを新しいスプレッドシートにコピーする方法について解説します。

Google Apps Script とは

Google Apps Script は、GASとも呼ばれ、Google が提供するサービスの1つです。

GAS は、JavaScript ベースのスクリプト言語で、Googleアカウントを持っていれば無料で使うことができます。

GAS を使えば、Gmail や Googleドライブ、 Googleカレンダー、Googleシートなどを操作することができるので、手動でしている作業を自動化・効率化することができます。

たとえば、スプレッドシートの特定のシートを別のスプレッドシートにコピーしたいとき、GASを使えば簡単で効率的にコピーすることができます。

多くなプログラミング言語とは違い、GASは環境構築などは不要で、すぐに使うことができます。

手動で特定のシートを新しいスプレッドシートにコピーする方法

手動でスプレッドシートのシートをコピーするには、次の方法でコピーします。

  • コピーしたいシートを右クリックします。
  • 「別のワークブックにコピー」→「新しいスプレッドシート」をクリックします。

この方法は簡単ですが、定期的にコピーをしているときや複数のシートをコピーするには手間がかかります。

そんなときには、GASを使えばこの作業を自動化することができます。

GASで特定のシートを新しいスプレッドシートにコピーする方法

GASを使えば、簡単にコピーすることができ、スクリプトを変更することで自分で好きなようにカスタマイズが可能です。

大きな流れは、次のようになります。

  1. スクリプトエディタを開く。
  2. コピーするシートを取得する。
  3. 新しいスプレッドシートを作成する。
  4. 作成した新しいスプレッドシートにシートをコピーする。
  5. 不要なシートを削除する。

この作業について、1つずつ解説していきます。

スクリプトエディタを開く

GASを書くためのスクリプトエディタを開きます。

コピーするシートのスプレッドシートを開いて、「拡張機能」→「Apps Script」をクリックします。

spreadsheet-container-bound-script

次がスクリプトエディタの画面になります。

function myFunction() {} の部分にスクリプトを書いていきます。

script-editor

コピーするシートを取得する

シートをコピーするために、コピーするシートを指定します。

スクリプトエディタで次のスクリプトを書いてください。

function myFunction() {
  const spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  const sheet = spreadsheet.getSheetByName('シート1');
}

getActiveSpreadsheet() で、スプレッドシートを取得し、getSheetByName() でコピーするシートを取得しています。

3行目の「シート1」というのがコピーするシートの名前になります。

以下の記事も参考にしてください。

新しいスプレッドシートを作成する

新しいスプレッドシートを作成するには、SpreadsheetApp.create() メソッドを使います。

新しいスプレッドシートの名前は、5行目の「新しいスプレッドシートの名前」を変えることで変更することができます。

function myFunction() {
  const spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  const sheet = spreadsheet.getSheetByName('シート1');

  const newSpreadsheet = SpreadsheetApp.create('新しいスプレッドシートの名前');
}

これで、コピーするシートの取得と新しいスプレッドシートの作成までが終わりました。

作成した新しいスプレッドシートにシートをコピーする

シートをコピーするのに copyTo() メソッドを使います。

copyTo(spreadsheet)

引数の spreadsheet にコピー先のスプレッドシート指定します。

コピーしたシート名は「Copy of シート1」のような名前になります。

そのため、setName() メソッドを使ってコピーしたシート名を変更しています。

9行目の「コピーしたシート名前」がコピーしたシート名になります。

function myFunction() {
  const spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  const srcSheet = spreadsheet.getSheetByName('シート1');

  const newSpreadsheet = SpreadsheetApp.create('新しいスプレッドシートの名前');

  const newSheet = srcSheet.copyTo(newSpreadsheet);

  newSheet.setName('コピーしたシートの名前');
}

スクリプトを実行する

スクリプトが書けたら、実行します。

スクリプトエディタで「Ctrl + S」でスクリプトを保存します。

保存がでたら、「実行」をクリックします。

初めての実行のときには、承認が必要になります。

承認方法
  1. 「承認が必要」というウインドウで、「権限を確認」をクリック
  2. Googleアカウントでログイン
  3. 「このアプリはGoogleで確認されていません」の左下の詳細をクリック
  4. 「(GASの名前)(安全ではないページ)に移動」をクリック→「許可」

実行されれば、Googleドライブのルートフォルダに新しいスプレッドシートが作成されています。

不要なシートを削除する

新しいスプレッドシートにコピーはできましたが、新しいスプレッドシートを作成したときにできる「シート1」が残ったままです。

これを削除するために、deleteSheet() メソッドを使います。

スプレッドシートを作成したあとに、newSpreadsheet.getSheets()[0] で1番目のシートを取得しておきます。

コピーが終わったあとに、newSpreadsheet.deleteSheet(sheetToDelete) で不要なシートを削除します。

function myFunction() {
  const spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  const srcSheet = spreadsheet.getSheetByName('シート1');

  const newSpreadsheet = SpreadsheetApp.create('新しいスプレッドシートの名前');

  const sheetToDelete = newSpreadsheet.getSheets()[0];

  const newSheet = srcSheet.copyTo(newSpreadsheet);

  newSpreadsheet.deleteSheet(sheetToDelete);

  newSheet.setName('コピーしたシートの名前');
}

まとめ

GASを使って、特定のシートを新しいスプレッドシートにコピーする方法について解説しました。

手動でシートをコピーするには、シートを右クリックして、「別のワークブックにコピー」→「新しいスプレッドシート」をクリックします。

GAS を使っても同じことが簡単に行えます。GAS のトリガー機能を使えば、毎日自動で実行することも可能です。

GAS を使えば、様々な業務を自動化することもできます。

参考

Class Spreadsheet – Google Developers

Class Sheet – Google Developers

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