Excel でよく使う関数の1つに IF 関数があります。
そして、VBA でも同様に IF文(IF ステートメント)というものがあります。
この両者を使えば同じ計算をすることができ、VBA を新たに学習し始めた方にとっては関数と照らし合わせながら学習すると効果的です。
今日は、Excel の IF 関数と VBA の IF 文について説明します。
1、条件が1つの場合の IF 関数、IF 文の使い方
Excel 関数でも VBA でも IF を使う場合には、条件に当てはまるか否かで行う処理が分かれます。
Excel の IF 関数の使い方
IF 関数は次のように記述します。
条件に当てはまる場合 処理①を行い
当てはまらない場合 処理②を行います。
次の表で、介護保険料の支払義務がある人に「有」を、それ以外の人には「無」を表示させたいと思います。
介護保険は 40歳以上で支払義務が生じます。
40 際以上の場合は「有」と表示し、それ以外の場合は「無」と表示させれば良いわけですね。
表の一番上の人「AAA」の「介護保険料の支払義務」の欄(セル E6)に次のように入力します。
「=IF(D6>=40,”有”,”無”)」
すると、E6 に次のように表示されます。
この式を同様にセル E7 ~ E10 にも入力しましょう。
セル E6~ E10 を選択して「Ctrl + D」を押します。
これで、「介護保険料の支払義務」の有無を表示することができました。
VBA の IF 文の使い方
さて、VBA の IF 文は次のように記述して使います。
処理①
Else
処理②
End If
条件に当てはまる場合 処理①を行い
当てはまらない場合 処理②を行います。
先の IF 関数の場合と同じく、次の表で介護保険料の支払義務がある人に「有」を、それ以外の人には「無」を表示させたいと思います。
VBE を開き標準モジュールを挿入し次のように記述しましょう。
プロシージャ名を「If_Test」としておきます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
Sub If_Test() Dim i As Double For i = 1 To 5 If Cells(5 + i, 4) >= 40 Then Cells(5 + i, 5) = "有" Else Cells(5 + i, 5) = "無" End If Next i End Sub |
このコードを先のシートを開いた状態で実行すると、「介護保険料の支払義務」の有無を表示することができます。
For 文を用いて i を 1から5 まで変化させることで、5人分の処理を行っています。
1つ1つの処理は、
Cells(5 + i, 4) が 40 以上の場合、Cells(5 + i, 5) に “有” と表示し、それ以外の場合 “無” と表示するというものです。
2、条件が2つある場合の IF 関数、IF 文の使い方
IF を使う場合で、条件が複数ある場合もあります。
条件1、条件2の2つの条件ごとに分岐して処理①~③の3つの処理のいずれかを行う場合を考えてみます。
Excel の IF 関数を使う場合
IF 関数を使う場合、次のように記述します。
条件1に当てはまる場合 処理①を行い
それ以外で
条件2に当てはまる場合処理②を行い、条件2に当てはまらない場合処理③を行います。
次の表に人ごとに通勤距離(km)を入力してあります。
E列に「遠い」「普通」「近い」を表示させたいと思います。
判定として通勤距離が
●10km 以下の場合 近い
●10km 超 20km以下の場合 普通
●20km 超の場合 遠い
とします。
まず、セル E6 に以下のように入力しましょう。
「=IF(D6<=10,”近い”,IF(D6<=20,”普通”,”遠い”))」
すると 「AAA」の通勤距離は 2km なのでセル E6 には「近い」と表示されます。
今回の分岐を図に表すと下のようになります。
さて、この式を同様にセル E7 ~ E10 にも入力するため、セル E6~ E10 を選択して「Ctrl + D」を押します。
すると、全ての人の通勤距離の「遠い」「普通」「近い」が表示されます。
VBA の IF 文を使う場合
さて、VBA の IF 文は次のように記述して使います。
If 条件1 Then
処理①
ElseIf 条件2 Then
処理②
Else
処理③
End If
次の表に先の IF 関数の場合と同じく、人ごとに通勤距離(km)を入力してあります。
E列に「遠い」「普通」「近い」を表示させたいと思います。
VBE を開き標準モジュールを挿入し次のように記述しましょう。
プロシージャ名を「If_Test2」としておきます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
Sub If_Test2() Dim i As Double For i = 1 To 5 If Cells(5 + i, 4) <= 10 Then Cells(5 + i, 5) = "近い" ElseIf Cells(5 + i, 4) <= 20 Then Cells(5 + i, 5) = "普通" Else Cells(5 + i, 5) = "遠い" End If Next i End Sub |
このコードを先のシートを開いた状態で実行すると、「介護保険料の支払義務」の有無を表示することができます。
For 文を用いて i を 1から5 まで変化させることで、5人分の処理を行っています。
1つ目の条件を IF の後に記述し、それに当てはまらない場合 ElseIf の後に記述した2つ目の条件に当てはまるか否かを順番にみていきます。
3、条件が複数ある場合の IF 関数、IF 文の使い方
さて、条件が2つある場合上記のように処理しましたが、もっと条件が多い場合の処理を行うこともできます。
多数の条件がある場合を考えてみます。
Excel の IF 関数を使う場合
次のセルD5 に「月」を入力すれば、セルD6 にその月の「日数」が表示されるようにしたいと思います。
他の方法もありますが、敢えて IF 関数を用いますね!
セルD6 に次のように入力しましょう。
1 |
=IF(D5=1,31,IF(D5=2,28,IF(D5=3,31,IF(D5=4,30,IF(D5=5,31,IF(D5=6,30,IF(D5=7,31,IF(D5=8,31,IF(D5=9,30,IF(D5=10,31,IF(D5=11,30,31))))))))))) |
するとセルD5 1~12 のいずれかの月を入力した場合にセル D6 にその月の日数が表示されます。
先にも示した条件が2つの場合の式の構成は以下のようになりますが、これを何重にも重ねて式を作らなければなりません。
条件が多い場合は関数で入力するのも大変です(というか数式が入り込んで見づらい。。)。
条件が多い場合は IF 関数よりも、VBA を使って計算してしまった方が良いと思います。
VBA の IF 文を使う場合
さて、VBA の IF 文は次のように記述して使います。
処理①
ElseIf 条件2 Then
処理②
ElseIf 条件3 Then
処理③
ElseIf 条件4 Then
処理④
ElseIf 条件5 Then
・
・
・
・
End If
先と同様に次のセルD5 に「月」を入力すれば、セルD6 にその月の「日数」が表示されるようにしたいと思います。
VBE を開き標準モジュールを挿入し次のように記述しましょう。
プロシージャ名を「If_Test3」としておきます。
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 28 29 30 31 32 33 34 |
Sub If_Test3() Dim i As Double If Cells(5, 4) = 1 Then Cells(6, 4) = 31 ElseIf Cells(5, 4) = 2 Then Cells(6, 4) = 28 ElseIf Cells(5, 4) = 3 Then Cells(6, 4) = 31 ElseIf Cells(5, 4) = 4 Then Cells(6, 4) = 30 ElseIf Cells(5, 4) = 5 Then Cells(6, 4) = 31 ElseIf Cells(5, 4) = 6 Then Cells(6, 4) = 30 ElseIf Cells(5, 4) = 7 Then Cells(6, 4) = 31 ElseIf Cells(5, 4) = 8 Then Cells(6, 4) = 31 ElseIf Cells(5, 4) = 9 Then Cells(6, 4) = 30 ElseIf Cells(5, 4) = 10 Then Cells(6, 4) = 31 ElseIf Cells(5, 4) = 11 Then Cells(6, 4) = 30 ElseIf Cells(5, 4) = 12 Then Cells(6, 4) = 31 Else End If End Sub |
セルD5 1~12 のいずれかの月を入力すると、セル D6 にその月の日数が表示されます。
今回は結果を表示するセルはセル「D6」の1つだけなので、For 文を使う必要はありません。
If、Else If で条件分岐を繰り返して各月の場合の日数を表示させています。
4、まとめ
Excel の IF 関数と VBA の IF 文は同じ処理を行うことができます。
VBA を学習し出したばかりの方は、関数との比較で理解が深まることがあるので参考にして頂きたいです。
条件が多数ある場合は IF 関数だと数式入力の際に見づらいので、VBA を使った方が良いでしょう。
条件が多い場合は VBA の方が見やすいです。
編集後記
昨日(8/16)は富士山こどもの国でのキャンプ最終日。
ようやくかろうじて晴れ、ニジマスのつかみ取り、釣り、工作などで楽しむことができました!