Googleスプレッドシートって便利で、たくさんシートを作ってしまいますよね。
で、時々シートを1つにまとめて集計したいって思うことありませんか?
そういう時のために今日はGASを使って複数シートを1つにまとめる方法について書いてみたいと思います。
仕様について説明します。
1つにまとめたいスプレッドシートのブックのIDを指定し、実行しているスプレッドシートに新規のシートを作成しそこに集約します。
新規で作られるシート名は集計_システム日付になります。
コードを登録して、スプレッドを開くとメニューというのが一番右にでます。
複数シートを集計するをクリックすると処理が始まります。
シートIDを入力します。(最近この形式での入力がマイブーム。)
1つにまとめられ、こんな感じで新しいシートができます。
ソースコードはこんな感じ。
function onOpen() { const ui = SpreadsheetApp.getUi() const menu = ui.createMenu('メニュー'); menu.addItem('複数シートを集計する', 'totallingSheet'); menu.addToUi(); } function totallingSheet() { let ui = SpreadsheetApp.getUi(); // シートIDの入力 let response = ui.prompt('シートIDを入力してください', ui.ButtonSet.OK_CANCEL); // キャンセル時はスクリプトを終了する if (response.getSelectedButton() == ui.Button.CANCEL) { return; } // シートIDを取得する let sheetID = response.getResponseText(); //コピー先のスプレッドシート let toSpreadSheet = SpreadsheetApp.getActiveSpreadsheet(); //コピー先のシートを新規作成する。シート名は「集計_」+システム日付 let newSheet = toSpreadSheet.insertSheet(); let newSheetName = "集計_" + Utilities.formatDate(new Date(), "Asia/Tokyo", "yyyyMMddhhmmss"); newSheet.setName(newSheetName); //コピー元のスプレッドシート let fromSheet = SpreadsheetApp.openById(sheetID); //コピー元のスプレッドシート let fromSpreadSheet = fromSheet.getSheets(); //コピー元のシート分ループする for (let i = 0; i < fromSpreadSheet.length; i = i + 1) { //シートの内容を取得する let data = fromSpreadSheet[i].getDataRange().getValues(); //取得したデータの先頭行(ヘッダ)を削除する data.shift(); //取得したデータをコピー先シートの最終行以降に書き込む let lastlow = newSheet.getLastRow(); //空の場合を考慮しチェックする if (data.length > 0) { newSheet.getRange(lastlow + 1, 1, data.length, data[0].length).setValues(data); } } }
今日はGASを使って複数シートを1つにまとめる方法について書いてみました。