スプレッドシートの特定の行を何度もコピーしたり、リストにある全員にメールを送ったりする作業を想像してみてください。もしデータが100件あったら、100回同じ操作をするのはとても大変ですよね。プログラミングの学習を進めると、こうした「同じ作業を指定した回数だけ実行したい」という場面に必ず出会います。
このような定型作業を自動化する上で欠かせないのが、今回ご紹介する「繰り返し処理」です。GASでは、主に「while(ホワイル)文」と「for(フォー)文」という2つの方法を使って、コンピューターに「この作業を〇回繰り返して」と指示を出すことができます。
この記事では、GAS初心者の方に向けて、この「繰り返し処理」の基本的な仕組みと使い方を、サンプルコードを交えながら分かりやすく解説します。
最初は少し難しく感じるかもしれませんが、自動化の幅を広げるためには非常に重要な知識です。この記事を読み終える頃には、GASによる自動化の強力な武器を一つ手に入れているはずです。一緒に学んでいきましょう。
while文の繰り返し処理について
while文とは?(条件が成り立つ間、繰り返す)
while文は、繰り返し処理の基本的な方法の一つです。「while」は英語で「~の間」という意味を持つことからも分かる通り、「指定した条件が真(true)である間、ずっと処理を繰り返す」という命令です 1。
特定の回数が決まっていない場合や、「この状態になるまで続ける」といった条件で処理を繰り返したい場合に便利です。
while文の基本的な書き方
while文の構文(書き方のルール)は非常にシンプルです。
while (条件式) {
// 条件式がtrueの間、実行され続ける処理
}
( ) の中に「条件式」を書き、{ } の中に繰り返したい「処理」を書きます。
GASは、まず( )の中の条件式を確認します。
- もし条件式が
true(成り立っている)なら、{ }の中の処理を実行します。 - もし条件式が
false(成り立っていない)なら、{ }の処理は実行せず、while文全体を終了して次の行へ進みます。
{ } の中の処理が一通り終わると、再び( )の中の条件式を確認しに行き、この流れを繰り返します。
while文を使ってみよう(サンプルコード)
それでは、具体的なコードでwhile文の動きを見てみましょう。ここでは、「0から3までの数字を順番にログに出力する」という処理を行います。
function sampleWhileLoop() {
// 1. カウンター用の変数「count」を準備し、0を代入
let count = 0;
// 2. 変数「count」が4未満である間、処理を繰り返す
while (count < 4) {
// 3. 現在の「count」の値をログに出力
console.log('現在のカウント: ' + count);
// 4. 「count」の値に1を加える(インクリメント)
count++;
}
console.log('ループが終了しました。');
}
実行結果
現在のカウント: 0
現在のカウント: 1
現在のカウント: 2
現在のカウント: 3
ループが終了しました。
コードの解説
上記のコードがどのように動いているか、順番に見ていきましょう。
- まず、
let count = 0;でcountという変数を準備し、初期値として0を入れます。 while (count < 4)の行で、最初の条件チェックが行われます。- 1周目:
countは0です。「0 < 4」はtrueなので、{ }の中の処理が実行されます。 console.logで「現在のカウント: 0」が出力されます。count++により、countの値が1になります。
- 1周目:
{ }の最後まで来たので、再びwhile (count < 4)の条件チェックに戻ります。- 2周目:
countは1です。「1 < 4」はtrueなので、処理が実行されます。 - 「現在のカウント: 1」が出力され、
countが2になります。
- 2周目:
- この流れが繰り返されます。
- 3周目:
countは2。「2 < 4」はtrue。→「現在のカウント: 2」が出力され、countが3に。 - 4周目:
countは3。「3 < 4」はtrue。→「現在のカウント: 3」が出力され、countが4に。
- 3周目:
- 再び
while (count < 4)の条件チェックに戻ります。- 5周目:
countは4になりました。「4 < 4」はfalse(成り立たない)です。
- 5周目:
- 条件式が
falseになったため、while文の{ }の中は実行されず、ループから抜けます。 - 最後に、
while文の外にあるconsole.log('ループが終了しました。');が実行され、すべての処理が終わります。
注意点:無限ループ
while文を使う上で最も注意しなければならないのが「無限ループ」です。
これは、whileの条件式が永遠にfalseにならないために、処理が無限に繰り返されてしまい、プログラムが終わらなくなる状態を指します。
例えば、先ほどのコードでcount++;の行をうっかり書き忘れたとします。
// 悪い例:無限ループ
function infiniteLoop() {
let count = 0;
while (count < 4) {
console.log('現在のカウント: ' + count);
// countの値を変更する処理がない!
}
}
この場合、countの値は0のまま変わることがありません。そのため、条件式 count < 4(0 < 4)は何度チェックしてもtrueのままです。結果として、コンソールには「現在のカウント: 0」というログが無限に出力され続け、プログラムは停止できなくなります。
while文を使う際は、「いつか必ず条件式がfalseになるか?」、つまり「ループを抜けるための変数の更新処理が正しく含まれているか?」を必ず確認するようにしましょう。
ループの流れを変える「break」と「continue」
while文で作成したループは、{ }の中の処理を実行し、条件式がfalseになるまで繰り返すのが基本です。 しかし、場合によっては「ループの途中で強制的に抜けたい」あるいは「特定の場合だけ処理をスキップしたい」ということがあります。
そんな時に使うのが break(ブレイク)文と continue(コンティニュー)文です。
break文(ループを強制的に終了する)
break文は、ループの条件式がtrueかどうかに関わらず、その時点でループ全体を強制的に終了させる命令です。
if文と組み合わせて、「特定の条件が満たされたら、もうループを続ける必要はない」という場合に使われます。
break文のサンプルコード
0から順番に数字を増やしていきますが、「もし数字が3になったら」ループを抜ける、という処理を見てみましょう。
function sampleBreakLoop() {
let num = 0;
while (num < 10) { // 本来なら10未満 (0~9) まで繰り返すはず
console.log('現在の数字: ' + num);
// numが3になったらループから抜ける
if (num == 3) {
break; // この行が実行されると、whileループ自体が終了します
}
num++; // numに1を加える
}
console.log('ループが終了しました。');
}
実行結果
現在の数字: 0
現在の数字: 1
現在の数字: 2
現在の数字: 3
ループが終了しました。
コードの解説
whileの条件は num < 10 なので、本来なら0から9まで処理が繰り返されるはずです。
しかし、if (num == 3) の条件分岐が置かれているため、numが3のときに console.log で「現在の数字: 3」が出力された直後、if文の中の break; が実行されます。
その瞬間、GASは while ループを強制的に抜け、ループの外にある console.log('ループが終了しました。'); の行に進みます。
continue文(今回の処理だけスキップする)
continue文は、ループを終了させるbreakとは異なり、「その時点の処理だけを中断し、次のループの回(次の条件判定)に進む」という命令です。
if文と組み合わせて、「特定の場合だけ、{ }の中の残りの処理をスキップしたい」という場合に使われます。
continue文のサンプルコード
1から5までの数字を出力しますが、「3の時だけ出力しない」という処理を見てみましょう。
function sampleContinueLoop() {
let i = 0;
while (i < 5) {
i++; // まずiに1を加える
// iが3の時だけ、以降の処理をスキップする
if (i == 3) {
continue; // この行が実行されると、ブロック内の残りの処理を飛ばし、
// 次のwhile (i < 5) のチェックに戻ります
}
// iが3以外の時だけ、このログが出力される
console.log('i = ' + i);
}
console.log('ループが終了しました。');
}
実行結果
i = 1
i = 2
i = 4
i = 5
ループが終了しました。
コードの解説
iが1、2の時は if (i == 3) がfalseのため、continueは実行されず、console.logで値が出力されます。
iが3になった時、if (i == 3) がtrueとなり、continue; が実行されます。 すると、continue文より下にある console.log('i = ' + i); は実行されず、処理は while (i < 5) の条件判定(4周目)までスキップされます。
iが4、5の時は再び if文がfalseとなり、console.logが実行されます。 結果として、実行結果から「i = 3」だけが除外されます。
for文の繰り返し処理について
for文とは?(回数が決まっている繰り返しに最適)
繰り返し処理のもう一つの主要な方法が for(フォー)文です。
while文は「条件が成り立つ間」という少し曖昧な条件で繰り返すのが得意でしたが、for文は特に「決まった回数だけ繰り返す」という処理に非常に適しています。
「1から10まで繰り返す」「リストの件数分だけ繰り返す」といった処理は、GASではwhile文よりもfor文で書かれることが圧倒的に多いです。
for文の基本的な書き方
for文の特徴は、繰り返しに必要な3つの要素を ( ) の中にまとめて書くことです 。
for (①初期化処理; ②条件式; ③増分処理) {
// 条件式がtrueの間、実行され続ける処理
}
( )の中はセミコロン(;)で3つの部分に区切られています。
- ①初期化処理: ループが始まる前に、最初に1回だけ実行されます。ループで使うカウンター用の変数をここで準備(宣言と初期値の代入)するのが一般的です 。
- ②条件式:
while文の条件式と同じです。この条件がtrueである間、{ }の中の処理が繰り返されます 。 - ③増分処理:
{ }の中の処理が1回終わるたびに実行されます。カウンター変数の値を更新(1増やすなど)するために使われます 。
for文を使ってみよう(サンプルコード)
while文の時と似ていますが、今度はfor文を使って「1から5までの数字を順番にログに出力する」処理を作成します。
function sampleForLoop() {
// 「iが1からスタート」し、「iが5以下である間」繰り返し、「1回終わるごとにiを1増やす」
for (let i = 1; i <= 5; i++) {
// 現在の「i」の値をログに出力
console.log('現在の数値: ' + i);
}
console.log('ループが終了しました。');
}
実行結果
現在の数値: 1
現在の数値: 2
現在の数値: 3
現在の数値: 4
現在の数値: 5
ループが終了しました。
コードの解説(for文の実行順序)
for文はwhile文より少し複雑に見えますが、実行される順序を理解すれば簡単です 。
- (最初の一回だけ)
let i = 1(初期化処理)が実行されます。変数iが準備され、1が代入されます。 i <= 5(条件式)がチェックされます。- 1周目:
iは1。「1 <= 5」はtrueです。
- 1周目:
trueだったので、{ }の中のconsole.log('現在の数値: ' + i);が実行されます。「現在の数値: 1」が出力されます。{ }の処理が終わると、i++(増分処理)が実行されます。iの値が2になります。- 再び
i <= 5(条件式)がチェックされます。- 2周目:
iは2。「2 <= 5」はtrueです。
- 2周目:
console.logが実行され(「現在の数値: 2」)、i++が実行されます(iが3に)。- この「条件式チェック → 処理実行 → 増分処理」の流れが繰り返されます。
- 5周目:
iは5。「5 <= 5」はtrueです。 console.logが実行され(「現在の数値: 5」)、i++が実行されます(iが6に)。
- 5周目:
- 再び
i <= 5(条件式)がチェックされます。- 6周目:
iは6。「6 <= 5」はfalse(成り立たない)です。
- 6周目:
- 条件式が
falseになったため、for文は終了し、ループの外にあるconsole.log('ループが終了しました。');が実行されます。
while文で必要だった「カウンター変数の準備」と「カウンター変数の更新(count++)」が、for文の( )の中に集約されているため、コードがスッキリし、更新忘れ(無限ループ)を防ぎやすいのが大きなメリットです。
for文のさまざまな書き方
for文の「初期化処理」「条件式」「増分処理」の書き方を変えることで、様々な繰り返しを表現できます 。
2ずつ増やす(ステップ処理)
i++(1ずつ増やす)の代わりに i += 2(2ずつ増やす)も使えます。
// 0から10までの偶数を出力する
for (let i = 0; i <= 10; i += 2) {
console.log(i); // 0, 2, 4, 6, 8, 10 が出力される
}
数を減らしていく(デクリメント)
カウンターを減らしていく逆順のループも可能です 。
// 5から1までのカウントダウン
for (let i = 5; i >= 1; i--) {
console.log(i); // 5, 4, 3, 2, 1 が出力される
}
もちろん、for文のループ内でも、while文と同様にbreakやcontinueを使ってループの流れを制御することができます。
まとめ:繰り返し処理でGASを使いこなそう
今回は、GASで同じ作業を自動化するための強力なテクニック、「繰り返し処理」について解説しました。
- while文: 「特定の条件が成り立つ間」という、柔軟な条件で処理を繰り返す方法です。ただし、無限ループには注意が必要です。
- for文: 「1から10まで」のように、回数が決まっている繰り返し処理に最適で、コードもスッキリと書けます。
- break / continue: ループの途中で強制的に抜けたり(
break)、その回だけ処理をスキップしたり(continue)するための制御方法です。
whileとforは、GASでスプレッドシートの複数行を処理したり、リストにある全員にメールを送ったりするなど、あらゆる自動化の場面で登場する基本中の基本です。
最初は少し難しく感じるかもしれませんが、この「繰り返し」をマスターすれば、GASでできることの幅が格段に広がります。ぜひサンプルコードを実際に動かしながら、その便利な動きを体感してみてください。











