If Then ★ Select Case

わずかな知識で VBA!

If Then
Select Case


 

条件分岐のステートメント If Then/Select Case


  「もしも、**が、**だったら、処理Aを実行し、**なら処理Bを実行しよう!」

  このように状況・条件に応じて処理を選択する手法を「条件分岐」と呼びます。

  プロシージャは基本的に上から下に実行されていきます。
  しかし、条件や、MsgBox関数でクリックされたボタンによって
  以降の流れを変えていくために、この「条件分岐」が必要になります。

  処理の流れを変える代表的な命令が、
  「If Then Elseステートメント」であり、
  「Select Caseステートメント」です。

  「If Then Elseステートメント」は、複雑な条件も、簡単な条件も判断できますが、
  「ElseIf」により条件をズラズラと並べていくと
  ステートメントは見ずらくなってしまいます。

     If 《条件1》 Then
       《処理1》
     ElseIf 《条件2》 Then 
       《処理2》
     Else           
《条件1》、《条件2》以外
       《処理3》    
     End if


      

わずかな知識で
VBA!







  反面、Select Caseステートメントは、比較する値だけを記述すればいいので、
  ソースがすっきりとしますが、複雑な条件判断にはむいていません。

     Sub tesuto()
        Dim modori As Integer

        modori = MsgBox("MsgBox関数について知りたいですか?", 36, "学習意欲の確認")
        Select Case modori
        Case 6
           MsgBox "「はい」が押されました。" & Chr(13) & Chr(10) _
                  & "続けてお読みください!", , "がんばりましょう!"
        Case 7
           MsgBox "「いいえ」が押されました。" & vbCrLf _
                  & "後悔しますよ!", , "残念!"
        End Select

     End Sub


  この場合は、MsgBox関数の戻り値を比較しています。


  この二つのステートメントは、どちらも、その条件を記述された順番で順に調べていき、
  合致した時点で決められた処理を実行し、ステートメントを抜けて次の処理へいきます。

  つまり、Ifステートメントの例で説明すると、<<条件1>>が成立したら、
  <<条件2>>以降は検討せずに<<処理1>>を実行し、End If 以降の処理へと移ることを覚えていてください。

  Select Caseステートメントでは、あまり失敗はしないと思いますが、
  Ifステートメントでは、初心者の方は条件式の書き順に注意してください。

 
  では、Ifステートメントの説明です。

   Ifステートメントにも、2つの構文があります。

     1. 1行形式のIfステートメント

        If misu = "失敗" Then Exit Sub

        変数「misu」に「失敗」が代入されていたらプロシージャから抜け出る。
        変数「misu」が「失敗」以外なら何も実行しない。

        If I = 5 Then M = 6      
 
        Iに「5」が代入されていたら、Mに「6」を代入する。 
        Iが「5」以外なら何もしない。

     2. ブロック形式のIfステートメント

        If misu = "失敗" Then       変数「misu」に「失敗」が代入されていたら
          misu = ""             変数「misu」の内容を消し
          Exit Sub               プロシージャから抜け出る。
        End If                 最後に必ず「End If」で締めくくります。


        If I = 5 Then           Iに「5」が代入されていたら
          M = 6             Mに「6」を代入する
        End If

   上の例のように、ブロック形式のものは、条件が成立すると、
   If・・・からEnd If 迄の間に書かれた処理を実行します。
 
   この行数には制限はなく、また、この間にもIfステートメントを入れ子にすることもできます。
   ただ、あまり入れ子にして階層を深くしすぎると、後でとても分かりずらいプロシージャとなってしまいます。

   各ステートメントの記述で、1段下げた記述を行っていますが、
   これはプロシージャをわかりやすくするため意識的に行っているためで、
   自動的にこうゆう記述様式になるわけではありません。

   また「'」を使用したコメント行も必要です。
   作成している時は何をしているかわかっていますが、3ヶ月もたてば、何も覚えていません。

   後日の検証時でも、わかりやすいプロシージャにするためには、コメントは必ず必要です。


  サイコロゲームのプロシージャの一部です

      If setna.Value = "" Then
        '4回までしかフレない
        cnta = cnta + 1
        If cnta = 4 Then
  100
           Range("E2").Value = "ゲーム終了!"
           Range("E2").Font.ColorIndex = 3
           MsgBox "ゲーム終了です!「Set」ボタンを押してください。", 64, "プレイ方法!"
           Set setna = Nothing
           Exit Sub
        End If
        narabi
        If misu = "終了" Then
           misu = ""
           GoTo 100               
100番地へ飛びます。
        End If
        Set setna = Range("O5")
      End If


 
   複数の条件判断

      Ifステートメントは、条件が複数の場合に、ElseIfを用いて判断させることが可能です。

         If 《条件1》 Then
            《処理1》
         ElseIf 《条件2》 Then 
            《処理2》
         Else           
《条件1》、《条件2》以外
            《処理3》    
         End if


      このように、Else Ifを使うと条件の数を無限にふやすことが可能ですが、
      条件に一致しなかった場合も考えられるので、
      最後に Else を記述してその処理を行うこともできます。

      ここで、Ifステートメントで一番重要な条件式の書き方のお勉強です。

      条件が、たった一つの物だけならばやさしいのですが、中には、
      「これが、Aで、あれがBならば、処理Cを行う」というように、
      複数の条件が一致した時にだけ行いたい処理があります。

      こういう場合には、条件を演算子でつなげます。

      比較演算子や、論理演算子は、
      より複雑な条件を設定するためには覚えておかなければならないものです。

         = : 等しい    If Tanka = 100 then       Tanakが100ならば、
         <>: 等しくない If Tanka <> 100 then       Tanakが100でなければ、
         > : 大きい    If Tanka > 100 then       Tanakが100より大きければ、
         < : 未満     If Tanka < 100 then       Tanakが100未満ならば、
         >= : 以上    If Tanka >= 100 then      Tanakが100以上ならば、
         <= : 以下    If Tanka <= 100 then      Tanakが100以下ならば、

      大きさを比べる場合は、変数Tankaのデータ型は、LongやSingle等の「整数型」に宣言しておく
      必要がありますが、「=」や「<>」は文字列型でも使用できます。

           If Range("B6").Value = "東京都" Then
           If Range("B6").Value <> "東京都" Then


      他に、文字列の比較でよく使うのが、「Like」です。
      これは、パーターンマッチングで比較を行うため、文章の一部がマッチしていれば、
      分岐させることが可能です。

       例えば、Range("B6")に
      「東京都千代田区千代田1-1」と入力されている場合に

         If Range("B6").Value Like "東京都*" Then     東京都**なら
         If Range("B6").Value Like "*千代田区*" Then  **千代田区**なら

      という具合に関係の無い部分に「*」印を入力して比較します。


  論理演算子

     And、Or演算子

     複数の条件を判断する場合の条件の連結に使用します。

       If A = 5 And B >= 80 Then    Aが5でBが80以上の場合

       If A = 5 Or B >= 80 Then     Aが5か、または、Bが80以上の場合

     AかBが5で、Cが80以上か、Dが100以上ならというように複数の条件の場合には、
     次の様に( )で囲います。

       If (A = 5 Or B = 5) And (C >= 80 Or D >= 100) Then


  次に、Select Caseステートメントの説明です。

   Select Case ステートメントは単純な比較に向いています。
   既述のMsgBox関数の戻り値を比較するような場合です。

   もちろん、Ifステートメントと同じように比較演算子も使用できますが、
   その場合は、書き方が独特なものとなっています。


      Select Case Range("A1")
      Case Is > 1000
         Range("G1").Value = "Aランク"
      Case Is > 600
         Range("G1").Value = "Bランク"
      Case Is > 400
         Range("G1").Value = "Cランク"
      Case Is > 200
         Range("G1").Value = "Dランク"
      Case Else
         Range("G1").Value = "Eランク"
      End Select


      という具合に、「Is 比較演算子 値」になりますが、「Is」の入力を忘れていても、
      「Is」は自動的に入力されるので、覚えていなくても大丈夫(?)です。

   この条件式も書く順番を間違えて
   Case Is > 200から書き始めると、200以上はすべてDランクになってしまうので、注意してください。
  >
        


  わずかな知識でVBA!       TOP

  マクロで何ができる?   ユーザーインターフェース    マクロの記録   マクロの登録
 
  イベントについて      マクロの編集とデバッグ    ゲームで覚えるVBAプログラミング
 
  オブジェクトの操作     セルの操作            MsgBox関数・InputBox関数
 
  変数の型           ヘルプの活用          イミディエイトウィンドウ  
 
  Withステートメント      Setステートメント
 
  条件分岐のステートメント   If Then Else,Select Case
 
  繰り返しのステートメント   Do Loop
 
  繰り返しのステートメント   For Next
  
  ダイアログボックスを作ってみよう1                 ダイアログボックスを作ってみよう2 【実践編】
  
  ActiveXコントロール     各コントロールのプロパティ       文字列の操作        Endプロパティ

  リンク・検索   マイプロフィール       YouTubeの部屋 

Copyright (C) わずかな知識でVBA! All Rights Reserved