目次
目標
VBAのIf-Thenステートメント(条件分岐)のネストについて理解し利用できる
論理演算子を利用した複数の条件での条件分岐を理解し利用できる
この記事で扱うIfステートメントは2種類です!
制御構文|Excel VBA (Part.2)でIfステートメントを利用した単純な条件分岐を行いました。Part.3ではIfステートメントの条件分岐を段階的に行わせる処理を実行してみます。段階的に条件を適用させる方法としては以下の2種類が存在します。
- Ifステートメントを入れ子にする(ネストする)
- 複数の条件を論理演算子を利用して順番に処理する
この記事では、これらについてサンプルプログラムを準備して確認していきます。
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 条件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ソフト・ウィルス対策ソフトについて書いています。...