今回はGoogle Apps Scriptで複数のシートに分かれた表を1つの表にまとめる方法を紹介します。
例えば、店舗別のシートに分かれた顧客情報を全社のデータベースとしてまとめたい場合などに役立ちます。
また、各シートで共通の処理をしたい場合にも、1つの表にまとめてから処理を行えば、何度も同じ処理を記述する必要がなく効率的です。
さっそくですが、コピペ用コードを紹介します。
コピペ用コードの下に解説と使用例も紹介しています。
コピペ用コード
const spreadSheet = SpreadsheetApp.getActiveSpreadsheet();
const allDataSheet = spreadSheet.getSheetByName('シート名1'); //まとめたデータを出力するシート名
const sheetNames = ['シート名2', 'シート名3', 'シート名4']; //まとめたいデータのシート名
let dataList = [];
function getAllData() {
allDataSheet.getRange(2, 1, allDataSheet.getLastRow(), allDataSheet.getLastColumn()).clearContent();
for (i = 0; i < sheetNames.length; i++) {
const dataSheet = spreadSheet.getSheetByName(sheetNames[i]);
const data = dataSheet.getRange(2, 1, dataSheet.getLastRow() - 1, dataSheet.getLastColumn()).getValues();
for (r = 0; r < data.length; r++) {
data[r].push(sheetNames[i])
}
dataList = dataList.concat(data);
}
allDataSheet.getRange(2, 1, dataList.length, dataList[0].length).setValues(dataList);
}
実際に使う時に編集するのは2行目と3行目だけです。
2行目の「シート名1」には、まとめたデータを出力するシートの名前を入力します。
3行目の「シート名2」「シート名3」「シート名4」には、まとめたいデータのシート名を入力します。
まとめたいデータが3つ以上ある場合には、配列の中に追加すればOKです。
解説
スプレッドシートの取得や変数の宣言などの基本的な内容は省略し、ポイントのみ解説します。
3行目
シートごとに同じ処理を繰り返すことになるので、まとめたいデータのシート名を配列に格納します。
4行目
各シートのデータを1つの配列に格納することになるので、「dataList」という名前の空の配列を用意します。
7行目
更新する時のために、出力先シートに記入されている値をクリアします。
9~10行目
まとめたいデータのうち、1つのシートに記入されている2行目以下(見出し以外)の値をすべて取得します。
11~13行目
9~10行目で取得したデータ1行ずつの末尾にシート名を追加していきます。
これをすることで、データをまとめた時にどのシートにあったデータなのかを判別できます。
※データを判別する必要がない場合は消してもOKです。
14行目
9~13行目で取得したデータを「dataList」に追加します。
8~15行目
9~14行目までの処理をシートの枚数分繰り返し処理します。
シートの枚数分の処理が終わった時点で、「dataList」の中には各シートのデータが全て入っている状態です。
16行目
「dataList」を出力先シートに出力します。
注意点
この処理では、各データの見出しは取得しないので、出力先シートの見出しは手入力する必要があります。
使用例
A 店、B店、C店のシートにある顧客情報を、全社のシートにまとめて出力しています。
また、どの店(シート)から取得したのかがわかるように、最終列に店舗名を追加しています。
複数のシートのデータを定期的に一つにまとめる場合にはすごく便利な機能なので、ぜひ活用してください!