GASで複数のシートに分かれた表を1つにまとめる方法

今回は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店のシートにある顧客情報を、全社のシートにまとめて出力しています。

また、どの店(シート)から取得したのかがわかるように、最終列に店舗名を追加しています。

複数のシートのデータを定期的に一つにまとめる場合にはすごく便利な機能なので、ぜひ活用してください!

関連メソッド

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

上部へスクロール