MAGAZINE

ルーターマガジン

JavaScript/Node.js

GASで複数のスプレッドシートにシートを一括コピーする

2023.09.28
Pocket

複数のスプレッドシートにコピーしたいシートを追加したいときがありませんか?手作業でこれを行おうとすると

  1. コピー元のシート全体をコピー
  2. コピー先のスプレッドシートを開き
  3. 新しくシートを追加してペースト

という作業フローをコピー先の数だけ行うことになります。さらに、シートを左端などの目立つ場所に移動したいとなるとさらに作業が細かくなります。今回はこの作業をGASを利用して自動化していきます。

自動化にあたり、以下の2つを目標として設定しました。

  • メニューバーからコピーを実行できること
  • 複数のシートをコピーできること

これに加えてコピーしたシートは目立つ場所に配置されるようにします。

実装

スプレッドシートのマクロ機能を使用すると、マクロに登録したGASのスクリプトを実行することができます。 また、マクロ機能はメニューの拡張機能から簡単に使用できるので、画面上の操作も単純なもので済みます。

実装したい機能

  • コピーしたいシートを開いた状態からマクロボタンを押して実行
  • 入力としてスプレッドシートのシートidを受け取る、この時のシートidは複数くることも想定する
  • 出力は指定したページの一番左側にコピーしたいシートが追加されている

実際のコード

function sheetCopy(){
  //テキストボックスを表示して文字列を受け取る
  let raw_sheet_ids = Browser.inputBox("シートidを入力してください");
  //入力された文字列を分解してid毎の配列に置き直す
  let sheet_ids = raw_sheet_ids.split(' ');
  // 今開いているシートを取得
  let src_sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  //配列の要素(シートid毎)にコピーを行っていく
  sheet_ids.forEach((dst_sheet_id) => {
    // idを渡してシートのコピーを行う
    let dst_sheet = SpreadsheetApp.openById(dst_sheet_id);
    //コピー元シートをコピー先シートにコピー
    let new_sheet = src_sheet.copyTo(dst_sheet).setName(src_sheet.getName());
    //作成シートにカーソルをフォーカス
    dst_sheet.setActiveSheet(new_sheet);
    //カーソルフォーカスされた作成シートを左から1番目に移動
    dst_sheet.moveActiveSheet(1);
  });
}

コード解説

シートidを受け取るためのテキストボックスを用意します。 この時、複数のシートidは改行などの空白文字で分けられたものがくると想定します。

//テキストボックスを表示して文字列を受け取る
let raw_sheet_ids = Browser.inputBox("シートidを入力してください");
//入力された文字列を分解してid毎の配列に置き直す
let sheet_ids = raw_sheet_ids.split(' ');

シートのコピーはcopyToメソッドを利用して行います。 シートをコピーしただけの状態ではシート名は入力されていないため、setNameも使用してシート名も同時に設定します。

//コピー元シートをコピー先シートにコピー
let new_sheet = src_sheet.copyTo(dst_sheet).setName(src_sheet.getName());

シートの移動を行う際にはシートをアクティブにした状態でmoveActiveSheetメソッドを利用する必要があります。moveActiveSheetメソッドでは左端から数え上げていくため、今回は「1」を設定します。

//作成シートにカーソルをフォーカス
dst_sheet.setActiveSheet(new_sheet);
//カーソルフォーカスされた作成シートを左から1番目に移動
dst_sheet.moveActiveSheet(1);

マクロの設定

作成したGASをマクロとして実行するための設定を行います。 メニューバーから「拡張機能」→「マクロ」→「マクロのインポート」の順に選びます。

sheetCopyの欄で「関数の追加」をクリックするとマクロとして実行することができるようになります。

実行する際には「拡張機能」→「マクロ」から、登録した関数名をクリックします。 今回作成した関数を実行すると画像のような入力画面が出現します。

テキストボックスにコピー先のシートidを入力し「OK」ボタンを押せば、マクロを実行した時のシートがコピーされます。

おわりに

今回はスプレッドシートのコピーをGASで行う方法について解説していきました。ルーターのブログではGASについての記事が他にもありますので、合わせて読んでいただければ幸いです。

Google Apps ScriptのdoGetを使ってスプレッドシートの前処理

【Line Notify】お手軽なGASでLINEへ通知してみよう!

外部からJSONをPOSTするだけでGoogleSpreadSheetにデータを書き込む

Pocket

CONTACT

お問い合わせ・ご依頼はこちらから