ぜぜぜのぜんじどう

統計、GAS、旅など

【GAS】すぐに使えるコード付き!スプレッドシートに集計行を挿入する方法。

はじめに

スプレッドシートの集計を行う方法で、ぱっと思いつくのは、シートの機能であるSUM関数を使う方法だと思います。ただ、SUM関数を手入力するのも面倒ですよね。それが毎日のルーチンワークなら尚更です。Google Apps Script(GAS)を使って自動化しましょう。

スプレッドシート

シート1の1行目、2行目に適当な数値を入力しておき、下記のコードを実行してみましょう(行数、列数は、いくらあっても構いませんが、1行目から数値を入れて下さい)。

スクリプトの実行方法

1.デモ用のスプレッドシートを用意します。

f:id:reiyax:20181216175256p:plain


2.スプレッドシートのメニューバーにある[ツール]→[スクリプトエディタ]で、スクリプトエディタを起動します。

f:id:reiyax:20181216175820p:plain


2.function myFunction() {}とありますが消去して、代わりにサンプルコードをコピペします。
3.フロッピーマークをクリックして、スクリプトを保存します。スクリプトに名前を付けるよう求められますが、適当で結構です。

4.2個右にある▶(実行ボタン)をクリックします。

f:id:reiyax:20181216183946p:plain

 

5.初回のみ、「承認が必要です」とポップアップメニューが出るので、「許可を確認」をクリックし、ご自身のログインアカウントを選択します。

6.「このアプリは確認されていません。」と不安を煽るページが現れますが、左側の「詳細」をクリックします。

f:id:reiyax:20181216184226p:plain

 

7.「(安全ではないページ)に移動」をクリックします。

f:id:reiyax:20181216184851p:plain

(5-7は、初回実行時のみ必要な操作です。)

f:id:reiyax:20181216185442p:plain

3行目に1,2行目の合計が入っていれば、成功です。


サンプルコード1

・GASを使って、最終行の下にSUM関数に埋め込むコード。

function myFunction() {
var spreadsheet=SpreadsheetApp.getActiveSpreadsheet();
var sheet=spreadsheet.getSheetByName("シート1"); //”シート1”は、集計したいシートの名前に変える。

var formulas=[];
for(i=0; i<sheet.getLastColumn(); i++){
 formulas[i]= "=SUM(R1C:R[-1]C)"; //1行目が見出し行の場合は、R1CからR2Cに変える。
} sheet.getRange(sheet.getLastRow()+1,1,1,sheet.getLastColumn()).setFormulasR1C1([formulas]);   //1列目が見出し列の場合は、(sheet.getLastRow()+1,2,1,sheet.getLastColumn()-1)に変える。
}

行数、列数に拘わらず、コピペで使えるよう凡庸性を持たせていますが、見出し列、見出し行がある場合は、コメントに従って調節してください。

 

サンプルコード2

・SUM関数を使わずにGASに直接集計させるコード。

function myFunction2(){
  var spreadsheet=SpreadsheetApp.getActiveSpreadsheet();
  var sheet=spreadsheet.getSheetByName("シート1");
  
  var Row_Tot=[];
  for (var h=0;h<sheet.getLastColumn();h++){          //列数分の0で配列を埋めておく。
    Row_Tot[h]=0;
  }
 var Row=sheet.getRange(1,1,sheet.getLastRow(),sheet.getLastColumn()).getValues();
 for (var i=0;i<sheet.getLastColumn();i++){   //1行目から順にRow_Totに足していく。 
   for (var j=0;j<Row.length;j++){
      Row_Tot[i]+=Row[j][i];
    }
  }
  sheet.getRange(sheet.getLastRow()+1,1,1,sheet.getLastColumn()).setValues([Row_Tot]);
}

おわりに

今回は、簡単な合計欄の作成を題材に、スプレッドシートでのスクリプトの実行方法をお伝えしました。今後もこのブログで、すぐに使える便利なスクリプトコードをお届けしたいと考えています。上記の流れで実行していただくことを想定しています。

合計欄を作るスクリプトを2通り紹介しました。計算結果は両者同じですが、計算時間は、前者の方がほんの一瞬だけ短い気がします。今回のように場合分けなど複雑な処理を必要とせず、かつ便利な組み込み関数がある場合は、それを使った方がシンプルなコードが書けますね。また、組み込み関数をSUMから、AVERAGEに変更すれば、合計値から平均値に変更できますし、いろいろな応用が可能です。