前回前々回と、Ifを使用した条件分岐をご案内しました。
今回は、条件分岐のもう一つの表現として、「Select」を扱ってみたいと思います。
尚、今回の例は、以下の通りです。
※五行目を、”沖縄県”を入れてみました。
特に意図はなく、東京都と千葉県以外なら何でもよかった感じです。
今回は、条件分岐のもう一つの表現として、「Select」を扱ってみたいと思います。
1.まずは、簡単な復習から。
Do~Loopを使った繰り返し処理も合わせてやっていきます。尚、今回の例は、以下の通りです。
※五行目を、”沖縄県”を入れてみました。
特に意図はなく、東京都と千葉県以外なら何でもよかった感じです。
【処理手順】
- (誤動作を防ぐために)A1セルを選択する。
〜〜〜ここから繰り返し処理〜〜〜 - もし、
- 選択されたセルの値が「東京都」だった場合、対象の行のC列に”Tokyo”と入力。
- 選択されたセルの値が「千葉県」だった場合、対象の行のC列に”Chiba”と入力。
- 選択されたセルの値が、空欄だった場合、処理手順から抜ける。
- それ以外の場合は、対象の行のC列に”Other”と入力。
- 一つ下のセルを選択する。
- 1に戻る
〜〜〜ここまで繰り返し処理〜〜〜
【マクロ表記】
Sub score()
Range("A1").Select
Do
If ActiveCell.Value = "東京都" Then
ActiveCell.Offset(0, 2).Value = "Tokyo"
ElseIf ActiveCell.Value = "千葉県" Then
ActiveCell.Offset(0, 2).Value = "Chiba"
ElseIf ActiveCell.Value = "" Then
Exit Do
Else
ActiveCell.Offset(0, 2).Value = "Other"
End If
ActiveCell.Offset(1).Select
Loop
End Sub
【処理結果】
2.Selectを使用した記述
【Selectを使った基本的な記述の方法】
〜〜〜ここから〜〜〜
Select Case 比較対象
Case 条件①
条件①に一致する場合の処理内容
Case 条件②
条件②に一致する場合の処理内容
End Select
〜〜〜ここまで〜〜〜
Caseの後に比較対象を書きます。
そして、それが「***の場合は、$$$とする」といった具合に、
条件毎に実施する処理を記載していくことになります。
Ifと比較してみると、以下の通りになります。
【Ifのパターン】
If 条件① Then
条件①に一致する場合の処理内容
ElseIf 条件② Then
条件②に一致する場合の処理内容
End If
メリット
└比較したい条件をフレキシブルに設定できる。
例えば、A列とB列に条件と設定したいものがあり、A列の条件のほうが優先としたかった場合に便利です。
この表の場合、
A列が”東京都”だった場合は、無条件で「Tokyo」とし、
A列が”東京都以外”で、B列が50以上の場合は、「50以上」とする。
という条件だった場合とかですね。
デメリット
└比較対象が一つ(一列)の場合でも、条件式を都度書かなければならない。
If ActiveCell.Value = "東京都" Then
ElseIf ActiveCell.Value = "千葉県" Then
ElseIf ActiveCell.Value = "**県" Then
・・・
といった、具合です。
【Selectのパターン】
Select Case 比較対象
Case 条件①
条件①に一致する場合の処理内容
Case 条件②
条件②に一致する場合の処理内容
End Select
メリット
└比較対象を最初に設定したら、都度条件式を書かなくてもよい。
比較対象がActiveCell.Value(選択したセルの値)の場合は、
最初に「Select Case ActiveCell.Value」としておけば、その後書く必要はありません。
デメリット
└複雑な条件設定ができない。
比較対象は、あくまで一つですので、A列の値が**で、B列が%%の場合等は、難しくなります。
3.Selectを使用して、サンプル処理を記述してみる
ここまでを踏まえて、復習で触れたサンプルを、Selectを使って表現してみます。
〜〜〜ここから〜〜〜
Sub score()
Range("A1").Select
Do
Select Case ActiveCell.Value
Case "東京都"
ActiveCell.Offset(0, 2).Value = "Tokyo"
Case "千葉県"
ActiveCell.Offset(0, 2).Value = "Chiba"
Case ""
Exit Do
Case Else
ActiveCell.Offset(0, 2).Value = "Other"
End Select
ActiveCell.Offset(1).Select
Loop
End Sub
〜〜〜ここまで〜〜〜
このようになります。
4.フロー図に書くと分かりやすい「If」と「Select」の違い
【Ifは消去法的】
まず、最初の分岐で、条件合致するものが選ばれ、次の条件には、その残りが移ります。
【Selectは、まさに条件分岐】
こんなイメージです。
Ifの合致するものを除いていくイメージとは異なり、”仕分け”といった感じですね。
5.まとめ
プログラミングでは、よく「記述に正解はない」と言われます。
プロの方からは、「もっと圧縮できる」等言われることもありますが、
学習当初は基本的に、”正常に動けば良い”と思います。
カーズの考え方でいきましょう。最終的に勝てばよかろうなのです。
とはいえ、綺麗に書くことには、利点が数多くあります。
やはり圧倒的に、他の方が見た時に理解しやすいのです。
私も”なんちゃって”で頑張っている身分なので、偉そうなことは言えませんが、
学習当初よりは綺麗に、コンパクトに書けるようになってきたと思います。
条件分岐は、どのプログラミング言語でも出てきますので、
ここでしっかり理屈や組み立て方の例を、覚えてしまってください。
一つの言語で覚えてしまえば、後は言語毎の記述の違いを学ぶだけです。
『日本語「りんご」は、英語では「Apple」というのか』程度の学習で済みます。
IfとSelectについては、実際に処理したいことを両方書いてみて、
どちらがよりスマートに書けるかを、確認してみるのが、とても良い学習法です。
是非実施してみてください。
それではまた
コメント
コメントを投稿