25 September, 2020

Excel VBAプログラミングガイド:条件式 、If Then、Else、及びSelect Case

本文ではIf Then、Else、Select Caseなど、Excel VBAの条件式を使用する方法を紹介します。

コンピューターがプログラムを実行する時、プログラムは1個ずつ順番に実行されます。プログラムにさまざまな条件に対応して操作を実行させたい場合は、条件分岐を利用して対処できます。

「If Then」 と「 Else」

簡単な実例を見てみましょう。これは朝に出かける前に傘を持つかどうかを決定することです。天気予報を見て、降水確率を60%に基準すると、基準値を超えると傘を持ちます。 判断ロジックは次のようになります。

もし 降水確率>60% なら:

傘を持つ
逆に:
傘を持たない

これは典型的な条件式です。Excel VBAでは、If ThenとElseでこの判断ロジックを入力し、Excelに判断させることができます。

Dim rainProb As Double
rainProb = 0.3 ' 降水確率
If rainProb > 0.6 Then
MsgBox "傘を持って外出する"
Else
MsgBox "傘を持たないで外出する"
End If

このVBAプログラムは、rainProbの値に基づいて傘を持つかどうかが決まります。

「Alt+F11」を同時に押してVBA を開きます。

If Then と Else

判断ロジックは複雑の場合には:

もし 降水確率>70% なら:
傘を持つ
もし 30%<降水確率≦70%
コイントスで傘を持つかどうかを決定する
逆に:
傘を持たない

この場合には 「ElseIf」条件式を使えます。

Dim rainProb As Double
rainProb = 0.3 ' 降水確率
If rainProb > 0.7 Then
MsgBox "傘を持って外出する"
ElseIf rainProb > 0.3 Then
MsgBox "コイントスで傘を持つかどうかを決定する"
Else
MsgBox "傘を持たないで外出する"
End If

If Then条件式は判断ロジックが実行する時に、条件判断を順次に演算し、データが条件を満たすまで結果を出します。例えば、最初のIf条件式が成立するかどうかを判定し、条件を満たす場合はこの条件式まで演算が終わりです。後のElseIfは実行しないです。

もし最初のIfが満たさない場合には、ElseIf条件式が演算し続けます。こういう訳でこれらのElseIf条件式の判断ロジックは「30%<降雨確率≤70%」ですが、これは最初のIf(降水確率>70%)に合っていない場合に実行できる条件です。この場合にはrainProbがきっと0.7以下のため、もう一個の条件式を追加すれば結構です。

If Thenの条件判定に複数のElseIfを追加できます。プログラムを実行する時には各条件式を順次に演算します。演算することは条件式に合うまで終わりです。もし最後まで条件式に合わない状況があれば、Elseを実行します。

条件式に合わない場合に指令を実行しなければ、Elseを削除しても大丈夫です。

Dim x As Integer
x = 8
If x > 5 Then
MsgBox "x is greater than 5"
End If

また、複数のIf Then条件判断式をネストのように組み合わせて、もっと複雑な判断ロジックを演算できます。

Dim rainProb As Double, trans As String
rainProb = 0.7 ' 降水確率
trans = "自転車に乗る" ' 通勤方法
If rainProb > 0.6 Then
If trans = "歩く" Then
MsgBox "傘を持って外出する"
ElseIf trans = "自転車に乗る" Then
MsgBox "雨着をはって外出する"
Else
MsgBox "車を運転するか?"
End If
Else
MsgBox "何も持たないで外出する"
End If

Select Case

Select Caseの機能はIf Thenに似ていますが、条件式が多い場合にコードを簡潔になることができます。

まず 「If Then」の実例をご覧ください。

Dim x As Integer
x = 7
If x <= 5 Then
MsgBox "Case 1"
ElseIf x = 6 Or x = 8 Then
MsgBox "Case 2"
ElseIf x = 7 Or x = 9 Then
MsgBox "Case 3"
ElseIf x = 10 Then
MsgBox "Case 4"
Else
MsgBox "Case 5"
End If

例の条件式は複雑であるため、「If Then」の書き方は多くの「ElseIf」が存在します。この場合、Select Caseを利用し、コードを簡潔に書き換えます。

Dim x As Integer
x = 7
Select Case x
Case Is <= 5
MsgBox "Case 1"
Case 6, 8
MsgBox "Case 2"
Case 7, 9
MsgBox "Case 3"
Case 10
MsgBox "Case 4"
Case Else
MsgBox "Case 5"
End Select

この「Select Case」コードは、上記の「If Then」コードと異なりますが、機能はまったく同じなので、プログラマーは自分の好みやニーズによって書き方を選びます。

実例

以下はExcelでVBA条件式に対応するサンプルプログラムです。

Dim weight, height, bmi As Double
height = Range("A2").Value / 100
weight = Range("B2").Value
bmi = weight / height ^ 2
Select Case bmi
Case Is < 18.5
MsgBox "BMI = " & bmi & "(痩せ)"
Case Is < 24
MsgBox "BMI = " & bmi & "(普通体重)"
Case Is < 27
MsgBox "BMI = " & bmi & "(前肥満)"
Case Is < 30
MsgBox "BMI = " & bmi & "(肥満1度)"
Case Is < 35
MsgBox "BMI = " & bmi & "(肥満2度)"
Case Else
MsgBox "BMI = " & bmi & "(肥満3度)"
End Select

マクロ実行ボタンを作成する方法に従って、Excelにボタンを作成し、マクロ関数を作成します。上記のコードを貼り付けると、BMI計算ツールが完成します。身長と体重を入力するだけ で、ボタンを押してBMI値を計算します。

Excel VBAで BMIを計算します

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です