みなさんこんにちは。zak-papaです。
前回は「if」文や「switch」文による「条件分岐」についてお伝えしました。

そして、GASのための「JavaScript」シリーズ第4弾は、「繰り返し処理」です。「ループ」とも言われますね。
プログラムでは、「同じ処理を何度も繰り返し実行する」場面がしばしばあります。例えば「セルの入っている最終行(例:100行)までセルの値を取得(出力)する」といった場合に、100回同じような処理を書くことで実行することはできます。
しかし、1つ1つのセルに同じような処理を記述していくのは効率的ではないですよね。このように『同じ処理を繰り返し実行する』方法として「for文」、「while文」があります。これらを用いることでたった数行で繰り返し(ループ)処理を実行することができます。
今回は「繰り返し(ループ)処理」の処理方法として上記2つの使い方について見ていきましょう。
◆「GASのためのJavaScript」シリーズ
【GAS】JavaScript基本① 〜 基本的な「書き方」や「変数」を理解しよう
【GAS】JavaScript基本② 〜 「データ型」について理解しよう
【GAS】JavaScript基本③ 〜 if文、switch文で「条件分岐」をしてみよう
【GAS】JavaScript基本④ 〜 for文、while文で「繰り返し(ループ)」処理をしてみよう
【GAS】JavaScript基本⑤ 〜 複数の値を扱う「配列」「オブジェクト」を理解しよう
目次
「for」文で繰り返し処理をしてみよう
まずは、「for」文を使った「繰り返し処理(ループ)」について見ていきましょう。
下図のようにログに「1から10まで」の数字を出力したいと思います。「繰り返し」といっても同じ「数字」を繰り返しているわけではなく、「数字を出力する」という「処理」を繰り返している点にご注意ください。
今までの知識を使えばログに「1から10まで出力」することくらいは簡単にできますね。そうです。10回「Logger.log()」で出力すればいいだけです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
function loopFor() { // 1から10までをログに出力 Logger.log(1); Logger.log(2); Logger.log(3); Logger.log(4); Logger.log(5); Logger.log(6); Logger.log(7); Logger.log(8); Logger.log(9); Logger.log(10); } |
少し面倒ではなかったでしょうか。
では、次に「1から100まで出力」と言われた場合はどうでしょうか。面倒くさくてやってられないですよね。
しかし、「for」文を使うことで「たった3行」で同じ処理を行うことができます。これが「for」文を使うメリットです。次から見ていきましょう。
「for」文の書き方
「for」文は次のような構文になっています。
「for」に続く( )の中は「;(セミコロン)」で区切ります。また、最後の「}(波括弧)」の後に「;(セミコロン)」は不要です。
for( 初期化式 ; 条件式 ; 増減式 ){
「条件式」が「true」の間繰り返す処理
}
上記だけではわかりにくいですよね。
では、実際のコードを見てみましょう。赤枠の部分が「for」文になります。「3行」で先ほどと同じ処理を記述することができました。
1 2 3 4 5 6 7 8 |
function loopFor() { // 1から10までをログに出力 for (var i = 1; i <= 10; i += 1) { Logger.log(i); } } |
先ほどの「初期化式」「条件式」「増減式」は下記の部分になります。
上記はつまり、
「初期化式」で変数(i)をどの値から始めて(例では「1」から)、
「条件式」で変数(i)をどの値まで繰り返すか決めて(例では「10」まで)、
「増減式」で変数(i)をどのくらいずつ増やす・減らすか決める(例では「1」ずつ増やす)
といった構文になっています。
式 | 使用例 | 説明 |
初期化式 | var i = 1 | カウンタ変数(i)の「初期値」(どの値から始めるか)を決める (カウンタ変数は「i」が一般的に使用される) |
条件式 | i <= 10 | カウンタ変数(i)を「繰り返す条件」(どの値まで繰り返すか)を決める (この式がtrueの間実行される) |
増減式 | i += 1 i ++ |
カウンタ変数(i)の「値の増減」(どのくらい増やす・減らすか)を決める (増減式は「i ++」, 「i −−」が一般的に使用される) |
変数自身を更新する場合は「i += 1」のように記載していました。
実はもっと簡単な方法が用意されており、「1ずつ増やす」には「i ++」「1ずつ減らす」には「i −−」があります。
こちらの方が一般的に使われており簡易的なので積極的に使っていきましょう。
まずはこの形を覚えておきましょう。
「for」文の途中でループを終了する
続いて、ループを途中で「終了」する処理について見ていきましょう。「break」というキーワードを使います。
次の図は、変数(i)が「5」のときに終了する処理です。
前回学んだ「if」文を使って「for」文の中で条件分岐すればいいですね。「if」文についてはこちらを確認ください。

1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
function loopFor() { for (var i = 1; i <= 10; i++) { // 1から4までをログに出力 if (i === 5) { break; } Logger.log(i); } } |
「4」まで出力され、それ以降は出力されていませんね。このような使い方も覚えておきましょう。
「for」文の途中でループをスキップする
今度は、ループの途中で「特定の値」を「スキップ」する処理について見ていきましょう。「continue」というキーワードを使います。
次の図は、変数(i)が「3の倍数(3,6,9)」のときにスキップする処理です。
同じように「if」文を使って条件分岐しますが、「3の倍数」はどのような条件式にしたら良いでしょうか。
「変数(i)を3で割った余りが0」ということが言えるので「i % 3 === 0」とすれば良いですね。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
function loopFor() { for (var i = 1; i <= 10; i++) { // 3の倍数をスキップしてログに出力 if (i % 3 === 0) { continue; } Logger.log(i); } } |
「3」「6」「9」のときに無事スキップされましたね。どちらも使えるようにしておきましょう。
「while」文で繰り返し処理をしてみよう
続いて、「while」文を使った「繰り返し処理(ループ)」について見ていきましょう。
「for」文のときと同じように「1から10」までの数字をログに出力しながら説明します。
「while」文の書き方
「while」文は次のような構文になっています。
「while」文も最後の「}(波括弧)」の後に「;(セミコロン)」は不要です。
初期化式
while( 条件式 ){
「条件式」が「true」の間繰り返す処理
増減式
}
実際のコードを見てみましょう。赤枠の部分が「while」文になります。
1 2 3 4 5 6 7 8 9 10 11 |
function loopWhile() { var i = 1; // 1から10までをログに出力 while (i <= 10) { Logger.log(i); i++; } } |
「for」文は、forに続く( )の中で①初期化式、②条件式、③増減式を記述しましたね。
(例 : var i = 1 ; i <= 10 ; i++)
「while」文も同じように3つの式を用いて表現しますが、記述する場所が異なります。
まず、①初期化式は「while」文の外に記述します。②条件式と繰り返す処理は「while」文の中に記述し、処理の後に③増減式を記述します。
このようにして条件を満たすまで処理が繰り返される仕組みとなっています。
「無限ループ」について
では、「増減式」を書き忘れた場合はどうなるでしょうか。
変数(i)はずっと「1」のまま増えず、条件を永遠に満たさないことになります。なので、処理が終了しません。このような状態を「無限ループ」といいます。
「無限ループ」に陥ってしまった場合は、画面上部に警告が出ているので、「キャンセル」をクリックして処理を終了させましょう。
1 2 3 4 5 6 7 8 9 10 |
function loopWhile() { var i = 1; // 無限ループ while (i <= 10) { Logger.log(i); } } |
「while」文の途中でループを終了する
「for」文と同じように「while」文も「break」を使ってループの途中で処理を終了することができます。記載の仕方は同じなので説明は割愛します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
function loopWhile() { var i = 1; while (i <= 10) { Logger.log(i); i++; // 1から4までをログに出力 if (i === 5) { break; } } } |
「while」文の途中でループをスキップする
こちらも「continue」を使って「特定の値」を「スキップ」することができます。
「for」文と同じように「3の倍数」のときにスキップしたいときは、「if」文の中では「1」を足した上でスキップするようにします。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
function loopWhile() { var i = 1; while (i <= 10) { Logger.log(i); i++; // 3の倍数の時にスキップしてログに出力 if (i % 3 === 0) { i++; continue; } } } |
終わりに
以上、「for」文、「while」文による「繰り返し処理」についてお伝えしました。
繰り返し処理もGASで開発を行っていく場合には頻繁に使用するものなのでしっかりと理解しておきましょう。
また、条件分岐と同様「for」文、「while」文も他のプログラミング言語とほとんど同じ構造になっています。他の言語を学ぶ際もすんなりと理解できるでしょう。
次回はGASで複数の値を処理する「配列」、「オブジェクト」についてお伝えします。GASで6分の壁と戦うためには必須の知識となるのでしっかりと理解しておきましょう。
以上となります。最後まで読んでいただきありがとうございました!