2022/05/16に更新

【GASで時短】フォルダ内のスプレッドシートを結合する

スプレッドシートドライブ

指定したフォルダにあるスプレッドシートをすべて連結するGoogle Apps Scriptです。生徒・受講者の課題をチェックするときに1ファイルずつ開くのは面倒で、1つのスプレッドシート(ブック)にまとめたくなったので作りました。

こんな悩みを解決します


  • Googleドライブフォルダに大量のスプレッドシートがあるが、すべて結合したくなった
  • 生徒に個別のスプレッドシートで課題を提出してもらったが、1ファイルずつ見るのは大変なので1ブックにまとめたい

用意するもの


特にありません。今お使いのスプレッドシートに組み込めます。

このスクリプトで出来ること


  • 指定したGoogleドライブフォルダにあるすべてのスプレッドシートを、今開いているスプレッドシートに結合します。

使い方


1.データの準備

スプレッドシートを用意します。このスプレッドシートにフォルダ内の全てのシートが集まってきます。
現在はシート1しか存在しません。

2.スクリプトの実行

上のメニューにある「スクリプト実行」から「指定フォルダのスプレッドシートをすべて連結する」を実行します。

3.URLの入力

結合したいファイルが保存されているGoogleドライブのURLを入力します。

4.結果の確認

シートがどんどん追加されていきます。
「シート1のコピー」のように中身がわかりづらくなってしまいますが、課題の提出であれば学生の名前をシート名にしておいてもらうなど、事前にユニークになるように案内することで回避できそうです。

スクリプト


/**
 * このスクリプトの説明、使い方はこちら。
 * https://myfunc.jp/items/00085/index.html
 */

function onOpen() {
  // スプレッドシートを開いたときに実行される関数

  // UIの取得
  const ui = SpreadsheetApp.getUi()

  // メニューの表示名
  const menu = ui.createMenu('スクリプト実行');

  // メニューに追加するボタン
  menu.addItem('指定フォルダのスプレッドシートをすべて連結する', 'concatenate_all_sheets_in_folder');

  // メニューを画面に追加する
  menu.addToUi();
}


function concatenate_all_sheets_in_folder() {

  // UIの取得
  const ui = SpreadsheetApp.getUi()

  // 開いている(アクティブな)スプレッドシートオブジェクトを取得
  const ss = SpreadsheetApp.getActiveSpreadsheet();

  // 結合したいファイルが入っているGoogleドライブのURLを入力してもらう
  const input = ui.prompt('GoogleドライブフォルダのURLを入力してください', ui.ButtonSet.OK_CANCEL);

  // キャンセルが押されたらスクリプトを終了する
  if (input.getSelectedButton() == ui.Button.CANCEL) {
    return;
  }

  // 入力されたURLを取り出す
  const url = input.getResponseText();

  // フォルダURLからID部分を取得する
  const folder_id = url.replace(/^https:.*folders\//, '');

  // フォルダ内のファイルを取得する
  const files = DriveApp.getFolderById(folder_id).getFiles();

  // ファイルが存在する限り、処理を繰り返す
  for (let i = 0; files.hasNext(); i++) {

    let file = files.next(); //ファイルを取得

    // ファイルがスプレッドシートかどうか判断するために、mimetypeを取得
    let mimetype = file.getMimeType();

    // スプレッドシートのmimetypeは「application/vnd.google-apps.spreadsheet」
    if (mimetype.match(/spreadsheet/)) {

      // コピー対象のスプレッドシートを取得
      let ss_copy = SpreadsheetApp.openById(file.getId());

      // スプレッドシート内の全シートを取得
      let sheets_copy = ss_copy.getSheets();

      // シートの数だけ、今開いているスプレッドシートにコピーする
      for (let j = 0; j < sheets_copy.length; j++) {

        sheets_copy[j].copyTo(ss);

      }
    }
  }
}

関連するアプリ


【GASで便利に】キーワードを含むセル番地を一覧表示する

検索キーワードを全シートから探して、ヒットしたセル番地をまとめて表示するGoogle Apps Scriptです。標準の検索機能ではヒットしたセルが1個ずつ分かりますが、まとめて知りたくなったので作成しました。

【GASで時短】全シートに条件付き書式をセットする

すべてのシートに条件付き書式を適用してくれるGoogle Apps Scriptです。条件付き書式は便利ですが手動で設定するのは面倒なんですよね。

【GASで時短】全シートの条件付き書式を削除する

すべてのシートのすべての条件付き書式を削除するGoogle Apps Scriptです。条件付き書式はシート単位で操作する必要があり、面倒なので作成しました。

【GASで時短】アクティブシート以外の全シートを削除する

現在開いているシート以外の全てのシートを削除するGoogle Apps Scriptです。自動的にシートを大量生成したけどやり直したいときなどに。

【GASで時短】全てのシートのデータを1シートにまとめる

スプレッドシートの全てのシートのデータを、1つのシートに集約するGoogle Apps Scriptです。各シートで列が揃っていないと使いにくいですが、思いつきで作ってみました。

【GASで時短】すべてのシートを非表示にする

いま開いているシート以外のすべてのシートを非表示にするGoogle Apps Scriptです。あまり見られたくない作業用シートがたくさんあるときにどうぞ。

【GASで時短】全シートの行・列固定を解除する

全てのシートの行固定、列固定を解除するGoogle Apps Scriptです。ニーズはあんまりなさそうですが、思いつきで作ってみました。

【GASで時短】すべてのシートを保護する

スプレッドシートの全てのシートを「保護」するGoogle Apps Scriptです。一時的にすべてのシートの更新を止めたい時などにどうぞ。

【GASで時短】フォルダ内のスライドをすべて連結する

指定フォルダに入っているすべてのスライドを連結するGoogle Apps Scriptです。課題などをアップロードしてもらった後、1ファイルにまとめたい時などにどうぞ。

タグ一覧

最新のアプリ

人気のアプリ

myfunc.jp