【GAS GoogleAppsScript | 初心者向け】よく使う繰り返し処理”for文”を紹介

こんにちは、書川(カキカワ)です。

これから紹介する繰り返し処理のfor文と、以下の記事で紹介している条件式を組み合わせると、自動化のシステムを作れるようになります。

基本的なプログラミングでは、複雑な考え方は必要はなくて、始めに条件分岐と繰り返し処理を理解することが重要です。

以下の記事では、自動でSlackに通知するシステムを作成する方法を紹介しているので参考になればうれしいです。

繰り返し処理で使うfor文(ループ)の基本

for文は、繰り返しの処理を行うときに使います。

膨大な量のデータがあっても全て処理を終えるまで処理は止まりませんので、与える条件を間違えれば無限ループになり、それが他者への通知なのであれば迷惑をかけてしまう可能性もあるので十分に注意が必要です。

for文の書き方

for(初期化式;条件式;増減式){
//繰り返す処理
}

どこから(初期化式)、どこまで(条件式)、どれだけセルを数えるか(増減式)

上記の3つの式でどのように処理を繰り返すかを設定できます。

初期化式

for文の初期化式では、慣例としてカウンタ変数「i」、「j」、「k」などが定義されます。
重要なのは、他の誰かがコードを読んだときに分かりやすくなっていればグッドということです。

数表などの1行目はほとんどが、カテゴリ名が入っているから、2行目から数えていくことになるでしょう。その場合、ループのスタート地点である初期値は「2」となる。

for(var i = 2 ;条件式;増減式){
//繰り返す処理
}

条件式

Google Spreadsheetsのセルに仮定の数値を入力

実際にスプレッドシートのA列2行目のセルから適当な数値を6行目まで、5つほど入力してテスト用の仮定のデータを画像の通り数表を作成しました。

for文での条件式は、カウンタ変数の範囲を決定することで処理を繰り返す条件を設定します。

画像のスプレッドシートには要素が6行までしかないので、6行目まで処理をすると決めてもいいが、実務においてはデータというのは、増えたり減ったりするものなので汎用性がなくなります。

そのため、この場合は、最終行を取得する方法で解決します。
詳細は以下の記事で解説しているので是非ご覧ください。

最終行取得して「LastRow」と定義した変数に代入します。

//最終行を取得する。
var sheet = SpreadsheetApp.getActiveSheet(); 
var LastRow = sheet.getLastRow()

増減式で増やした変数 「 i 」 が最終行を超えて処理を続けることがないように、「比較演算子」を使って条件式を書きます。

カウンタ変数は最終行まで増える条件に設定するので、「i <= LastRow」と書きます。

for(var i = 2 ;i <= LastRow ;増減式){
//繰り返す処理
}

増減式

増減式は、繰り返しの処理を行うたびにカウンタ変数をどれだけ増減させるかを決める式。

自動化を行う際は、一つ一つのセルを確認する必要があるから、カウンタ変数を1ずつ加算する式を表記するには「i = i + 1」を意味する「 i++ 」と表記。

for(var i = 2 ;i <= LastRow ;i++){
//繰り返す処理
}

実際に、セルの値を取得するスクリプトを書く

メニューバーのツールから、スクリプトエディタを開く。

以下のコードをコピーアンドペーストする。A列の2行目から処理する設定になっているから、コードを触ってスクリプトを回しながら検証することを勧める。

function myFunction() {
  //現在のシートを取得する。
  var sheet = SpreadsheetApp.getActiveSheet();

  //最後の行を取得する。
  var lastRow = sheet.getLastRow();

  //以下からfor文です。
  for(var i = 2; i <= lastRow; i++) {
    //セルの値を取得する事を繰り返すごとに、変数 i に1が加算されます。
    Logger.log(sheet.getRange(i, 1).getValue());
  }
}

コピペができたら、デバッグをしてからログを確認。

僕自身、初めてfor文を書いてスクリプトを回した時はすごく感動したことを覚えています。

まとめ

この記事では、繰り返しの処理を行う際に使うfor文について解説しました。

これらを理解する必要があっても暗記する必要はありません。必要な時にどの方法があるかという引き出しを持ち、分からなくなったらまた調べればいいと思います。
調べることもせずに周りのリソースを無駄遣いする方もいるからそんな人にならないようにするだけだと思います。

もしプログラミングに興味がある方は、本よりもUdemyの方が体系的ではなく実戦的に学ぶことができるかも知れませんね。ケースバイケースですが。

プログラミングの本に書いてある事は、どれも同じことしか書いていないのが事実。Udemyでは本で学ぶよりも何倍もの価値を得られる気がしました。

→Udemyの講座をみてみる

そんな感じです。


Asset
13 Posts
Bygone
28 Posts
Coding
14 Posts