Google Apps Script入門
条件で処理を変える(条件分岐,if)

Google Apps Script(GAS)の入門解説です
最終更新日:2021-03-05

第10回.条件で処理を変える(条件分岐,if)


セルの値等の条件により処理内容を変更する条件分岐です。


プログラムとは処理手順であり、突き詰めれば、
条件分岐しながら繰り返し処理を行うものです。


条件分岐(if)の例題

以下の表で条件分岐の具体例を説明します。
やることは、

E列合否合計点が210以上なら"○"、以外は"×"
F列特待生合計が240以上で、3科目全て70以上なら"○"、以外は"×"
G列クラス合計点が250以上なら"A"、230以上なら"B"、210以上なら"C"

google apps script 画像


先に完成コードをお見せします。
新しい文は、ifとelseだけです。

ifは、もしも
elseは、その他

そのまま読んでみて、理解度を確認してみましょう。


完成コード

E列合否:合計点が210以上なら"○"、以外は"×"
function sample11_1() {
  var sheet = SpreadsheetApp.getActiveSheet()
  var lastRow,total
  lastRow = sheet.getLastRow()
  for (var i=2; i<=lastRow; i++) {
    total = sheet.getRange(i, 4).getValue()
    if (total >= 210) {
      sheet.getRange(i, 5).setValue("○")
    }
    else {
      sheet.getRange(i, 5).setValue("×")
    }
  }
}

条件式を、
< 210
とすれば、○×が逆になります。


F列特待生:合計が240以上で、3科目全て70以上なら"○"、以外は"×"
function sample11_2() {
  var sheet = SpreadsheetApp.getActiveSheet()
  var lastRow,total,jpn,eng,mat
  lastRow = sheet.getLastRow()
  for (var i=2; i<=lastRow; i++) {
    jpn = sheet.getRange(i, 1).getValue()
    eng = sheet.getRange(i, 2).getValue()
    mat = sheet.getRange(i, 3).getValue()
    total = sheet.getRange(i, 4).getValue()
    sheet.getRange(i, 6).setValue("")
    if (total >= 240) {
      if (jpn >= 70 && 
          eng >= 70 && 
          mat >= 70) {
        sheet.getRange(i, 6).setValue("○")
      }
    }
  }
}

sheet.getRange(i, 6).setValue("")
これで、先にF列を消去しています。
これが無い場合は、
二つのifに、それぞれelseを書き、そこで消去する必要が出てきます。


G列クラス:合計点が250以上なら"A"、230以上なら"B"、210以上なら"C"
function sample11_3() {
  var sheet = SpreadsheetApp.getActiveSheet()
  var lastRow,total
  lastRow = sheet.getLastRow()
  for (var i=2; i<=lastRow; i++) {
    total = sheet.getRange(i, 4).getValue()
    if (total >= 250) {
      sheet.getRange(i, 7).setValue("A")
    } else if (total >= 230) {
      sheet.getRange(i, 7).setValue("B")
    } else if (total >= 210) {
      sheet.getRange(i, 7).setValue("C")
    } else {
      sheet.getRange(i, 7).setValue("")
    }
  }
}
最後のelseは、それまでの条件がいずれもfalseの場合になります。
つまり、ここでは、210未満の不合格なので空欄にしています。


結果
google apps script 画像


if...else文の説明

if (条件) {
 ステートメント1
}
条件を満たしているとき、つまり条件がtrueの時、ステートメント1を実行
ステートメントは、複数行書くこともできます。

if (条件) {
 ステートメント1
} else {
 ステートメント2
}
条件を満たしているとき、つまり条件がtrueの時、ステートメント1を実行
条件を満たしていないとき、つまり条件がfalseの時、ステートメント2を実行
ステートメントは、複数行書くこともできます、また、省略することもできます。

if (条件1) {
 ステートメント1
} else if (条件2) {
 ステートメント2
・・・
} else {
 ステートメント3
}
条件1を満たしているとき、つまり条件1がtrueの時、ステートメント1を実行
上記以外の時、
条件2を満たしているとき、つまり条件2がtrueの時、ステートメント2を実行
・・・同様に、条件を複数件設定できます。
上記以外の時、ステートメント3を実行
ステートメントは、複数行書くこともできます、また、省略することもできます。


比較演算子

演算子 説明 詳細
== 等しい 被演算子が等しい場合に true を返します。
!= 等しくない 被演算子が等しくない場合に true を返します。
=== 厳密に等しい 被演算子が等しく、かつ同じ型である場合に true を返します。
!== 厳密に等しくない 被演算子が等しくなく、かつ/または同じ型でない場合に true を返します。
> より大きい 左の被演算子が右の被演算子よりも大きい場合に true を返します。
>= 以上 左の被演算子が右の被演算子以上である場合に true を返します。
< より小さい? 左の被演算子が右の被演算子よりも小さい場合に true を返します。
<= 以下 左の被演算子が右の被演算子以下である場合に true を返します。

===と!==について
厳密等価といいます。
===は二つのオペランドが等しいことを検査し、論理値で結果を返します。
等価演算子とは異なり、厳密等価演算子はオペランドの型が異なる場合、常に異なるものと判断します。

当面は覚えなくても困りません。。

VBA経験者の方へ
 ==と!=がVBAとは違いますが、プログラミング言語としては、こちらが一般的です。


論理演算子

演算子 使用法 説明
&& expr1 && expr2 論理積 (AND)
expr1をfalseと見ることができる場合は、expr1を返します。
そうでない場合はexpr2を返します。
両被演算子がtrueであれば&&はtrueを返し、そうでなければfalseを返します。
|| expr1 || expr2 論理和 (OR)
expr1をtrueと見ることができる場合は、expr1を返します。
そうでない場合はexpr2を返します。
どちらかの被演算子がtrueであれば||はtrueを返し、両方ともfalseであればfalseを返します。
! !expr 論理否定 (NOT)
単一の被演算子をtrueと見ることができる場合は、falseを返します。
そうでない場合はtrueを返します。


ビット演算子

演算子 使用法 説明
& a & b ビット論理積(AND)
被演算子の対応するビットがともに 1 である各ビットについて 1 を返します。
| a | b ビット論理和(OR)
被演算子の対応するビットがともに 0 である各ビットについて 0 を返します。

これらは使う必要になった時に思い出せれば当面は良いと思います。
こういうものがあるというこだけ覚えておいてください。、
まずは、論理演算子だけ覚えておきましょう。


条件分岐(if)の最後に

プログラミング言語は数あっても、ifはifです。
ifこそ、プログラミングの基本中の基本です。

IF文の整理と論理的思考
論理的思考でIf文を整理することについて、簡単な例で解説していきます。無駄な条件が入っていたり、条件が重複しているプログラム程理解しずらい物はありません。問題です。以下のマクロについて、気が付いたことを指摘して下さい。
こちらも、是非お読みください。




同じテーマ「Google Apps Script入門」の記事

第7回.同じ計算を行数分繰り返す
第8回.最終行を取得して繰り返す
第9回.コメントの書き方
第10回.条件で処理を変える(条件分岐,if)
第11回.条件で処理を変える(条件分岐,switch)
第12回.表範囲をまとめて消去する
第13回.セルに書式を設定する
第14回.複数のシートを扱う
第15回.複数のスプレッドシートを扱う
第16回.Google Apps Scriptの文法
第17回.JavaScript リファレンス


新着記事NEW ・・・新着記事一覧を見る

還暦のVBA:VBAまでたどりつけるか… (2021-09-29)
VLOOKUPを使うことを基本としてシートを設計すべきか|エクセル雑感(2021-08-17)
コンピューターはブラックボックスで良い|エクセル雑感(2021-08-14)
小文字"abc"を大文字"ABC"に変換する方法|エクセル雑感(2021-08-13)
ADOでテキストデータを集計する|VBAサンプル集(2021-08-04)
VBA学習のお勧めコース|エクセル雑感(2021-08-01)
エクセル馬名ダービー|エクセル雑感(2021-07-21)
在庫を減らせ!毎日棚卸ししろ!|エクセル雑感(2021-07-05)
日付型と通貨型のValueとValue2について|エクセル雑感(2021-06-26)
DXってなんだ? ITと何が違うの?|エクセル雑感(2021-06-24)


アクセスランキング ・・・ ランキング一覧を見る

1.最終行の取得(End,Rows.Count)|VBA入門
2.Excelショートカットキー一覧|Excelリファレンス
3.変数宣言のDimとデータ型|VBA入門
4.RangeとCellsの使い方|VBA入門
5.繰り返し処理(For Next)|VBA入門
6.マクロって何?VBAって何?|VBA入門
7.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
8.Range以外の指定方法(Cells,Rows,Columns)|VBA入門
9.セルに文字を入れるとは(Range,Value)|VBA入門
10.並べ替え(Sort)|VBA入門




このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。


記述には細心の注意をしたつもりですが、
間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。
掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。



このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
本文下部へ