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

Google Apps Script(GAS)の入門解説です
公開日:2016-09-29 最終更新日:2022-11-04

第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回.同じ計算を行数分繰り返す

・同じ計算を行数分繰り返すとは ・前回のスクリプト ・完成スクリプト ・スクリプトの解説 ・forの詳細 ・ブロック文 ・同じ計算を行数分繰り返すの最後に
第8回.最終行を取得して繰り返す
・前回の復習 ・完成スクリプト ・スクリプトの解説 ・指定列の最終行 ・最終行を取得して繰り返すの最後に
第9回.コメントの書き方
・コメントアウトの書き方 ・コメントの必要性 ・コメントの書き方
第10回.条件で処理を変える(条件分岐,if)
第11回.条件で処理を変える(条件分岐,switch)
・条件分岐(switch)の例題 ・完成コード ・switch文の説明 ・条件分岐(switch)の最後に
第12回.表範囲をまとめて消去する
・セルの値の消去 ・データ部分だけを消去する例題 ・完成スクリプト ・スクリプトの解説 ・VBAのCurrentRegionについて ・表範囲をまとめて消去の最後に
第13回.セルに書式を設定する
・書式を設定する例題 ・罫線 ・塗りつぶし ・フォント サイズ ・太字 ・CSSの色設定 ・完成スクリプト ・設定されている書式の取得 ・セルに書式を設定の最後に
第14回.複数のシートを扱う
・複数のシートを扱う例題 ・シート名でシートを取得 ・インデックスでシートを取得 ・シート数を取得 ・る ・複数のシートの最後に
第15回.複数のスプレッドシートを扱う
・他のスプレッドシートの指定方法 ・完成スクリプト ・文字列結合 ・複数のスプレッドシートの最後に
第16回.Google Apps Scriptの文法
・記述のルール ・変数・定数の宣言 ・命名規則
第17回.JavaScript リファレンス
・全体目次 ・ ・ ・


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

無効な前方参照か、コンパイルされていない種類への参照です。|エクセル雑感(2024-02-17)
初級脱出10問パック|VBA練習問題(2024-01-24)
累計を求める数式あれこれ|エクセル関数応用(2024-01-22)
複数の文字列を検索して置換するSUBSTITUTE|エクセル入門(2024-01-03)
いくつかの数式の計算中にリソース不足になりました。|エクセル雑感(2023-12-28)
VBAでクリップボードへ文字列を送信・取得する3つの方法|VBA技術解説(2023-12-07)
難しい数式とは何か?|エクセル雑感(2023-12-07)
スピらない スピル数式 スピらせる|エクセル雑感(2023-12-06)
イータ縮小ラムダ(eta reduced lambda)|エクセル入門(2023-11-20)
PIVOTBY関数(縦軸と横軸でグループ化して集計)|エクセル入門(2023-11-19)


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

1.最終行の取得(End,Rows.Count)|VBA入門
2.RangeとCellsの使い方|VBA入門
3.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
4.繰り返し処理(For Next)|VBA入門
5.変数宣言のDimとデータ型|VBA入門
6.ブックを閉じる・保存(Close,Save,SaveAs)|VBA入門
7.並べ替え(Sort)|VBA入門
8.条件分岐(IF)|VBA入門
9.マクロとは?VBAとは?VBAでできること|VBA入門
10.セルのクリア(Clear,ClearContents)|VBA入門




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


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



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