みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。
初心者向けGoogle Apps Scriptのシリーズとして、Botを作りながらGASプログラミングの基礎の基礎についてお伝えしています。
前回の記事はこちら。
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()); } }
実行すると以下のようなログ出力が得られます。
Botのアルゴリズム
ただ、作りたいのはBotなんですよね...。毎回の実行で、こんなに全部送ったら、大変です。
つまり、1回の実行で、1つの名言について、Botとして送りたいわけです。
それで、そのために以下のような方針でスクリプトを改善していきます。
- for文を使って上から順に走査していく
- 「印」がない名言があれば、送信して「印」をつける
- 全てに「印」がついているときは、全ての「印」を消去する
こんなアルゴリズムでBotを作っていきたいと思います。
「印」の付け方
それで、印の付け方なのですが、シートのD列を以下のようにしてみました。
つまり、D列の「isSent」列は、基本的には「空文字」としておいて、一度Botとして送信した名言には「TRUE」と入力するようにするのです。
このようにすれば、実行のたびにfor文で2行目から走査して、D列が「空文字」の名言があったら、Botを送信すればよいということになりますよね。
if文の使い方
「D列の値が空文字であれば~する」というように、条件に応じて処理を分岐させたいときには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列の名言をログ出力するというものです。
結果はこちらです。
D列について「TRUE」ではない行についての名言がログ出力されました。
まとめ
以上、Google Apps Scriptで条件分岐をするif文の使い方の超基本についてお伝えしました。
if文の使い方、条件式、また空文字は暗黙的にfalseとなるという点がポイントですね。
次回は、セルに値を入力する方法についてお伝えします。
どうぞお楽しみに!
連載目次:超初心者向けGASでBotを作りながら基礎を学ぶ
Google Apps Script(GAS)をはじめるためのメリットは山程ありますが、何を作ったらいいの?と悩んでしまうこともありますよね。そんな時に、おすすめしたいのが「Bot」の作成です。このシリーズでは、超初心者向けにGASでBotを作る方法を題材としながら、GASプログラミングの一通りの流れと書き方について学んでいきます。- 【初心者向けGAS】本当の最初の一歩!スクリプトエディタでプロジェクトを開く
- 【初心者向けGAS】はじめてのスクリプトを作成し、保存し、実行する
- 【初心者向けGAS】プログラミングに必須の変数&定数の使い方とデータ型について
- 【初心者向けGAS】ログを表示するconsole.logの使い方とテンプレート文字列
- 【初心者向けGAS】スクリプト実行時の「承認」でびっくりしないために
- 【初心者向けGAS】Spreadsheetサービスの「オブジェクト」の基礎の基礎を知ろう
- 【初心者向けGAS】スプレッドシートのシートを取得する2つの方法
- 【初心者向けGAS】スプレッドシートのセル・セル範囲とその値を取得する方法
- 【初心者向けGAS】for文を使ったスプレッドシートの繰り返しの超基本
- 【初心者向けGAS】条件分岐をするif文の使い方の超基本
- 【初心者向けGAS】スプレッドシートのセルに値を入力する基礎の基礎
- 【初心者向けGAS】条件に応じてループを制御する2つの方法~break文とwhile文~
- 【初心者向けGAS】スプレッドシートのセル範囲を行数・列数を使って取得する
- 【初心者向けGAS】スプレッドシートのセル範囲をクリアするいくつかの方法
- 【初心者向けGAS】Google Apps ScriptでWeb APIを活用するための基礎知識
- 【初心者向けGAS】面倒なことはライブラリに任せよう!その概要と追加の方法
- 【初心者向けGAS】Chatworkのマイチャットにメッセージを送る最も簡単な例
- 【初心者向けGAS】Google Apps Scriptで別の関数を呼び出すfunctionの書き方
- 【初心者向けGAS】時限式のイベントトリガーを設置して決まった時刻にBotを送信する方法
- 【初心者向けGAS】プロパティストアの概要とスクリプトプロパティの編集方法
- 【初心者向けGAS】スクリプトプロパティを操作してそのデータを取り出す方法
- 【初心者向けGAS】スプレッドシートのセル範囲の値を二次元配列として取得して取り扱う方法
- 【初心者向けGAS】Chatworkのメッセージ記法でBot送信するメッセージを装飾する方法
- 【初心者向けGAS】Google Apps Scriptのドキュメンテーションコメントの書き方
コメント
はじめまして。初心者です。
【初心者向けGAS】条件分岐をするif文の使い方の超基本 の次の
「次回は、セルに値を入力する方法についてお伝えします。」の記事はどこにありますでしょうか?
ペコさん
お待たせしました!
次の記事を更新しましたので、ご覧いただければと思います!
https://tonari-it.com/gas-setvalue/
文字列の判定と否定の論理演算子
さて、今回の場合ですが、for文で2行目から走査したとして、D列の値が「空文字でなかった」場合に、Botを送信したいということになります。
お世話になります。
上記D列の値が「空文字でなかった」と書いてありますが、文面から読むと、逆ではないかと思いますが、ご確認頂けますでしょうか?
Chrisさん
コメントありがとうございます!
おっしゃるとおりですね…失礼しました。
「空文字の場合」と修正をさせていただきました。
引き続き、弊ブログをどうぞよろしくお願いいたします。
1回の実行で、1つの名言について、Botとして送りたいわけです。
お世話になっております。
この記事のスクリプトでは、「TRUE」がついていないものは
一斉に送れてしまいますよね?
yohanさん
はい、おっしゃる通りですね。わかりづらくてごめんなさい。
この記事は連載の一部になっていまして、以降の連載をご覧いただくと、以下の記事あたりで解決できるようになっております。
https://tonari-it.com/gas-loop-break-while/
今後とも、弊ブログをどうぞよろしくお願いいたします。
先ほどコメント入れましたが、この記事しか読まずに
送ってしまいました。
大変申し訳ありません。
とてもわかりやすく、説明してくださっているので
全部読ませて頂きます。
早速のご確認ありがとうございます!
今後ともどうぞよろしくお願いいたします!