ExcelVBA Step_5_2 制御構造 ・ 分岐

Withステートメント

同一オブジェクトに対して連続的に処理を行うときには、Withステートメントを使うと処理を簡略化できます。
ある単一のオブジェクトの複数のプロパティをまとめて変更したり、メソッドを実行するような場合、With〜End With 構文の中に、プロパティを割り当てるステートメントやメソッドを指定します。この方法を使えば、各プロパティやメソッドの前にオブジェクト名を指定する必要はありません。最初のWithステートメントの行で1度だけ指定してやればよいのです。
Withステートメントを使うとオブジェクトを省略でき、ネスト(入れ子)することもできます。

《ネストするサンプルプログラム》
Sub MyWith()
 
 
  With Range("B2")
   
   .Value = "Withステートメント練習"
   
    With .Font
    
        .Name = "MSPゴシック"
        .Bold = True
        .ColorIndex = 3
        .Size = 12
    
    End With
    
  End With
  
End Sub


WithステートメントとNot演算子を併用すると、1つのステートメントでプロパティの True / False を切り替えるトグルプロシジャーを作成することができます。

《列の表示/非表示を切り替える サンプルプログラム》
Sub 列の表示と非表示()

    With Columns("C")
       .Hidden = Not .Hidden
    End With


If 〜 Then 〜 Else ステートメント

「もし状況がAだったら処理Xを実行し、もし状況がBだったら処理Yを実行する」
このように、状況に応じて処理を選択する手法を条件分岐と呼びます。
条件分岐は、コンピュータプログラミングの最大のポイントの一つと言えます。
If ... Then ... Else 条件が成立したときと、成立しないときで、別の処理を行う
Else if 二つ以上の条件を続けて評価するときに使用する
Select Case ひとつの条件で、複数のパターンへ分岐したいとき使用する


《使い方》
If 条件 Then 条件を満たしたとき(True)の処理 

If 条件 Then
  条件を満たしたときのプログラム
Else
  条件が満たされなかったときのプログラム
End If

《条件分岐のサンプルプログラム》
Sub 列の表示非表示()

'C列が非表示だったときには表示します
If Columns("C").Hidden = True Then Columns("C").Hidden = False End Sub

Sub 条件分岐_1()

'アクティブセルの文字色が青ならば赤に、それ以外は青にする

If Selection.Font.ColorIndex = 5 Then
        Selection.Font.ColorIndex = 3

Else
        Selection.Font.ColorIndex = 5

End If

Sub 条件分岐_2()
        
    Dim myJyoken As Integer
    
    myJyoken = MsgBox(Prompt:="あなたは20歳以上ですか?", Buttons:=vbYesNo)
    
    'MsgBox 関数の戻り値 6はYes 7は No

    If myJyoken = 6 Then
        MsgBox Prompt:="成人です。お酒飲めるね"
    End If
    
    If myJyoken = 7 Then
        MsgBox Prompt:="未成年です。タバコも酒もダメよ!"
    End If

End Sub

Sub 条件分岐_3()

 Dim myJyoken As Integer
    
    myJyoken = MsgBox(Prompt:="あなたは20歳台でしょ?", Buttons:=vbYesNo)
    
    'MsgBox 関数の戻り値 6はYes 7は No

    If myJyoken = 6 Then
          MsgBox Prompt:="当たった!"
    ElseIf myJyoken = 7 Then
          myJyoken = MsgBox(Prompt:="では30歳を過ぎているの?", Buttons:=vbYesNo)
        
          If myJyoken = 6 Then
             MsgBox Prompt:="あらま! お若いこと(^^;)"
          Else
             MsgBox Prompt:="むむ いったい何歳でしょ・・"
          End If
    
    End If
    
  End Sub


Select Case ステートメント

If ステートメントが多くなると、ステートメントが読みづらくなります。
単独の対象条件を繰り返し判断するときは、Select Caseステートメントを使うと、シンプルで読みやすくなります。

《使い方》
Select Case 参照値または式
     Case 値または式(1)
              (1)の条件に当てはまる場合の処理
     Case 値または式(2)
              (2)の条件に当てはまる場合の処理
     Case 値または式(3)
          (3)の条件に当てはまる場合の処理

		:
		:
     Case Else
         すべてあてはまらない場合の処理
   End Select
  

《サンプルプログラム》
Sub 条件分岐_4()

  '準備 :アクティブシートのA1に年齢(数値)を入力しておく
  
  Select Case Range("A1")

     Case Is > 100
       Range("B1").Value = "100歳以上?"
     Case Is > 80
       Range("B1").Value = "80歳を超えてます"
     Case Is > 60
       Range("B1").Value = "60歳を超えてます "
     Case Is > 40
       Range("B1").Value = "40歳を超えています"
     Case Else
       Range("B1").Value = "40歳以下です"
  
  End Select
End Sub