条件が満たされて時に処理を実行します。
入力の際には、「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
条件が成立しなかった場合の処理
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 〜 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 |
区分から判断して時給を求め、勤務時間*勤務日数=給与金額を求めます。
| 「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」の給与の欄に結果を表示します。 |
連続したデータの場合
最初の例では、
区分から判断して時給を求め、勤務時間*勤務日数=給与金額を求めます。
| 「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になるまで処理を繰り返します。 |
条件分岐には、「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ステートメント |
| 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 で不連続な値を条件とする場合には、値の後ろを(,)で区切って入力します。
<例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 で文字列を条件とする場合には、文字列の前後をダブルクォーテーションで、囲みます。
<例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