mono
こんにちは、monoです。
スプレッドシートでGAS(Google Apps Script)を使っていると、スプレッドシート側の関数ではなくGASでスプレッドシートの複数シートを集約したいときってありますよね。
当記事では「GASでスプレッドシートの複数シートを集約する方法」について解説します。
目次
GASでスプレッドシートの複数シートを集約する方法
早速ですが結論から言うと、以下のサンプルコードで「スプレッドシートIDとシート名」を自分の環境に合わせて変更するだけでOKです。
変更箇所は「consolidateSheets_definition()」内の入力と出力それぞれのスプレッドシートIDとシート名です。
入力部分
- 入力のスプレッドシートID:spreadsheetId_1…n
- 入力のシート名:sheetName_1…n
出力部分
- 出力のスプレッドシートID:targetSpreadsheetId
- 出力のシート名:targetSheetName
サンプルコード
// ###### 各変数の定義用関数 ######
function consolidateSheets_definition() {
// 集約元となる複数ファイルのスプレッドシートのスプレッドシートIDとシート名を定義
const spreadsheetSheets = [
{id: 'spreadsheetId_1', name: 'sheetName_1'},
{id: 'spreadsheetId_2', name: 'sheetName_2'},
//...
{id: 'spreadsheetId_n', name: 'sheetName_n'},
];
// 集約先となるスプレッドシートのスプレッドシートIDとシート名を定義
const targetSpreadsheets = {id: 'targetSpreadsheetId', name: 'targetSheetName'};
// 定義した変数を渡し値にして処理用関数を実行
consolidateSheets(spreadsheetSheets, targetSpreadsheets);
}
// ###### 以下、処理用関数 ######
function consolidateSheets(spreadsheetSheets, targetSpreadsheets) {
// 出力先のスプレッドシートとシートを取得
var targetSpreadsheet = SpreadsheetApp.openById(targetSpreadsheets.id);
var targetSheet = targetSpreadsheet.getSheetByName(targetSpreadsheets.name);
// 出力先のシートが存在しない場合は新規作成
if (!targetSheet) {
targetSheet = targetSpreadsheet.insertSheet(targetSheetName);
}
// 初めてのデータ取得かどうかのフラグ
var isFirst = true;
// 各スプレッドシートIDとシート名をループ
spreadsheetSheets.forEach(function(spreadsheetSheet) {
var spreadsheet = SpreadsheetApp.openById(spreadsheetSheet.id);
var sheet = spreadsheet.getSheetByName(spreadsheetSheet.name);
// シートからデータを取得
var data = sheet.getDataRange().getValues();
// 最初のシートだけヘッダー(最初の行)もコピーする
if (isFirst) {
targetSheet.getRange(1, 1, data.length, data[0].length).setValues(data);
isFirst = false;
} else {
// 2枚目以降のシートはヘッダー行を除いてコピー
targetSheet.getRange(targetSheet.getLastRow() + 1, 1, data.length - 1, data[0].length).setValues(data.slice(1));
}
});
}
上記のコードだと、spreadsheetSheetsの配列で定義した複数ファイルのデータを、targetSpreadsheetsにまとめて出力します。
スプレッドシート関数を使わないメリット
スプレッドシートの関数を使用しないので、定常的にシートが重くなることを防げます。
GASの実行方法
実行は「スケジュールで時刻トリガー」もしくは「スプレッドシートのメニューに手動実行のタブを追加」すると便利です。
GASの勉強におすすめの入門本ランキング18選!【学習方法も解説】
「GAS(Google Apps Script)を勉強したいけど勉強方法がわからない、体系的にまとまっている学習書や良書を知りたい」と困っていませんか? 「プログラミングは体系的...