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つ目のシートから必要なデータを集計シートへ転記する
- 残りのシートについても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曲。
ボーカルはなく、インストになっていますがいい感じです。