【初心者向けGAS】条件に応じてループを制御する2つの方法~break文とwhile文~

★気に入ったらシェアをお願いします!


control

photo credit: pburka Turn to open via photopin (license)

みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。

初心者向けGoogle Apps ScriptのシリーズとしてBotの作り方についてお伝えしています。

前回の記事はこちらです。

【初心者向けGAS】スプレッドシートのセルに値を入力する基礎の基礎
初心者向けGoogle App Scriptのシリーズとして、Botを作成していきます。今回は、setValueメソッドを使って、スプレッドシートのセルに値を入力する基本中の基本をお伝えします。

GASを使ってスプレッドシートのセルに値を入力する方法をお伝えしました。

今回は、GASで条件に応じてループを制御する2つの方法としてbreak文を使う方法と、while文を使う方法についてお伝えしますね。

前回までのおさらい

まず、題材となっているスプレッドシートはこちらです。

名言botのスプレッドシート

名言が一覧されていまして、この名言を一つずつ通知していきたいのです。

前回までで作成したスクリプトがこちらです。

シートの2行目から順にBotで通知(今はログ出力ですが)していき、通知したところは目印として、D列に「true」を入力するというものです。

ただ、このスクリプトを実行してみるとわかりますが、以下のようにTRUEが入っていない名言が全部ログ出力されちゃいます。

GASで名言をログ出力した

Botなので、一回の実行で通知する名言は一つで良いんですね。

その方法を今回は考えていきます。

break文でforループを抜ける

スクリプトではD列が「true」でない行を見つけたら、その行の名言をログ出力して、「true」と入力するようになっています。

ですから、そのタイミングでforループ文を抜けることができれば良いわけです。

そんなときに、break文を使えばループを抜けることができます。

書き方はシンプルにこうです。

break

このbreak文が含まれているforループを即時に抜けることができます。

今回のように、if文の中で特定の条件にマッチしたときに抜ける、という使い方がスタンダードです。

Botで通知をしたらループを抜けるスクリプト

このbreak文を使って、反復を抜けるようにすると、スクリプトは以下のようになります。

実行すると、以下のようにTRUEではない最初の行の名言だけがログ出力されて、スクリプトの実行は終了します。

GASで名言を一つだけログ出力した

while文で条件が成立している間繰り返す

今回の目標を実現する別の方法があります。

それはwhile文を使う方法です。

while文はfor文と同様に処理を反復したいときに使うものですが、条件式が成立している間だけ繰り返すという機能を持つものです。

書き方は以下の通りです。

while(条件式) {
 //繰り返したい処理
}

つまり、この条件式がtrueである限りずっと繰り返しをするのです。

while文を使ったスクリプト

今回の例でいうと、以下のようなスクリプトを組むことができます。

カウント用変数iを初期値2で用意して、D列に何らかの値が格納されている間は単純にプラス1をします。

文字列は空文字でなければtrueを返しますからね。

i行目がD列に何も入力されてなければ、ループを終了します。

ループを抜けたとき、i行目は初めてD列が空文字だった行になります。

ですから、その行について、名言をBotしてtrueを書き込めばOKというわけです。

実行すると、先ほどのbreak文の例と同様の結果が得られますので、確認をしてみてください。

while文を使う際の注意点

今回、whileループ内の処理にi++を入れていなかったとすると、while文の条件式が一生falseになることがありませんので、ループを終了することができません。

その場合、永久に実行される無限ループとなってしまいます。(GASの場合は、ルールで6分を超えると強制停止になりますが。)

ですので、while文を使うときは、ループがちゃんと終了される時が来るように設計する必要がありますので、その点注意をしてくださいね。

まとめ

以上、Google Apps Scriptで条件によってループを制御する2つの方法をお伝えしました。

今回の例でいうと

  • if文が成立したときにbreak文でループを抜ける
  • while文で条件式が成立している間繰り返す

のどちらでもOKですが、どちらも重要なので両方使いこなせるようにしておくと良いです。

次回はセル範囲を行数、列数も使って取得する方法についてお伝えします。

【初心者向けGAS】 スプレッドシートのセル範囲を行数・列数を使って取得する
初心者向けにGoogle Apps ScriptでBotを作成する方法についてシリーズでお伝えしています。今回は、GASでスプレッドシートのセル範囲を行数・列数を使って取得する方法をお伝えしていきます。

どうぞお楽しみに!

連載目次:超初心者向けGASでBotを作りながら基礎を学ぶ

Google Apps Script(GAS)をはじめるためのメリットは山程ありますが、何を作ったらいいの?と悩んでしまうこともありますよね。そんな時に、おすすめしたいのが「Bot」の作成です。このシリーズでは、超初心者向けにGASでBotを作る方法を題材としながら、GASプログラミングの一通りの流れと書き方について学んでいきます。
  1. 【初心者向けGAS】本当の最初の一歩!スクリプトエディタでプロジェクトを開く
  2. 【初心者向けGAS】はじめてのスクリプトを作成し、保存し、実行する
  3. 【初心者向けGAS】プログラミングに必須の変数の使い方とデータ型について
  4. 【初心者向けGAS】ログを表示するLogger.logの使い方
  5. 【初心者向けGAS】スクリプト実行時の「承認」でびっくりしないために
  6. 【初心者向けGAS】Spreadsheetサービスの「オブジェクト」の基礎の基礎を知ろう
  7. 【初心者向けGAS】スプレッドシートのシートを取得する2つの方法
  8. 【初心者向けGAS】スプレッドシートのセル・セル範囲とその値を取得する方法
  9. 【初心者向けGAS】 for文を使ったスプレッドシートの繰り返しの超基本
  10. 【初心者向けGAS】条件分岐をするif文の使い方の超基本
  11. 【初心者向けGAS】スプレッドシートのセルに値を入力する基礎の基礎
  12. 【初心者向けGAS】条件に応じてループを制御する2つの方法~break文とwhile文~
  13. 【初心者向けGAS】 スプレッドシートのセル範囲を行数・列数を使って取得する

The following two tabs change content below.
1976年こどもの日生まれ。東京板橋区在住。「ITで日本の『働く』の価値を上げる!」をテーマに、VBA&GASの開発、講師、コンサル、執筆本を中心に活動しています。→詳しいプロフィールはコチラ ★ご依頼・ご相談はお気軽にどうぞ!→お問い合わせはコチラ ★フォロー頂ければ嬉しいです。