条件を分岐する。  Fom121

If 〜 Then ステートメント

条件が満たされて時に処理を実行します。
入力の際には、「If」と「End If」を対に利用します。

構文

If  条件  Then
   条件が成立した場合の処理
End  If

■「test10」プログラム 意  味
Sub test10()

  Dim kazu As Integer

    Kazu = Range("B1").Value

    If kazu > 100 Then
       MsgBox "値が大き過ぎます。100以下を入力して下さい。"

    End If
End Sub
Sub test10()

変数kazuを宣言

セル「B1」の値を変数kazuに代入する。

If 変数kazuに100より大きい値の場合は、Thenメッセージボックスを表示


  End If
End Sub



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

If 〜 Then ステートメントにElseを加えることで、条件が成立した場合と成立しなかった場合に処理を分岐できます。

構文

If 条件 Then
  条件が成立した場合の処理
Else
  条件が成立しなかった場合の処理
End If

■「test20」プログラム 意  味
Sub test20()

  Dim kazu As Integer

    Kazu = Range("B1").Value

    If kazu >= 100 And kazu <= 500 Then
       Range("B1").Font.ColorIndex = 3
       MsgBox "フォントの色を変更しました。"

  Else
       Range("B1").Font.ColorIndex = 1

    End If
End Sub
Sub test20()

変数kazuを宣言

セル「B1」の値を変数kazuに代入する。

If 変数kazuが、100以上500以下の場合は、Thenメッセージボックスを表示


Else それ以外の場合は、
  セル「B1」のフォントの色を1(黒)に設定

  End If
End Sub



If 文のネスト

ある条件分の中で、条件を付けてさらに処理を分岐させたい場合は、には、If 文の中に If 〜 EndIf を入れることが出来ます。
これをネスト(入れ子)といいます。
ネストは、If 文だけではなくその他の制御文や計算式でも使用できます。

構文

If 条件 Then
  If 条件
    
  End  If
 Else
   If  条件

   End  If
  End  If

<例題01>
購入金額を入力すると、一般と社員によって異なる割引率が、メッセージボックスに表示されるプログラムを作成します。

社員の場合は、C2のチェックボックスをオンにします。
チェックボックスの戻り値は、C3に入力されるように、あらかじめセルにリンクが設定されています。

購入割引率
割引率
購入金額 一般 社員
50000以上 5% 8%
50000未満 4% 7%
40000未満 3% 6%
30000未満 割引なし 5%


「test30」プログラム プログラムの意味
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
Sub test30()
Dim gaku As Integer
gaku = Range("B2").Value
If Range("c3").Value = False Then
If gaku < 3000 Then
MsgBox "割引はありません。"
ElseIf gaku < 4000 Then
MsgBox "3%引きです "
ElseIf gaku < 5000 Then
MsgBox "4%引きです。"

Else
MsgBox "5%引きです。"

End If
Else
If gaku < 3000 Then
MsgBox "3%引きです。"
ElseIf gaku < 4000 Then
MsgBox "6%引きです。"
ElseIf gaku < 5000 Then
MsgBox "7%引きです。"
Else
MsgBox "8%引きです。"
End If
End If
End Sub
1 Sub test30()
2 変数gakuを宣言
3 セル「B2」の値を変数gakuに代入
4 If 「C3」が「False」の場合、Then
5 If 変数「gaku」が3000未満の場合 Then、
6 メッセージボックスを表示
7 ElseIf 変数「gaku」が4000未満の場合は Then
8 メッセージボックスを表示
9 ElseIf 変数「gaku」が5000未満の場合は Then
10 メッセージボックスを表示
11
12 Else それ以外の場合
13 メッセージボックスを表示
14
15 End If
16 Else それ以外の場合
17 If 変数gaku が3000未満の場合
18 メッセージボックスを表示
19 If 変数gaku が4000未満の場合
20 メッセージボックスを表示
21 If 変数gaku が5000未満の場合
22 メッセージボックスを表示
23 Else それ以外の場合
24 メッセージボックスを表示
25
26
27
練習問題01

区分から判断して時給を求め、勤務時間*勤務日数=給与金額を求めます。

「kyuyo01()」プログラム プログラムの意味
Sub kyuyo01()
Dim kyuyo As Long

If Range("D8").Value = "" Then
Range("E8").Value = "なし"
Else
If Range("B8").Value = "アルバイト" Then
kyuyo = Range("b3").Value * Range("C8").Value * Range("D8").Value
Range("E8").Value = kyuyo
ElseIf Range("B8").Value = "準社員" Then
kyuyo = Range("b4").Value * Range("C8").Value * Range("D8").Value
Range("E8").Value = kyuyo
ElseIf Range("B8").Value = "社員" Then
kyuyo = Range("b5").Value * Range("C8").Value * Range("D8").Value
Range("E8").Value = kyuyo

End If
End If

End Sub


変数「kyuyo」を宣言します。

もし「D8」の勤務日数が空白だったら
「E8」の給与の欄に「なし」と表示します。

もし「B8」の値が「アルバイト」だったら、「B3」の時給に「C8」の勤務時間を掛け算しさらに「D8」の勤務日数も掛け算し、「E8」の給与の欄に結果を表示します。


もし「B8」の値が「準社員」だったら、「B4」の時給に「C8」の勤務時間を掛け算しさらに「D8」の勤務日数も掛け算し、「E8」の給与の欄に結果を表示します。



もし「B8」の値が「社員」だったら、「B5」の時給に「C8」の勤務時間を掛け算しさらに「D8」の勤務日数も掛け算し、「E8」の給与の欄に結果を表示します。



練習問題02

連続したデータの場合
最初の例では、
区分から判断して時給を求め、勤務時間*勤務日数=給与金額を求めます。

「kyuyo02()」プログラム プログラムの意味
Sub kyuyo02()
Dim kyuyo As Long
Dim i As Integer
Range("d8").Select
For i = 1 To 11

If ActiveCell.Value = "" Then
ActiveCell.Offset(0, 1).Value = "なし"

Else
If ActiveCell.Offset(0, -2).Value = "アルバイト" Then
kyuyo = Range("b3").Value * ActiveCell.Offset(0, -1).Value * ActiveCell.Value
ActiveCell.Offset(0, 1).Value = kyuyo


ElseIf ActiveCell.Offset(0, -2).Value = "準社員" Then
kyuyo = Range("b4").Value * ActiveCell.Offset(0, -1).Value * ActiveCell.Value
ActiveCell.Offset(0, 1).Value = kyuyo

ElseIf ActiveCell.Offset(0, -2).Value = "社員" Then
kyuyo = Range("b5").Value * ActiveCell.Offset(0, -1).Value * ActiveCell.Value
ActiveCell.Offset(0, 1).Value = kyuyo
End If

End If
ActiveCell.Offset(1, 0).Select
Next i
End Sub


変数「kyuyo」を宣言します。
変数「i 」を宣言します。

セル「「d8」を選択します。
「i 」を1から11まで繰り返します。
(11人の給与計算をする為処理を11回繰り返します。)

もし「D8」の勤務日数が空白だったら
一つ右側にセルを移動して給与の欄に「なし」と表示します。

もし「D8」の値の2つ左側のセルの値が「アルバイト」だったら、「B3」の時給に「C8」の勤務時間を掛け算しさらに「D8」の勤務日数も掛け算し、「E8」の給与の欄に結果を表示します。




もし「D8」の値の2つ左側のセルの値が「準社員」だったら、「B4」の時給に「C8」の勤務時間を掛け算しさらに「D8」の勤務日数も掛け算し、「E8」の給与の欄に結果を表示します。



もし「B8」の値が「社員」だったら、「B5」の時給に「C8」の勤務時間を掛け算しさらに「D8」の勤務日数も掛け算し、「E8」の給与の欄に結果を表示します。





選択しているセルの1つ下のセルに移動し、
「i 」の値が11になるまで処理を繰り返します。

条件を分岐する。(Select 〜 Case) Fom132

Select 〜 Case ステートメント

条件分岐には、「If〜Thenステートメント」以外にも「Select〜Caseステートメント」があります。
処理の分岐が多くなる場合には「Select〜Caseステートメント」を使用すると記述が簡潔で解り易くなります。
又、実行するコードが少ない分、処理速度も向上します。

Select 〜 Caseは条件をチェックしCaseの中で条件に一致すると処理を実行します。
条件に一致する処理を実行した時点でこのステートメントは、終了します。

<構文>

Select Case 条件
   Case1
    処理1
   Case2
    処理2
   Case3
    処理3

   [Case Else]→いずれの条件も満たさなかった場合(省略可)
    処理
   End Select

If〜ThenとSelect〜Caseステートメントの比較
If〜Thenステートメント Select〜Caseステートメント
Sub test01()

   If Range("A9").Value >= 80 Then
      Range("B9").Value = "A"


   ElseIf  Range("A9").Value >= 70 Then
      Range("B9").Value = "B"

   ElseIf  Range("A9").Value >= 60 Then
      Range("B9").Value = "C"

   Else
     Range("B9").Value = "D"

  End If

End Sub
Sub test02()

   Select Case Range("A9").Value
       Case Is >= 80
          Range("B9").Value = "A"

       Case Is >= 70
          Range("B9").Value = "B"

       Case Is >= 60
          Range("B9").Value = "C"

       Case Else
          Range("B9").Value = "D"

   End Select

End Sub

●上記の例で、連続した値の範囲を条件として指定する場合は、
値 To 値」で連続した値として条件を指定できます。

<例>
Case 80 To 100

●演算子を条件とするSelect 〜 Caseステートメントの場合の指定方法は、

<例1>  値が200の場合
Case 200

<例2>  値が200以上の場合
Case Is >= 200


不連続の値を条件とする Select 〜 Case ステートメント Fom138

Select 〜 Case で不連続な値を条件とする場合には、値の後ろを(,)で区切って入力します。

<例3> 値が「70」か「90」か「110」の場合
Case 70,90,110

プロシージャの確認

<例4>該当する「商品コード」をセル「B2」に入力すると、エラーメッセージが表示されるプログラムを作成する場合

●商品区分

商品区分
商品コード 商品名
70,90,110 パソコン本体
80,100,130 周辺機器

<例4>のプログラム 解    説
Sub case2()
Select Case Range("B2").Value
Case 75, 95, 115, 155
MsgBox "パソコン本体"
Case 80, 110, 130, 180
MsgBox "周辺機器"
Case Else
MsgBox "指定したコードを入力して下さい"
End Select
End Sub
Sub case2()
Select Case セル「B2」の値が
    Case 75,95,115,155 の場合
    メッセージボックスを表示
    Case 80,110,130,180 の場合
         メッセージボックスを表示
      Case Else それ以外の場合
   メッセージボックスを表示
End Select
End Sub

文字列を条件とする Select 〜 Case ステートメント

Select 〜 Case で文字列を条件とする場合には、文字列の前後をダブルクォーテーションで、囲みます。

<例5>  値が「A」「B」「C」の場合
Case "A","B","C"

プロシージャの確認

<例6> セルB10に色を入力するとセル「C10」に指定したフォント色が摘要されるプログラムを作成する場合

●ColorIndex表

ColorIndex表
ColorIndex
3
4
5
黄色 6
「Case3()」プログラム 解  説
Sub case3()
Dim Fcolor As String
Fcolor = Range("B10").Value
Select Case Fcolor
Case "赤"
Range("C10").Font.ColorIndex = 3
Case "緑"
Range("C10").Font.ColorIndex = 4
Case "青"
Range("C10").Font.ColorIndex = 5
Case "黄色"
Range("C10").Font.ColorIndex = 6
Case Else
MsgBox "赤,緑,青,黄色のどれかを入力して下さい"
End Select

End Sub
Sub Case3()
  変数Fcolorを宣言
 セル「B10」の値を変数Fcolorに代入
 Select Case 変数Fcolorが
  Case 「赤」の場合
   セル「C10」のフォントの色を「赤」に変更
  Case 「緑」の場合
   セル「C10」のフォントの色を「緑」に変更
  Case 「青」の場合
   セル「C10」のフォントの色を「青」に変更
  Case 「黄色」の場合
   セル「C10」のフォントの色を「黄色」に変更
  Case Else それ以外の場合
    メッセージを表示
End Select

End Sub

※ 条件にアルファベットを使用する場合は、大文字と小文字を区別するので、以下のような方法があります。
▼<例>
Select Case Fcolor
 Case "red","RED"
    Range("C10").Font.ColorIndex = 3