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