01-VBA

制御構文|Excel VBA (Part.3)【If Then】ネスト・論理演算子利用編 | 現役エンジニア&プログラミングスクール講師

目標

VBAのIf-Thenステートメント(条件分岐)のネストについて理解し利用できる

論理演算子を利用した複数の条件での条件分岐を理解し利用できる

この記事で扱うIfステートメントは2種類です!

制御構文|Excel VBA (Part.2)でIfステートメントを利用した単純な条件分岐を行いました。Part.3ではIfステートメントの条件分岐を段階的に行わせる処理を実行してみます。段階的に条件を適用させる方法としては以下の2種類が存在します。

  1. Ifステートメントを入れ子にする(ネストする)
  2. 複数の条件を論理演算子を利用して順番に処理する

この記事では、これらについてサンプルプログラムを準備して確認していきます。

Ifステートメントのネストの概要と利用方法

ネストとは

プログラミングでいうネストとは「入れ子構造」のことを指します。例えばマトリョーシカ人形のように大きい入れ物の中に段々と小さな人形を入れているような構造のことです。

ネストを利用したIfステートメントの利用方法

構文*********************
If 条件 Then
条件に合ったときの処理
If 条件 Then
条件に合ったときの処理
ElseIf 条件 Then
二番目の条件に合ったときの処理
Else
条件に合わなかったときの処理
End If
End If
*********************
Option Explicit

Sub babyLife1()

    Dim months As Integer
    Dim actionNum As Integer
    
    months = InputBox("月齢を入力して下さい。")
    actionNum = InputBox("知りたい情報の番号を入力して下さい" & Chr(10) _
                        & "睡眠時間" & Chr(9) & ":1" & Chr(10) _
                        & "授乳時間" & Chr(9) & ":2" & Chr(10) _
                        & "お風呂時間" & Chr(9) & ":3" & Chr(10))
    
    If months <= 0 Then
        If actionNum = 1 Then
            MsgBox "0か月未満の新生児はお昼は約2時間間隔、夜は3時間間隔で睡眠をとります。ママは睡眠不足になりがちなので家事など周囲の人が助けてあげましょう。"
        ElseIf actionNum = 2 Then
            MsgBox "0か月未満の新生児は授乳の間隔は短いです。目が覚めたら授乳のタイミングとするのが一般的です。"
        ElseIf actionNum = 3 Then
            MsgBox "0か月未満の新生児は沐浴となります。ガーゼを利用して優しく洗ってあげます。"
        End If
    ElseIf months <= 3 Then
        If actionNum = 1 Then
            MsgBox "1か月から3か月未満の赤ちゃんは、1日の中で約3時間間隔で睡眠を取ります。この時期もママは睡眠不足になりがちなので周囲の人は助けてあげましょう。"
        ElseIf actionNum = 2 Then
            MsgBox "1か月から3か月未満の赤ちゃんの授乳の間隔3時間おきです。目が覚めたら授乳のタイミングです。"
        ElseIf actionNum = 3 Then
            MsgBox "1か月から3か月未満の赤ちゃんはお風呂に入ることが出来ます。湯船で抱っこしてガーゼで優しく洗ってあげます。"
        End If
    ElseIf months <= 6 Then
            If actionNum = 1 Then
            MsgBox "6か月未満の赤ちゃんは、夜の睡眠時間が約8時間と長くなります。授乳の間隔は減りますがおむつの交換もあるのでママは睡眠不足を補うためにも周囲の人は助けてあげましょう。"
        ElseIf actionNum = 2 Then
            MsgBox "6か月未満の赤ちゃんは授乳以外にも離乳食が始まります。離乳食づくりも大変です。家事は家族で助け合いましょう。"
        ElseIf actionNum = 3 Then
            MsgBox "6か月未満の赤ちゃんはお風呂に入ることが出来ます。湯船で抱っこしてガーゼで優しく洗ってあげます。"
        End If
    ElseIf months <= 8 Then
            If actionNum = 1 Then
            MsgBox "8か月未満の赤ちゃんは、夜の睡眠時間が約8時間ですが、お昼はお昼寝タイムを除いてお散歩や室内遊びなど起きている時間が増えます。日中の過ごし方が夜中の睡眠に影響します。家族でスケジュールの管理を頑張りましょう。"
        ElseIf actionNum = 2 Then
            MsgBox "8か月未満の赤ちゃんのは離乳食の回数が増えます。離乳食づくりも大変です。家事は家族で助け合いましょう。"
        ElseIf actionNum = 3 Then
            MsgBox "8か月未満の赤ちゃんはお風呂に入ることが出来ます。湯船で抱っこしてガーゼで優しく洗ってあげます。"
        End If
    ElseIf months <= 11 Then
            If actionNum = 1 Then
            MsgBox "11か月未満の赤ちゃんは、夜の睡眠時間が約8~9時間です。お昼はお昼寝タイムを除いてお散歩や室内遊びなど起きている時間が増えます。日中の過ごし方が夜中の睡眠に影響します。家族でスケジュールの管理を頑張りましょう。"
        ElseIf actionNum = 2 Then
            MsgBox "11か月未満の赤ちゃんのは日中の食事はほとんどが離乳食になります。離乳食づくりも大変です。家事は家族で助け合いましょう。このころから柔らかい手作りおやつなども食べ始めます。"
        ElseIf actionNum = 3 Then
            MsgBox "11か月未満の赤ちゃんはお風呂に入ることが出来ます。湯船で抱っこしてガーゼで優しく洗ってあげます。"
        End If
    ElseIf months <= 12 Then
            If actionNum = 1 Then
            MsgBox "12か月の赤ちゃんは、夜の睡眠時間が約8~9時間です。お昼はお昼寝タイムを除いてお散歩や室内遊びなど起きている時間が増えます。日中の過ごし方が夜中の睡眠に影響します。家族でスケジュールの管理を頑張りましょう。"
        ElseIf actionNum = 2 Then
            MsgBox "12か月の赤ちゃんのは日中の食事は普通食に変わっていきます。"
        ElseIf actionNum = 3 Then
            MsgBox "12か月の赤ちゃんはお風呂に入ることが出来ます。湯船で抱っこしてガーゼで優しく洗ってあげます。"
        End If
    End If
End Sub

論理演算子を利用したIfステートメント

論理演算子を利用したIfステートメントはネストをしない(ネストを避ける)記述方法です

論理演算子を利用するケース

Ifステートメントをネストで書くと構造が深くなっていきます。あまりに深くなりすぎると可読性も低くなります。そのような場合は論理演算子を利用が考えられないか検討します。今回のサンプルスクリプトだと改善はあまり見られませんが、記述方法の参考として取り上げています。

論理演算子を利用したIfステートメントを書いてみる

構文*********************
If 条件1 And 条件2 Then
条件1と条件2の両方に合ったときの処理
Elseif 条件1 And 条件3 Then
  条件1と条件3の両方に合ったときの処理
Elseif 条件1 And 条件4 Then
  条件1と条件4の両方に合ったときの処理
Else
  条件に合わなかったときの処理
End If
*********************
Sub babyLife2()

    Dim months As Integer
    Dim actionNum As Integer
    
    months = InputBox("月齢を入力して下さい。")
    actionNum = InputBox("知りたい情報の番号を入力して下さい" & Chr(10) _
                        & "睡眠時間" & Chr(9) & ":1" & Chr(10) _
                        & "授乳時間" & Chr(9) & ":2" & Chr(10) _
                        & "お風呂時間" & Chr(9) & ":3" & Chr(10))
    
    If months <= 0 And actionNum = 1 Then
        MsgBox "0か月未満の新生児はお昼は約2時間間隔、夜は3時間間隔で睡眠をとります。ママは睡眠不足になりがちなので家事など周囲の人が助けてあげましょう。"
    ElseIf months <= 0 And actionNum = 2 Then
        MsgBox "0か月未満の新生児は授乳の間隔は短いです。目が覚めたら授乳のタイミングとするのが一般的です。"
    ElseIf months <= 0 And actionNum = 3 Then
        MsgBox "0か月未満の新生児は沐浴となります。ガーゼを利用して優しく洗ってあげます。"

    ElseIf months <= 3 And actionNum = 1 Then
        MsgBox "1か月から3か月未満の赤ちゃんは、1日の中で約3時間間隔で睡眠を取ります。この時期もママは睡眠不足になりがちなので周囲の人は助けてあげましょう。"
    ElseIf months <= 3 And actionNum = 2 Then
        MsgBox "1か月から3か月未満の赤ちゃんの授乳の間隔3時間おきです。目が覚めたら授乳のタイミングです。"
    ElseIf months <= 3 And actionNum = 3 Then
        MsgBox "1か月から3か月未満の赤ちゃんはお風呂に入ることが出来ます。湯船で抱っこしてガーゼで優しく洗ってあげます。"

    ElseIf months <= 6 And actionNum = 1 Then
        MsgBox "6か月未満の赤ちゃんは、夜の睡眠時間が約8時間と長くなります。授乳の間隔は減りますがおむつの交換もあるのでママは睡眠不足を補うためにも周囲の人は助けてあげましょう。"
    ElseIf months <= 6 And actionNum = 2 Then
        MsgBox "6か月未満の赤ちゃんは授乳以外にも離乳食が始まります。離乳食づくりも大変です。家事は家族で助け合いましょう。"
    ElseIf months <= 6 And actionNum = 3 Then
        MsgBox "6か月未満の赤ちゃんはお風呂に入ることが出来ます。湯船で抱っこしてガーゼで優しく洗ってあげます。"
        
    ElseIf months <= 8 And actionNum = 1 Then
        MsgBox "8か月未満の赤ちゃんは、夜の睡眠時間が約8時間ですが、お昼はお昼寝タイムを除いてお散歩や室内遊びなど起きている時間が増えます。日中の過ごし方が夜中の睡眠に影響します。家族でスケジュールの管理を頑張りましょう。"
    ElseIf months <= 8 And actionNum = 2 Then
        MsgBox "8か月未満の赤ちゃんのは離乳食の回数が増えます。離乳食づくりも大変です。家事は家族で助け合いましょう。"
    ElseIf months <= 8 And actionNum = 3 Then
        MsgBox "8か月未満の赤ちゃんはお風呂に入ることが出来ます。湯船で抱っこしてガーゼで優しく洗ってあげます。"

    ElseIf months <= 11 And actionNum = 1 Then
        MsgBox "11か月未満の赤ちゃんは、夜の睡眠時間が約8~9時間です。お昼はお昼寝タイムを除いてお散歩や室内遊びなど起きている時間が増えます。日中の過ごし方が夜中の睡眠に影響します。家族でスケジュールの管理を頑張りましょう。"
    ElseIf months <= 11 And actionNum = 2 Then
        MsgBox "11か月未満の赤ちゃんのは日中の食事はほとんどが離乳食になります。離乳食づくりも大変です。家事は家族で助け合いましょう。このころから柔らかい手作りおやつなども食べ始めます。"
    ElseIf months <= 11 And actionNum = 3 Then
        MsgBox "11か月未満の赤ちゃんはお風呂に入ることが出来ます。湯船で抱っこしてガーゼで優しく洗ってあげます。"

    ElseIf months <= 12 And actionNum = 1 Then
        MsgBox "12か月の赤ちゃんは、夜の睡眠時間が約8~9時間です。お昼はお昼寝タイムを除いてお散歩や室内遊びなど起きている時間が増えます。日中の過ごし方が夜中の睡眠に影響します。家族でスケジュールの管理を頑張りましょう。"
    ElseIf months <= 12 And actionNum = 2 Then
        MsgBox "12か月の赤ちゃんのは日中の食事は普通食に変わっていきます。"
    ElseIf months <= 12 And actionNum = 3 Then
        MsgBox "12か月の赤ちゃんはお風呂に入ることが出来ます。湯船で抱っこしてガーゼで優しく洗ってあげます。"
    End If
End Sub

実行結果はいづれも同様の結果となります。

今回は以上となります。

初心者も実践で通用!「VBA・VBS」おすすめ書籍5選 | 現役エンジニア&プログラミングスクール講師「VBA・VBS」初心者の方が実践業務の中でそれらを活用しt活躍できるために必要な知識を習得できる書籍を紹介しています。ページの下部には「おすすめのITスクール情報」「おすすめ求人サイト」について情報を掲載中。...

ブックマークのすすめ

「ほわほわぶろぐ」を常に検索するのが面倒だという方はブックマークをお勧めします。ブックマークの設定は別記事にて掲載しています。

「お気に入り」の登録・削除方法【Google Chrome / Microsoft Edge】| 現役エンジニア&プログラミングスクール講師「お気に入り」の登録・削除方法【Google Chrome / Microsoft Edge】について解説している記事です。削除方法も掲載しています。...
【パソコン選び】失敗しないための重要ポイント | 現役エンジニア&プログラミングスクール講師【パソコン選び】失敗しないための重要ポイントについての記事です。パソコンのタイプと購入時に検討すべき点・家電量販店で見かけるCPUの見方・購入者が必要とするメモリ容量・HDDとSSDについて・ディスプレイの種類・バッテリーの持ち時間や保証・Officeソフト・ウィルス対策ソフトについて書いています。...
RELATED POST
01-VBA

初心者も実践で通用!「VBA・VBS」おすすめ書籍5選 | 現役エンジニア&プログラミングスクール講師

2024年1月11日
プログラミング学習 おすすめ書籍情報発信 パソコン初心者 エンジニア希望者 新人エンジニア IT業界への就職・転職希望者 サポートサイト Programming learning Recommended schools Recommended books Information dissemination Computer beginners Prospective engineers New engineers Prospective job seekers in the IT industry Support site
01-VBA

VBScriptを利用したファイルの複製(Part.3)| 現役エンジニア&プログラミングスクール講師

2023年2月13日
プログラミング学習 おすすめ書籍情報発信 パソコン初心者 エンジニア希望者 新人エンジニア IT業界への就職・転職希望者 サポートサイト Programming learning Recommended schools Recommended books Information dissemination Computer beginners Prospective engineers New engineers Prospective job seekers in the IT industry Support site
01-VBA

ExcelVBAの「Worksheetsプロパティ」| 現役エンジニア&プログラミングスクール講師

2022年9月10日
プログラミング学習 おすすめ書籍情報発信 パソコン初心者 エンジニア希望者 新人エンジニア IT業界への就職・転職希望者 サポートサイト Programming learning Recommended schools Recommended books Information dissemination Computer beginners Prospective engineers New engineers Prospective job seekers in the IT industry Support site
01-VBA

クラスの利用方法|Excel VBA (Part.1) | 現役エンジニア&プログラミングスクール講師

2023年2月17日
プログラミング学習 おすすめ書籍情報発信 パソコン初心者 エンジニア希望者 新人エンジニア IT業界への就職・転職希望者 サポートサイト Programming learning Recommended schools Recommended books Information dissemination Computer beginners Prospective engineers New engineers Prospective job seekers in the IT industry Support site
01-VBA

ExcelVBAのOffsetプロパティ | 現役エンジニア&プログラミングスクール講師

2022年8月28日
プログラミング学習 おすすめ書籍情報発信 パソコン初心者 エンジニア希望者 新人エンジニア IT業界への就職・転職希望者 サポートサイト Programming learning Recommended schools Recommended books Information dissemination Computer beginners Prospective engineers New engineers Prospective job seekers in the IT industry Support site
01-VBA

制御構文|Excel VBA (Part.10)【Do Loop】実用的なプログラム編 | 現役エンジニア&プログラミングスクール講師

2022年12月2日
プログラミング学習 おすすめ書籍情報発信 パソコン初心者 エンジニア希望者 新人エンジニア IT業界への就職・転職希望者 サポートサイト Programming learning Recommended schools Recommended books Information dissemination Computer beginners Prospective engineers New engineers Prospective job seekers in the IT industry Support site