【GAS】IFを使った条件分岐を徹底解説

IFをつかった条件分岐 GAS

条件によって処理内容を分岐させるのがIFです。ExcelのIFと考え方は一緒で、もしも〇〇ならば△△をすると言った条件で処理内容を分岐させます。条件が正しければ真(true)を、正しくなければ偽(false)の処理を行います。

IFをマスターすると、条件分岐だけでなく、エラーを通知などのシステムの保守性にも役立ちますので覚えておきましょう。

今回は基本的な書き方から応用、さらにIFを使ったプログラムまでご紹介します。

狐

IFは「もしも〜ならば」という英語だよね?

狸

よく知っているね。プログラミングの場合は「もしも〇〇ならば△△する」と言った条件分岐でIF文は使われるよ

基本的なIFの書き方

IFの基本的な書き方は次の通りです。

if(条件式){
 //条件式を満たす(true)ときの処理
} else {
//条件式を満たさなかった(false)ときの処理を記述、省略可
}

条件式は丸括弧()内に、「もしも〇〇ならば」のように真偽が判断できる式を書きます。その後のtrue/falseは波括弧{}内に書いてください。偽(false)は省略することができます。

if(条件式){
 //条件式を満たす(true)ときの処理
}

if(参加なら){
 参加者をカウントする
}

条件1つに対して真の1回を分岐させます。今回はfalseは省略しました。省略した場合は何の処理も行われません。例は、参加なら(条件式がtrue)参加者をカウント(true)します。

if(条件式){
 //条件式を満たす(true)ときの処理
} else {
 //条件式を満たさなかった(false)ときの処理を記述
}

if(参加なら){
 参加者をカウントする
} else {
 参加者以外をカウントする
}

条件1つに対して真偽を使い2回の分岐させます。条件式がtrueであれば最初の波括弧の処理、falseであればelse後の波括弧に処理を行います。

例は、参加なら(条件式がtrue)参加者をカウント(true)、参加ではなければ(条件式がfalse)参加者以外の人数をカウントさせます。

複数条件があるIFの書き方

複数の条件分岐はelse ifを使用します。else ifは最初に設定したifとは別に新たに条件式を設定できます。

if(条件式1){
 //条件式1を満たす(true)ときの処理
} else if(条件式2) {
 //条件式1が満たさず(false)、条件式2を満たす(true)ときの処理
} else if(条件式3) {
 //条件式1,2が満たさず(false)、条件式3を満たす(true)ときの処理
} else {
//条件式1,2,3が満たさなかった(false)ときの処理
なければexit;(省略可)
}

if(参加なら){
 参加者をカウントする
} else if(不参加なら) {
 不参加者をカウントする
} else if(保留なら) {
 保留者をカウントする
} else {
それ以外をカウントする
}

あまりにもelse if が続くとコードの可読性が悪くなりますので、switch文に変更するのも検討してください。

狐

switch文って何のこと?

狸

IFと同じように条件によって処理を変更させる制御構造だよ

switch文での条件分岐

switchはIFと同じく、「もしも〇〇ならば△△する」と言った機能を持っています。

switch (条件式) {
    case 値1:
        // 値1に対する処理
        break;
    case 値2:
        // 値2に対する処理
        break;
    default:
        // どのケースにも当てはまらない場合の処理
        break;
}

switch文は丸括弧()内の条件式とcaseの値を照合して条件分岐を行います。条件式と一致したcaseをcaseからbreak;までを処理します。どのcaseにも一致しない条件であった場合はdefaultが実行されます。

switch (出席){
    case 出席:
        出席者をカウントする
        break;
    case 欠席:
        欠席者をカウントする
        break;
    case 保留:
        保留者をカウントする
        break;
    default:
        それ以外をカウントする
        break;
}

上記の場合は、条件式が出席なのでcaseが出席、つまり1回目のcaseが実行されます。

このように、switch文を使うと可読性も良いコードになり、どのような処理が行われているかの判断も簡単です。

しかし、if文のほうが新たに条件式を設定できるためswitch文よりも自由度が高いというメリットがあります。

ifとswitchのどちらを使うかは処理方法によって適切に分ける必要があります。

条件式の書き方(演算子)

条件判定でよく使われるのが演算子です。演算子とはプログラミングにおいて値を操作し、計算するための記号やキーワードです。計算に使われる+や−なども演算子の一つで算術演算子と呼ばれます。ifの条件式に多く見られるのが比較演算子と論理演算子です。

比較演算子からご説明します。

比較演算子

比較演算子意味
==左辺と右辺が等しいとtrue、異なるとfalse
!=左辺と右辺が異なるとtrue、等しいとfalse
<左辺が右辺より小さければtrue、以上だとfalse
<=左辺が右辺以下ならtrue、より大きいとfalse
>左辺が右辺より大きければtrue、以下だとfalse
>=左辺が右辺以上ならtrue、より小さいとfalse
===左辺と右辺が値とデータ型が等しいとtrue
!==左辺と右辺が値とデータ型等しくないとtrue

「<」は「左側は右側の値より小さい」を意味します。「<」にとって5 < 5は左側と右側の値は小さくないので偽(false)を返します。一方「<=」は「右側の値と同じか、それより小さいを意味するので5 <= 5は真(true)を返します。

狐

より小さいとか、以下とか、ぜんぶ同じだろ…

狸

以(もって)下、未(いま)だ満たさず。以上と未満の違いは、日本語で覚えてくとわかりやすいかもね!

また、①②と⑦⑧は同じように思えますが、⑦の===や⑧の!==は厳密等価演算子と呼ばれるものです。二つの違いは型の厳密さであり⑦⑧はデータ型も一緒でなければtrueを返しません。

var x = 1;
//""で括り文字型にする
var y = "1";

console.log(x == y); // true
console.log(x === y); // false

等価演算子の(x == y)を見ると文字型でもtrueが返されています。これはGASが文字で入力された数字も自動で数字に変換して比較しているためです。

しかし、厳密演算子である(x === y)はデータ型が一致しないためfalseとなります。

狸

比較演算子と論理演算子と組み合わせるともっと柔軟に条件分岐ができるよ

狐

もうお腹いっぱいですう

論理演算子

論理演算子を使うとelse ifの条件式を減らすことができます。論理演算子は次の種類があります。

論理演算子意味
① AND&&左辺と右辺どちらもtrueだとtrue
② OR||左辺と右辺どちらかtrueだとtrue
③ NOT!条件式の結果を反転(true→false)

実際にコードを見てみましょう。

AND(論理積)

複数条件のどちらも満たす(true)必要があるならば、AND演算子を使います。

let score1 = 80;
let score2 = 60;

if (score1 >= 70 && score2 >= 70) {
    console.log("合格");
} else {
    console.log("不合格");
}

AND演算子は左辺と右辺が同じであれば、真(true)を返します。この場合、score1score2の両方ともが70以上でなければ合格とはなりません。

上記の場合、score1が80ですがscore2が60ですので、結果は「合格」です。

OR(論理和)

複数条件のうちひとつを満たせば(true)良いのならば、OR演算子を使います。

let score1 = 80;
let score2 = 60;

if (score1 >= 70 || score2 >= 70) {
    console.log("合格");
} else {
    console.log("不合格");
}

OR演算子はどちらか一方の条件が真の場合に真を返します。この場合、score1が70以上であるか、もしくはscore2が70以上であれば、少なくとも一つの試験に合格したことになります。

上記の場合、score2が60ですがscore1が要件に満たしているので、結果は「合格」です。

NOT(否定)

条件を否定したい場合にNOT演算子を使います。

let score1 = 80;
let score2 = 60;

if (!(score1 >= 70 && score2 >= 70) ){
    console.log("合格");
} else {
    console.log("不合格");
}

条件式を数値に置き換えると(80 < 70 && 75 < 70)となります。「<」は左辺よりも右辺が小さければ真(true)のため、条件式だけならfalseが返されます。

しかし、NOT演算子を使うことで条件を反転させています。結果がfalseであったのを、tureに反転させているのです。

上記の場合、①AND演算子のときであれば不合格でしたが、NOT演算子を使うことで条件が反転され、結果は「合格」となっています。

IFを使ったプログラム例

最後にIFを使ったGASを紹介して終わりにします。下記のような表があったとします。

ABCD
名前国語算数結果
たぬき8090
きつね4070
うさぎ7055

D列に70以上は合格、60以上は補習、60未満は不合格の評価を入れたい場合は次のようなコードで実行できます。

function myFunction() {
  var ss = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
   // 処理するデータ範囲を取得
  var data = ss.getRange("A1:C4").getValues();

  //タイトルの1行目を除いてループ処理
  for (var i = 1; i < data.length; i++) {
    // B列とC列を合算÷2で平均点を計算
    var average = (data[i][1] + data[i][2]) / 2;

    if (average >= 70) {
       // ループ処理している行の4列目(D列)を取得
      // 平均点が70以上の場合は「合格」とセット
      ss.getRange(i + 1, 4).setValue("合格");
    } else if (average >= 60) {
      // 平均点が60以上の場合は「補習」とセット
      ss.getRange(i + 1, 4).setValue("補習");
    } else {
      // 平均点が60未満の場合は「不合格」とセット
      ss.getRange(i + 1, 4).setValue("不合格");
    }
  }
}

上記のコードを実行させた結果、先ほどのテーブルのD列に次のような結果が表示されます。

ABCD
名前国語算数結果
たぬき8090合格
きつね4070不合格
うさぎ7055補習

IF文を使うことで素早く、そして正確に成績を判断することができましたね!

狸

きつねくん、IF文は使いこなせるようになったかな?補習する?

狐

もう頭がパンクしそうなので結構です

まとめ

ここまでGASでのIF文の書き方についてご説明しました。IF文はプログラミングでは基本的なスキルです。反対に言えば、IF文を使いこなせればできることが広がるということでもあります。是非IF文を使いこなして作業効率化をしてください。

コメント

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