【マクロVBA】If …Thenで条件分岐・判別をする!Elseで異なる処理パターンも可能に

条件分岐

セルの文字・数値や処理結果によって処理方法を分けたい・変えたいときはないでしょうか。
そんな時はIfを使えば可能になります。

さらにElseを使用することで条件にあった処理と異なる処理を分けることもできます。

複雑なシステム・計算をするときにはとても役立つと思うので是非参考にしてください。

それでは見ていきましょう。

 




■忙しい人向けのコピペ用プログラム

赤字条件式は指定したい条件を入力して活用してください

Sub IFによる条件分岐()

If 条件式 Then
  '正しい場合の処理
 Else
  '異なった場合の処理
End If

End Sub

■If Then の構造

 

まずは構造から見ていきましょう。

If 条件式 Then

’正しい場合の処理

Else

’異なった場合の処理

End If

If 条件式 Thenの説明

まずIfで条件分岐をすることを宣言します。
スペースを開けて条件式を入力します。その後のThenで条件式の完了を宣言します。

次の行で正しい場合の処理を入力します。

Elseの説明

条件式で異なった場合の処理を分けたい場合は入力します。
異なった場合を入力した場合はElseの次の行に処理プログラムを入力します。

入力しなけれなEnd Ifまで飛びます。

End If

End IfでIfの終わりを宣言します。

■実践

 

・通常の使用方法

 

それでは実践です。
見本で下図のシートを用意しました。

 

 

数値がB行にランダムに入っている状態です。
その隣のC行に偶数か奇数を判別して入力していきます。

偶数・奇数の判別式は今回は詳しく説明しませんが下記の式を判別式にします。
B3の「56」を偶数・奇数の判断式に直すと…


If Cells(3, 2).Value Mod 2 = 0 Then

 

このようになります。

「Mod 2」は2で割った際のあまりの数値を算出する機能があります。

つまり、B3を2で割って「1」余れば奇数。「0」になれば偶数になる計算式となります。

 

ではFor Nextを使用して繰り返し実行するようにプログラミングしましょう。

 

 

 

Sub 偶数or奇数()

Dim A As Long

For A = 3 To 10 Step 1

 If Cells(A, 2).Value Mod 2 = 0 Then
  Cells(A, 3) = “偶数”

 Else
  Cells(A, 3) = “奇数”

 End If

Next A

End Sub

このようになりました。
では実行してみましょう。

 

 

正しく実行できてますね。

 

・Elseを使用せずに実施

 

先ほどは偶数であれば「偶数」と出力、奇数であれば「奇数」と出力しましたが

場合によっては偶数の時のみ「偶数」と1つのパターンのみでいい時もあると思います。

 

その際はElseを省略することも可能です。

 

先ほどのプログラムと比較しましょう。

 

If Cells(A, 2).Value Mod 2 = 0 Then
Cells(A, 3) = "偶数"
Else
Cells(A, 3) = "奇数"
End If

 

上記のプログラムを偶数のみ「偶数」と出力するようにしてみましょう。

Elseを取り除いたプログラムはこのようになります。

 

If Cells(A, 2).Value Mod 2 = 0 Then
Cells(A, 3) = "偶数"
End If

 

これで1パターンのみの出力が可能になりました。

 

・Ifの条件分岐先でさらにIfを使用する

 

If …Thenは条件分岐先でも使用することができ、複数の条件分岐が可能です。

 

例えば先ほどの「偶数」「奇数」の2パターンの条件分岐を

「50以上の偶数」 ・ 「50以下の偶数」 ・「50以上の奇数」・ 「50以下の奇数」

の4パターンの出力にしてみたいと思います。

 

プログラムはこのようになります。

Sub 偶数or奇数()

Dim A As Long

For A = 3 To 10 Step 1

If Cells(A, 2).Value Mod 2 = 0 Then
 If Cells(A, 2).Value >= 50 Then
  Cells(A, 3) = “50以上の偶数”
 Else
  Cells(A, 3) = “50以下の偶数”
 End If

Else

If Cells(A, 2).Value >= 50 Then
  Cells(A, 3) = “50以上の奇数”
 Else
  Cells(A, 3) = “50以下の奇数”
 End If

End If

Next A

End Sub

 

実行した結果はこちらです。

このように4パターンの出力が可能になりました。

 

しかしプログラムを見てわかる通り、複雑になってしまいます。

把握できる範囲で使用してみてください。

■練習問題

練習問題も別の記事でまとめているので是非参考にしてみてください!

⬛︎公式

わかりやすいように説明したため公式と使用する語句が異なりますが
マイクロソフト公式の説明については下記のリンクを参照してください☟

If…Then…Else ステートメント (VBA) | Microsoft Learn

■よくあるエラーと対処法

ではIf …Thenを使用して発生するエラーとそれに対する対処法を説明します。

 

・Ifブロックに対応するEnd Ifがありません。

このエラーは単純ですがIfに対してEnd Ifがないのが原因です。

Ifを一つ使用している場合はこのようなエラーになることは少ないと思いますが

何度もIfを使用している場合はプログラムの流れが把握できなくなり、

入力し忘れがあると思います。

 

原則、Ifの使用回数分、End Ifが必要ということを心掛けてください。

 

 

■まとめ

 

いかがだったでしょうか。
判断が必要なシステムには必要な知識ですよね。

End Ifは忘れずにいれてくださいね!

それでは次回の記事でお会いしましょう。

 

次回の記事はこちらから☟

【VBA知識 10】For Eath で配列・コレクション内で繰り返し・ループ処理をする。Excel ► 独学エクセル塾 (dokugakuexcel.com)

 

 

このサイトでは独学でエクセルの技術を磨くことができます。基本操作やVBA、関数を随時更新中です。

VBAではストーリー形式で説明していますが途中からでもわかるようにしています。ぜひ参考にしてみてください。

いつかはエクセルの教科書のようなサイトを目指してます。
コメントで知りたいことや悩みなど記入していただければお答えしていきます。
ぜひ、ほかの記事もご覧ください。皆様の参考になれれば幸いです!

コメント

  1. […] 【マクロVBA知識 9】If …Thenで条件分岐・判別をする(○○なら△△)処理パターンの複数化 ► 独学エクセル塾 (dokugakuexcel.com) […]