switch文を使った条件分岐
Googleスプレッドシートの操作を中心にGAS(GoogleAppsScript)の基本コードを紹介しています。初心者の方が順番に読んでくだけでGASの基礎コードが理解出来るようになればなと思って、短めの記事で進めて行きたいと思います!
今回は、”switch文を使った条件分岐”について紹介します!
switch文と条件分岐
前回、IF文を使った条件分岐について紹介しました。複数の条件で分岐をしたい場合、IF文では”else if”を使って条件をどんどん追加することが出来ましたね。
今回紹介するswitch文も多岐の分岐を実現する構文であることには変わりないですが、IFで実現するよりもよりコードをシンプルに分かりやすく記述することが可能です。
IF文の記事はこちら
例えば、次のスプレッドシートで、こんな処理をするプログラムを考えてみましょう。
B3セルに入力した色に応じて、D3セルにその色にちなんだ野菜を表示させる。
緑・・・ピーマン
黄・・・レモン
青・・・ナス
まずは日本語で考えてみます。
- B3セルの値を取得する
- D3セルを取得する
- B3セルの値に応じて処理を変える
- 「緑」の場合
D3セルに"ピーマン"と表示する - 「黄」の場合
D3セルに"レモン"と表示する - 「青」の場合
D3セルに"ナス"と表示する
- 「緑」の場合
こんな感じですね。
3の「B3セルの値に応じて処理を変える」の部分が条件分岐の部分です。
IF文を使って、プログラムにしてみましょう。
function test(){
var sheet = SpreadsheetApp.getActiveSpreadsheet()
var val_B3 = sheet.getRange("B3").getValue()
var rng_D3 = sheet.getRange("D3")
// IF文を使って条件分岐する
if(val_B3==="緑"){
rng_D3.setValue("ピーマン")
}else if(val_B3==="黄"){
rng_D3.setValue("レモン")
}else if(val_B3==="青"){
rng_D3.setValue("ナス")
}else{
rng_D3.setValue("分かりません")
}
}
実行動画
ちゃんと動きましたね(^^)
switchの構文
それではこれと同じものをswitch文でやってみます。
構文
switch (式) {
case 値1:
処理1(値1と対象が一致した時の処理)
break;
case 値2:
処理2(値2と対象が一致した時の処理)
break;
case 値3:
処理3:(値3と対象が一致した時の処理)
break;
default:
式が全ての値に合致しなかった場合の処理
}
「case 値」「default」の後は「:」ダブルコロン、「break」の後は「;」セミコロンなので注意してください。
「case 値」は繋げて書いていくことでもっと沢山増やすことが出来ます。
分かりやすいように、先程IF文で作ったものを、switch文で書き直して、比較しながら考えましょう。
function test(){
var sheet = SpreadsheetApp.getActiveSpreadsheet()
var val_B3 = sheet.getRange("B3").getValue()
var rng_D3 = sheet.getRange("D3")
// switch文を使って条件分岐する
switch(val_B3){
case "緑":
rng_D3.setValue("ピーマン")
break;
case "黄":
rng_D3.setValue("レモン")
break;
case "青":
rng_D3.setValue("ナス")
break;
default:
rng_D3.setValue("分かりません")
}
}
IF文に比べると、比較の対象は、(式)の部分にまとめられており、「case」のところで条件がスッキリしているので見やすい印象がありますね(^^)
同じ動きになるか動画で確認してみましょう。
同じ動きになりました(^^)
「break」の注意点
構文の中にある「break」ですが、これは現在の処理(ここで言うswitch文)を終了させる合図になります。
例えば、B3セルが青だった場合、D3セルにピーマンを入れるプログラムに進むのですが、その直後の「break」によって処理の終了を示しており、その後の「黄」や「青」の判定には進みません。
省略しなくても、エラーでは無いのですが、よっぽどのことが無い限り、判定で値が一致した場合は、その後のプログラムは不要になることがほとんどだと思うので、「break」はセットで記述するようにしてください。
switch(val_B3){
case "緑":
rng_D3.setValue("ピーマン")
break; //青だったらここで終了
case "黄":
rng_D3.setValue("レモン")
break;
case "青":
rng_D3.setValue("ナス")
break;
default:
rng_D3.setValue("分かりません")
}
「break」を記述し忘れると、switch文の一番最後のプログラムまで実行し続けてしまうので、この場合だと、「default」まで必ず進み、B3セルに何を入れても、D3セルに「分かりません」が入力されます。
実行動画
全て、「分かりません」になってしまいましたね。注意しましょう。
複数の条件が同じ処理の場合
複数の条件が同じ処理の場合、「case 値」を続けて書くことで同じ処理の記述を省略することが出来ます。
次のコードを見てください。
switch(val_B3){
case "緑":
rng_D3.setValue("ピーマン")
break;
case "黄":
rng_D3.setValue("レモン")
break;
case "青":
case "黒": //黒でもナスにする
rng_D3.setValue("ナス")
break;
default:
rng_D3.setValue("分かりません")
}
B3セルが「黒」の場合もD3セルに「ナス」と表示させるコートです。
実行してみましょう。
「青」でも「黒」でも「ナス」と表示されましたね。
数値の大小の比較
数値の大きさによって、処理を変える場合のテクニックです。
スプレッドシートのサンプルを少し変えます。
B3セルに「点数」を入れ、その数値の大きさによって、D4セルの結果表示を変えます。
点数
100点・・・”満点合格!!”
60点以上100点未満・・・”合格”
60点未満・・・不合格
こんな条件を考えます。
function test(){
var sheet = SpreadsheetApp.getActiveSpreadsheet()
var val_B3 = sheet.getRange("B3").getValue()
var rng_D3 = sheet.getRange("D3")
// switch文を使って条件分岐する
switch(true){
case val_B3==100:
rng_D3.setValue("満点合格!!")
break;
case val_B3>=60:
rng_D3.setValue("合格")
break;
case val_B3>=0:
rng_D3.setValue("不合格")
break;
default:
rng_D3.setValue("エラー")
}
}
switch文以外はこれまでと同じです。
このテクニックは、「式」の部分に「true」を指定します。そして、「case 値」の「値」の部分に「条件式」を設定して”true”か”false”かで次の処理に進むかどうかを判断させています。
「val_B3==100」が”true”だった場合、次の処理(D3セルに「満点合格!!」を入れる)に進む感じですね(^^)
“true”の判定が出たら処理を抜けるので、大きい順番に条件を書くことで、○○以上の処理で判断が出来ます。
まとめ
制御構文も今回で2回目です、条件分岐の2つの処理を紹介しました。次回は「繰り返し処理」について紹介したいと思います!
コメント