スプレッドシートの複数のシートから特定のシートへデータを集計するGAS(GoogleAppsScript)

Googleのスプレッドシートで複数のシートから「集計」シートなど特定のシートにデータを転記する処理をGASを使ってやる機会がありましたので、考え方・やり方を自分の備忘記録として整理しておきます。

GASを使わなくても関数でできるようなのですが。。。。

目次

スプレッドシートの複数のシートから特定のシートへデータを集計するGASの概要

今回作成したGASは複数のシートに入力されているデータを特定のシートへ転記するものです。

具体的にはこんな感じで、「月曜」というシートから「金曜」というシートまでに入力されているデータを「集計」シートに転記します


シートの1行目はタイトル行になるので、実際に転記するデータは2行目以降のデータになります。


実際の動作を動画にしていますので確認していただければイメージがつかめると思います。

スプレッドシートの複数のシートから特定のシートへデータを集計するGAS

今回作成したGASは下記のようなものです。

ネットでも似たようなものがアップされているかと思います。

function myFunction() {
  
  //複数のシートからデータを特定のシート(集計シート)へ転記するGAS 

  // シート数を取得
  
  let sh_count = SpreadsheetApp.getActiveSpreadsheet().getNumSheets();
  let master_sh = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('集計');

  // 集計シートのデータをクリア A2セルからB列の最終データセルまでをデータクリア

  master_sh.getRange(2,1,master_sh.getLastRow(),2).clearContent();

  // 各シートからデータを集計シートへ転記する

  for(let i=0;i<=sh_count-2;i++){

    let sh=SpreadsheetApp.getActiveSpreadsheet().getSheets()[i];

    let lastrow = sh.getLastRow();
    let lastcolumn =sh.getLastColumn();
    let lastrow_master = master_sh.getLastRow()+1;

    sh.getRange(2,1,lastrow,lastcolumn).copyTo(master_sh.getRange(lastrow_master,1));

  }
  Browser.msgBox('転記処理完了');
}


おおまかな流れとしてはこんな感じです↓

スクリプトの流れ
  1. スプレッドシートに存在するシート数を取得する
  2. 「集計」シートのデータをクリア
  3. 1つ目のシートから必要なデータを集計シートへ転記する
  4. 残りのシートについても1つ目のシートと同様に集計シートへのデータ転記を繰り返す

GASの内容についてざっくりと説明

GASの内容についてわかる範囲でざっくりと説明をしておきます。

For文などについては過去記事を参考にしていただければと思います。

全体のシート数を取得する(getNumsheets)

スプレッドシートに存在するシート数がいくつあるのかをまず把握しておきます。

シート数はgetNumsheets()で取得できるようなのでこれを変数「sh_count」に格納しておきます。

ここで把握したシート数を後ほどFor文を使って繰り返しの処理を行う際に使用していきます。

集計シートに記載されたデータをクリアする(getRangeとclearContent)

各シートからデータを転記する作業に入る前に、集計用のシートのデータを削除しておきます。


ここでデータを削除しておかないと、前回転記した際のデータがダブって転記されることになるので、それを防ぐためにデータの削除が必要になります。

この部分です↓

getSheets()ですべてのシートをインデックス番号で取得する。

スプレッドシートにある全てのシートをインデックス番号で取得するにはgetSheets()で取得できます。

これで一番左のシートから最後のシートまでを番号で取得することができます。

シートを名前で取得するなどほかの方法もありますが、インデックス番号で取得することでFor文の際に扱いやすくなるかと思い、今回はこの方法を選択しました。

getSheets()の注意点ですが、一番左のシートが「0」からスタートするので注意が必要です。(1からスタートしない。配列のためこんな扱いになっているようです?)

この部分↓


変数「i」には初期値として「0」がいれてあるので、上記のコードはスプレッドシートの一番左のシートを取得して変数「sh」に格納していることになります。

その他、変数「lastrow」で取得したシートの最終行などを取得しています。

今回はgetLastRowを使って取得しています。最終行の別の取得方法はこちら↓

まとめ

Googleスプレッドシートで複数のシートのデータを特定のシートに転記するGASを記事にしました。

getRangeの範囲を変更することでコピーするデータの範囲を調整できます。

あとはお好みでトリガーを設定して毎日データを転記してもいいですし、毎週、毎月など好きなタイミングでデータの集計をしてみてもいいかと思います。




【本日の近況報告】

イヤホンが壊れたので買い替えました。
Bluetoothイヤホンを購入しようか迷ったのですが、結局有線のイヤホンを購入。
有線イヤホンって絡まったりして面倒くさい&断線することもあるんですが、充電せずにすぐに使えるのでいいような気がするんですよね。

【本日の1曲】

DJ Numark & Pomo/Imagine

Youtubeを徘徊して見つけました。ジョンレノンの名曲イマジンをジャズヒップホップに仕上げた1曲。
ボーカルはなく、インストになっていますがいい感じです。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次