【初心者向けGAS】条件分岐をするif文の使い方の超基本


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

初心者向けGoogle Apps Scriptのシリーズとして、Botを作りながらGASプログラミングの基礎の基礎についてお伝えしています。

前回の記事はこちら。

【初心者向けGAS】for文を使ったスプレッドシートの繰り返しの超基本
初心者向けGoogle Apps Script超入門、GASプログラミングの基本を学んでいきます。今回は、for文を使った繰り返しの超基本。カウント変数、初期化式、条件式、増加式の意味と使い方です。

for文を使った繰り返し処理の基本についてお伝えしました。

さて、今回はもう一つの重要な制御構文についてです。

ということで、Google Apps Scriptで条件分岐をするif文の使い方の超基本、行ってみましょう!

スポンサーリンク

前回のおさらいと今回のお題

題材としているスプレッドシートはこちらです。

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

これに対して、前回以下のようなスクリプトを作成しました。

function myFunction() {
  const sheet = SpreadsheetApp.getActiveSheet();
  const lastRow = sheet.getLastRow();
  for(let i = 2; i <= lastRow; i++) {
    console.log(sheet.getRange(i, 1).getValue());
  }
}

実行すると以下のようなログ出力が得られます。

GASで名言を繰り返しでログ出力

Botのアルゴリズム

ただ、作りたいのはBotなんですよね...。毎回の実行で、こんなに全部送ったら、大変です。

つまり、1回の実行で、1つの名言について、Botとして送りたいわけです。

それで、そのために以下のような方針でスクリプトを改善していきます。

  1. for文を使って上から順に走査していく
  2. 「印」がない名言があれば、送信して「印」をつける
  3. 全てに「印」がついているときは、全ての「印」を消去する

こんなアルゴリズムでBotを作っていきたいと思います。

「印」の付け方

それで、印の付け方なのですが、シートのD列を以下のようにしてみました。

スプレッドシートにif文に使うチェック用の列を追加

つまり、D列の「isSent」列は、基本的には「空文字」としておいて、一度Botとして送信した名言には「TRUE」と入力するようにするのです。

このようにすれば、実行のたびにfor文で2行目から走査して、D列が「空文字」の名言があったら、Botを送信すればよいということになりますよね。

if文の使い方

「D列の値が空文字であれば~する」というように、条件に応じて処理を分岐させたいときにはif文を使います。

書式はこちらです。

if(条件式) {
 // 条件式がtrueだったときの処理
}

んー、わかるような、わからないような…

条件式とは

条件式「成立している」または「成立していない」のどちらか一方の値をとる式です。

条件式は、以下のような比較演算子を使い、成立している場合はtrueという値を、そうでない場合はfalseという値をとります。

比較演算子 意味
=== 等しい
!== 等しくない
< 小さい
<= 以下
>= 以上
> 大きい

ですから、例えば「10 <= 100」はtrueになりますし、「5 === 10」はfalseになります。

文字列の判定と否定の論理演算子

さて、今回の場合ですが、for文で2行目から走査したとして、D列の値が「空文字」の場合に、Botを送信したいということになります。

ですので、普通に書くのであれば

if(sheet.getRange(i, 4).getValue() === ''){ 
  console.log(sheet.getRange(i, 1).getValue());
}

などという条件式になります。

ですが、空文字つまり長さゼロの文字列は暗黙的にfalseというルールがありますので、これを活用すると以下のように書けます。

if(!sheet.getRange(i, 4).getValue()){ 
  console.log(sheet.getRange(i, 1).getValue());
}

「!」は条件式の結果を反転する論理演算子と呼ばれる記号です。「ではない」という意味ですね。

!条件式

なお、文字列で言えば、長さが1以上の文字列は暗黙的にtrueというルールもありますので、覚えておくと便利ですよ。

if文による条件分岐を使ったスクリプト

以上を踏まえて、以下のようなスクリプトを作成してみました。

function myFunction() {
  const sheet = SpreadsheetApp.getActiveSheet(); 
  const lastRow = sheet.getLastRow();
  
  for(let i = 2; i <= lastRow; i++) {
    if(!sheet.getRange(i, 4).getValue()){ 
      console.log(sheet.getRange(i, 1).getValue());
    }
  }
}

D列を判定して、空文字であればA列の名言をログ出力するというものです。

結果はこちらです。

GASでif文による条件分岐を使ったスクリプトの結果

D列について「TRUE」ではない行についての名言がログ出力されました。

まとめ

以上、Google Apps Scriptで条件分岐をするif文の使い方の超基本についてお伝えしました。

if文の使い方、条件式、また空文字は暗黙的にfalseとなるという点がポイントですね。

次回は、セルに値を入力する方法についてお伝えします。

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

どうぞお楽しみに!

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

Google Apps Script(GAS)をはじめるためのメリットは山程ありますが、何を作ったらいいの?と悩んでしまうこともありますよね。そんな時に、おすすめしたいのが「Bot」の作成です。このシリーズでは、超初心者向けにGASでBotを作る方法を題材としながら、GASプログラミングの一通りの流れと書き方について学んでいきます。
  1. 【初心者向けGAS】本当の最初の一歩!スクリプトエディタでプロジェクトを開く
  2. 【初心者向けGAS】はじめてのスクリプトを作成し、保存し、実行する
  3. 【初心者向けGAS】プログラミングに必須の変数&定数の使い方とデータ型について
  4. 【初心者向けGAS】ログを表示するconsole.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】スプレッドシートのセル範囲を行数・列数を使って取得する
  14. 【初心者向けGAS】スプレッドシートのセル範囲をクリアするいくつかの方法
  15. 【初心者向けGAS】Google Apps ScriptでWeb APIを活用するための基礎知識
  16. 【初心者向けGAS】面倒なことはライブラリに任せよう!その概要と追加の方法
  17. 【初心者向けGAS】Chatworkのマイチャットにメッセージを送る最も簡単な例
  18. 【初心者向けGAS】Google Apps Scriptで別の関数を呼び出すfunctionの書き方
  19. 【初心者向けGAS】時限式のイベントトリガーを設置して決まった時刻にBotを送信する方法
  20. 【初心者向けGAS】プロパティストアの概要とスクリプトプロパティの編集方法
  21. 【初心者向けGAS】スクリプトプロパティを操作してそのデータを取り出す方法
  22. 【初心者向けGAS】スプレッドシートのセル範囲の値を二次元配列として取得して取り扱う方法
  23. 【初心者向けGAS】Chatworkのメッセージ記法でBot送信するメッセージを装飾する方法
  24. 【初心者向けGAS】Google Apps Scriptのドキュメンテーションコメントの書き方

コメント

  1. ペコ より:

    はじめまして。初心者です。
    【初心者向けGAS】条件分岐をするif文の使い方の超基本 の次の
    「次回は、セルに値を入力する方法についてお伝えします。」の記事はどこにありますでしょうか?

  2. Chris より:

    文字列の判定と否定の論理演算子
    さて、今回の場合ですが、for文で2行目から走査したとして、D列の値が「空文字でなかった」場合に、Botを送信したいということになります。

    お世話になります。
    上記D列の値が「空文字でなかった」と書いてありますが、文面から読むと、逆ではないかと思いますが、ご確認頂けますでしょうか?

    • Chrisさん

      コメントありがとうございます!
      おっしゃるとおりですね…失礼しました。

      「空文字の場合」と修正をさせていただきました。
      引き続き、弊ブログをどうぞよろしくお願いいたします。

  3. yohan より:

    1回の実行で、1つの名言について、Botとして送りたいわけです。

    お世話になっております。
    この記事のスクリプトでは、「TRUE」がついていないものは
    一斉に送れてしまいますよね?

    • yohanさん

      はい、おっしゃる通りですね。わかりづらくてごめんなさい。
      この記事は連載の一部になっていまして、以降の連載をご覧いただくと、以下の記事あたりで解決できるようになっております。
      https://tonari-it.com/gas-loop-break-while/

      今後とも、弊ブログをどうぞよろしくお願いいたします。

  4. yohan より:

    先ほどコメント入れましたが、この記事しか読まずに
    送ってしまいました。
    大変申し訳ありません。

    とてもわかりやすく、説明してくださっているので
    全部読ませて頂きます。

タイトルとURLをコピーしました