Clik here to view.

photo credit: philip.mallis No direction signage, Diamond Creek Trail via photopin (license)
みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。
初心者向けGoogle Apps Scriptのシリーズとして、Botを作りながらGASプログラミングの基礎の基礎についてお伝えしています。
前回の記事はこちら。
for文を使った繰り返し処理の基本についてお伝えしました。
さて、今回はもう一つの重要な制御構文についてです。
ということで、Google Apps Scriptで条件分岐をするif文の使い方の超基本、行ってみましょう!
前回のおさらいと今回のお題
題材としているスプレッドシートはこちらです。
Image may be NSFW.
Clik here to view.
これに対して、前回以下のようなスクリプトを作成しました。
function myFunction() { var sheet = SpreadsheetApp.getActiveSheet(); var lastRow = sheet.getLastRow(); for(var i = 2; i <= lastRow; i++) { Logger.log(sheet.getRange(i, 1).getValue()); } }
実行すると以下のようなログ出力が得られます。
Image may be NSFW.
Clik here to view.
Botのアルゴリズム
ただ、作りたいのはBotなんですよね…。毎回の実行で、こんなに全部送ったら、大変です。
つまり、1回の実行で、1つの名言について、Botとして送りたいわけです。
それで、そのために以下のような方針でスクリプトを改善していきます。
- for文を使って上から順に走査していく
- 「印」がない名言があれば、送信して「印」をつける
- 全てに「印」がついているときは、全ての「印」を消去する
こんなアルゴリズムでBotを作っていきたいと思います。
「印」の付け方
それで、印の付け方なのですが、シートのD列を以下のようにしてみました。
Image may be NSFW.
Clik here to view.
つまり、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() === ''){ Logger.log(sheet.getRange(i, 1).getValue()); }
などという条件式になります。
ですが、空文字つまり長さゼロの文字列は暗黙的にfalseというルールがありますので、これを活用すると以下のように書けます。
if(!sheet.getRange(i, 4).getValue()){ Logger.log(sheet.getRange(i, 1).getValue()); }
「!」は条件式の結果を反転する論理演算子と呼ばれる記号です。「ではない」という意味ですね。
なお、文字列で言えば、長さが1以上の文字列は暗黙的にtrueというルールもありますので、覚えておくと便利ですよ。
if文による条件分岐を使ったスクリプト
以上を踏まえて、以下のようなスクリプトを作成してみました。
function myFunction() { var sheet = SpreadsheetApp.getActiveSheet(); var lastRow = sheet.getLastRow(); for(var i = 2; i <= lastRow; i++) { if(!sheet.getRange(i, 4).getValue()){ Logger.log(sheet.getRange(i, 1).getValue()); } } }
D列を判定して、空文字であればA列の名言をログ出力するというものです。
結果はこちらです。
Image may be NSFW.
Clik here to view.
D列について「TRUE」とない行についての名言がログ出力されました。
まとめ
以上、Google Apps Scriptで条件分岐をするif文の使い方の超基本についてお伝えしました。
if文の使い方、条件式、また空文字は暗黙的にfalseとなるという点がポイントですね。
次回は、セルに値を入力する方法についてお伝えします。
どうぞお楽しみに!
連載目次:超初心者向けGASでBotを作りながら基礎を学ぶ
Google Apps Script(GAS)をはじめるためのメリットは山程ありますが、何を作ったらいいの?と悩んでしまうこともありますよね。そんな時に、おすすめしたいのが「Bot」の作成です。このシリーズでは、超初心者向けにGASでBotを作る方法を題材としながら、GASプログラミングの一通りの流れと書き方について学んでいきます。- 【初心者向けGAS】本当の最初の一歩!スクリプトエディタでプロジェクトを開く
- 【初心者向けGAS】はじめてのスクリプトを作成し、保存し、実行する
- 【初心者向けGAS】プログラミングに必須の変数の使い方とデータ型について
- 【初心者向けGAS】ログを表示するLogger.logの使い方
- 【初心者向けGAS】スクリプト実行時の「承認」でびっくりしないために
- 【初心者向けGAS】Spreadsheetサービスの「オブジェクト」の基礎の基礎を知ろう
- 【初心者向けGAS】スプレッドシートのシートを取得する2つの方法
- 【初心者向けGAS】スプレッドシートのセル・セル範囲とその値を取得する方法
- 【初心者向けGAS】 for文を使ったスプレッドシートの繰り返しの超基本
- 【初心者向けGAS】条件分岐をするif文の使い方の超基本