【GAS超入門】繰り返し処理の基本

スプレッドシートの特定の行を何度もコピーしたり、リストにある全員にメールを送ったりする作業を想像してみてください。もしデータが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
ループが終了しました。

コードの解説

上記のコードがどのように動いているか、順番に見ていきましょう。

  1. まず、let count = 0;count という変数を準備し、初期値として0を入れます。
  2. while (count < 4) の行で、最初の条件チェックが行われます。
    • 1周目: count0です。「0 < 4」はtrueなので、{ }の中の処理が実行されます。
    • console.logで「現在のカウント: 0」が出力されます。
    • count++ により、countの値が1になります。
  3. { }の最後まで来たので、再び while (count < 4) の条件チェックに戻ります。
    • 2周目: count1です。「1 < 4」はtrueなので、処理が実行されます。
    • 「現在のカウント: 1」が出力され、count2になります。
  4. この流れが繰り返されます。
    • 3周目: count2。「2 < 4」はtrue。→「現在のカウント: 2」が出力され、count3に。
    • 4周目: count3。「3 < 4」はtrue。→「現在のカウント: 3」が出力され、count4に。
  5. 再び while (count < 4) の条件チェックに戻ります。
    • 5周目: count4になりました。「4 < 4」はfalse(成り立たない)です。
  6. 条件式がfalseになったため、while文の{ }の中は実行されず、ループから抜けます。
  7. 最後に、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. ①初期化処理: ループが始まる前に、最初に1回だけ実行されます。ループで使うカウンター用の変数をここで準備(宣言と初期値の代入)するのが一般的です 。
  2. ②条件式: while文の条件式と同じです。この条件がtrueである間、{ }の中の処理が繰り返されます 。
  3. ③増分処理: { }の中の処理が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文より少し複雑に見えますが、実行される順序を理解すれば簡単です

  1. (最初の一回だけ) let i = 1 (初期化処理)が実行されます。変数iが準備され、1が代入されます。
  2. i <= 5 (条件式)がチェックされます。
    • 1周目: i1。「1 <= 5」はtrueです。
  3. trueだったので、{ }の中の console.log('現在の数値: ' + i); が実行されます。「現在の数値: 1」が出力されます。
  4. { }の処理が終わると、i++ (増分処理)が実行されます。iの値が2になります。
  5. 再び i <= 5 (条件式)がチェックされます。
    • 2周目: i2。「2 <= 5」はtrueです。
  6. console.logが実行され(「現在の数値: 2」)、i++が実行されます(i3に)。
  7. この「条件式チェック → 処理実行 → 増分処理」の流れが繰り返されます。
    • 5周目: i5。「5 <= 5」はtrueです。
    • console.logが実行され(「現在の数値: 5」)、i++が実行されます(i6に)。
  8. 再び i <= 5 (条件式)がチェックされます。
    • 6周目: i6。「6 <= 5」はfalse(成り立たない)です。
  9. 条件式が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文と同様にbreakcontinueを使ってループの流れを制御することができます。

まとめ:繰り返し処理でGASを使いこなそう

今回は、GASで同じ作業を自動化するための強力なテクニック、「繰り返し処理」について解説しました。

  • while文: 「特定の条件が成り立つ間」という、柔軟な条件で処理を繰り返す方法です。ただし、無限ループには注意が必要です。
  • for文: 「1から10まで」のように、回数が決まっている繰り返し処理に最適で、コードもスッキリと書けます。
  • break / continue: ループの途中で強制的に抜けたり(break)、その回だけ処理をスキップしたり(continue)するための制御方法です。

whileforは、GASでスプレッドシートの複数行を処理したり、リストにある全員にメールを送ったりするなど、あらゆる自動化の場面で登場する基本中の基本です。

最初は少し難しく感じるかもしれませんが、この「繰り返し」をマスターすれば、GASでできることの幅が格段に広がります。ぜひサンプルコードを実際に動かしながら、その便利な動きを体感してみてください。

Dチームメルマガ登録|eBOOK「逆引きAIツールブック」プレゼント中


AIやマーケティングに関する情報を不定期配信中
eBOOK「逆引きAIツールブック」プレゼント中です
↓ ↓ ↓

Dチームメルマガはこちら>>>

 

ABOUT US
山田 どうそん
受講生3万人以上のオンラインビジネス構築のやり方を教える講師|6年以上サブスクメンバーシップのコミュニティを運営|オンラインビジネスで安定したコミュニティシステムの作り方を教えている|1人でも多くの人にオンラインビジネスで物心両面の豊かさを手に入れられるようにディレクションできたらと思っている