第3回 VBA学習 〜IF文 (条件分岐)〜

プログラミング

はじめに

プログラムは大きく2つの要素で成り立っています。

  • 条件分岐(IF文)
  • 繰り返し処理(For文、DoLoop文など)

今回はそのうちの1つである「条件分岐」について学習していきます。

条件分岐とは

条件分岐とは何か?簡単に言うと比較する文です。

2つ以上の値や式の結果を指定した条件で比較する式

例えば、あなたはりんごが好きですか?嫌いですか?の質問のような形です。

もし〜なら〜、〜でないなら〜のような形です。

少し英語に似ていますね。

IF文の書き方

基本的な書き方は下記のようになります。

If 条件式 Then
    実行する処理
Else
    実行する処理
End If

この形を覚えておきましょう!

IF文の例題

プログラムでりんごの質問を書くとこんな感じになります。

青色の下線マーカーのあるコードが今回の条件分岐文になります。

Sub Ex_IF()
    Dim rc As VbMsgBoxResult
    rc = MsgBox("あなたはりんごが好きですか?", vbYesNo + vbQuestion)
    If rc = vbYes Then
        MsgBox "好きを選択しました!"
    Else
        MsgBox "嫌いを選択しました!"
    End If
End Sub

コードの簡易説明

りんごが好きですか?の質問に対して、ユーザーがYesまたはNoをクリックします。

クリックした結果をIF文で条件分岐させています。

今回の場合、もしYesを選択していたら「好きを選択しました!」を表示する。

それ以外なら「嫌いを選択しました!」を表示する。と言う意味になります。

IF文~実践~

例題を3つ実践していきましょう。

  • EX_1 もしセルA1にりんごがある場合の処理
  • EX_2 もしセルA1にりんごがある場合とそれ以外の処理
  • EX_3 もしセルA1にりんごがある場合、空欄の場合、りんご以外がある場合

メッセージ通知を「○○が存在しました。」と言う形でそれぞれ行うことにします。

また、セルの選択はCells(1,1).Valueで統一します。

セルA1の中に「りんご」と入力したり「空欄」にしたりしてみてください。処理が切り替われば成功です。

また、後々の回でセルの選択方法について詳しく勉強しますので安心して今回は指示通り作成してください。

では、早速トライしてみましょう!

IF文~模範解答〜

Sub EX_1
    If Cells(1,1).Value = "りんご" Then
        MsgBox "りんごが存在しました!"
    End If
End Sub
Sub EX_2
    If Cells(1,1).Value = "りんご" Then
        MsgBox "りんごが存在しました!"
    Else
        MsgBox "りんご以外が存在しました!"
    End If
End Sub
Sub EX_3
    If Cells(1,1).Value = "りんご" Then
        MsgBox "りんごが存在しました!"
    Else If Cells(1,1).value = "" Then
        MsgBox "空欄です!"
    Else
        MsgBox "りんご以外が存在しました!"
    End If
End Sub

以上がサンプルの答えとなります。

条件式の作り方(比較演算子)

この条件式を作るための比較演算子をまとめました。

種類は表にまとめておきます。

比較演算子意味
=等しい
<>等しくない
>より大きい
>=以上
<より小さい
<=以下

基本的には[=]等しいを完璧に覚えておいて、[>]または[<]を軽く覚える程度でいいと思います。

理由は

If Not cells(1,1).Value = "1" Then

と書けばセルA1が1以外ならと[=]等しいの否定を記述できるからです。

無理に全てを覚えようとせず悩んだらここで確認しましょう。

まとめ

いかがだったでしょうか?

少し難しい部分もあったかもしれません。例題は1つの模範解答にすぎません。

書き方によっては答えも変わることを知っておきましょう。

IF文で最も大切なことは、何と何を比較するのかです。

比較する対象によって分岐文が変わっていきます。

例えば、今回の模範解答は全て「りんごがあった場合」を1文目に書いて違いを分かり易くしていますが、「空欄の場合」を基準にしてもいいと言うことです。

その場合の記述はEX_3のように空欄以外の処理で複数ある場合はElseIf〜での処理となります。

プログラムに正解はないですが、状況によって先に分岐した方がいい場合や、後に分岐した方がいい場合などあるので状況を考えた文にすると良いと僕は考えます。

状況を考えた場合の例で、1番目に「空欄はダメ」2番目に「数字はダメ」セル確認の場合には先に空欄チェックのIF文を書くべきだと言うことです。

状況に応じてプログラムを組んでいくことで大規模なプログラムになった場合にも最小限のバグで済むので慣れてきたらまずはどういう状況での分岐になるかを考えることが大切になるでしょう。

以上、次回はFor文(繰り返し文)の学習に入ります。