VBA If, ElseIf, Else (If文の究極のガイド)

Written by

Editorial Team

Reviewed by

Steve Rynearson

Translated by

masahiro yoshida

Last updated on 2月 5, 2023

VBA Ifステートメント

vba else if statement jp

If Then

VBAのIfステートメントでは、式が真か偽かをテストし、その結果に基づいて異なる処理を実行することができます。

簡単な例を見てみましょう。

If Range("a2").Value > 0 Then Range("b2").Value = "Positive"

これは、A2セルの値が0より大きいかどうかをテストします。 もしそうなら、B2セルを “Positive “に設定します。

vba if then jp

注:条件をテストするときは、比較演算子 =, >, <, <>, <=, >= を使用します。これらについては、記事の後半でより詳しく説明します。

以下は、簡単な1行のIf文の構文です。

If [test_expression] then [action]

読みやすくするために、行継続文字(アンダースコア)を使って、上の図のようにIfステートメントを2行に展開することができます。

If [test_expression] Then _
    [action]
If Range("a2").Value > 0 Then _
   Range("b2").Value = "正"

End If

上記の「一行」if文は、1つの条件をテストする場合にはうまく機能します。しかし、IF文が複数の条件によって複雑になると、if文の最後に「End If」を追加する必要があります。

If Range("a2").Value > 0 Then
  Range("b2").Value = "正"
End If

vba end if jp

構文は以下のようになります。

If [test_expression] Then
  [action]
End If

End Ifは、if文の終了を意味します。

今度はサンプルコードにElseIFを加えてみましょう。

ElseIF – 複数の条件

ElseIfは、既存のIf文に追加するものです。ElseIfは、前の条件が満たされていない場合にのみ、その条件が満たされるかどうかをテストします。

前の例では、セルの値が正であるかどうかをテストしました。ここで、ElseIf を使ってセル値がマイナスであるかどうかもテストしてみましょう。

If Range("a2").Value > 0 Then
    Range("b2").Value = "正"
ElseIf Range("a2").Value < 0 Then
    Range("b2").Value = "負"
End If

vba elseif jp

複数のElseIfを使用して、複数の条件をテストすることができます。

Sub If_Multiple_Conditions()

    If Range("a2").Value = "猫" Then
        Range("b2").Value = "ニャー"
    ElseIf Range("a2").Value = "犬" Then
        Range("b2").Value = "ワンワン"
    ElseIf Range("a2").Value = "あひる" Then
        Range("b2").Value = "クワッ"
    End If

End Sub

vba multiple elseif jp

次はサンプルコードにElseを追加してみます。

Else

Elseはそれ以前のすべての条件が満たされなかった場合に実行されます。 セルの値が正でも負でもない場合、ゼロでなければならないことを示すのに、Elseを使用する例です。

If Range("a2").Value > 0 Then
    Range("b2").Value = "正"
ElseIf Range("a2").Value < 0 Then
    Range("b2").Value = "負"
Else
    Range("b2").Value = "ゼロ"
End If

vba else jp

If-Else

If文の最も一般的なタイプは、単純なIf-Elseです。

Sub If_Else()
    If Range("a2").Value > 0 Then
        Range("b2").Value = "正"
    Else
        Range("b2").Value = "正でない"
    End If
End Sub

vba if else jp

ネストされたIF

if文の内部を「入れ子」にすることもできます。

Sub Nested_Ifs()
    If Range("a2").Value > 0 Then
        Range("b2").Value = "正"
    Else
        If Range("a2").Value < 0 Then
            Range("b2").Value = "負"
        Else
            Range("b2").Value = "ゼロ"
        End If
    End If
End Sub

vba nested ifs jp

IF – Or、And、Xor、Not

次に、論理演算子 Or、And、Xor、Notについて説明します。

If Or

Or演算子は、少なくとも1つの条件を満たしているかどうかをテストします。 次のコードは、A2セルの値が5,000より小さいか10,000より大きいかをテストするものです。

If Range("a2").Value < 5000 Or Range("a2").Value > 10000 Then
    Range("b2").Value = "範囲外"
End If

vba if or jp

1行に複数のOrを含めることができます。

If Range("a2").Value < 5000 Or Range("a2").Value > 10000 Or Range("a2").Value = 9999 Then
    Range("b2").Value = "範囲外"
End If

複数のOrを使用する場合は、コードを読みやすくするために行継続文字を使用することをお勧めします。

If Range("a2").Value < 5000 Or _
   Range("a2").Value > 10000 Or _
   Range("a2").Value = 9999 Then
       Range("b2").Value = "範囲外"
End If

vba multiple ors jp

If And

And演算子を使うと、すべての条件を満たすかどうかをテストすることができます。

If Range("a2").Value >= 5000 And Range("a2").Value <= 10000 Then
    Range("b2").Value = "範囲内"
End If

vba if and jp

If Xor

Xor演算子は、いずれか1つの条件を満たすかどうかをテストすることができます。一つも条件を満たさない場合、XorはFALSEを返し、2つ以上の条件を満たした場合もFALSEを返します。

VBAのプログラミングでXorが使われているのを見ることは、ほとんどありません。

If Not

Not演算子は、FALSEをTRUEに、またはTRUEをFALSEに変換するために使用されます。

Sub IF_Not()
    MsgBox Not (True)
End Sub

vba if not jp

Not演算子では、切り換える式を括弧で囲む必要があることに注意してください。 Not演算子は、If文にも適用することができます。

If Not (Range("a2").Value >= 5000 And Range("a2").Value <= 10000) Then
    Range("b2").Value = "範囲外"
End If

vba if not 2 jp

Ifの比較

比較を行う場合、通常、比較演算子のいずれかを使用します。

比較演算子 説明
= に等しい
<> とは等しくない
> より大きい
>= より大きいか等しい
< より小さい
<= より小さいか等しい

ただし、TRUE または FALSE を返す式や関数を使用することもできます。

If – ブール関数

If文の式を作るとき、TRUEまたはFALSEを返す任意の関数を使用することもできます。 VBAには、このような関数がいくつかあります。

関数名 説明
IsDate 式が日付として有効である場合に TRUE を返す
IsEmpty 空白セルや未定義の変数をチェックする
IsError エラー値をチェックする
IsNull NULL値をチェックする
IsNumeric 数値のチェック

これらは次のように呼び出すことができます。

If IsEmpty(Range("A1").Value) Then MsgBox "セルは空です"

また、ExcelにはWorksheetFunctionを使って呼び出すことができる関数がたくさんあります。ここでは、ExcelのIsText関数の例を示します。

If Application.WorksheetFunction.IsText(Range("a2").Value) Then _
   MsgBox "セルはテキストです"

また、ユーザー定義関数(UDF)を独自に作成することも可能です。以下では、TRUEを返す単純なブール関数を作成します。そして、If文の中でその関数を呼び出します。

Sub If_Function()

If TrueFunction Then
    MsgBox "True"
End If

End Sub

Function TrueFunction() As Boolean
    TrueFunction = True
End Function

vba if boolean function jp

テキストを比較する

数字の比較と同じように、テキストの比較もできます。

Msgbox "a" = "b"
Msgbox "a" = "a"

テキストを比較する場合、「大文字と小文字」に注意する必要があります(大文字か小文字か)。 VBAのデフォルトでは、大文字と小文字が異なる文字はマッチングしないものとみなされます。 つまり、”A” <> “a “となります。

VBAに大文字小文字を無視させたい場合は、Option Compare Text宣言をモジュールの先頭に追加する必要があります。

Option Compare Text

その宣言の後、”A” = “a “となります。

Option Compare Text
Sub If_Text()
   MsgBox "a" = "A"
End Sub

VBA If Like

VBAのLike演算子を使うと、テキストの厳密でない比較ができます。詳しくは「Like演算子」のリンクをクリックしてご覧ください。

Dim strName as String
strName = "Mr. Charles"

If strName Like "Mr*" Then
    MsgBox "True"
Else
    MsgBox "False"
End If

ここでは、アスタリスク「*」のワイルドカードを使用しています。「*」は任意の数の任意の文字を表します。 したがって、上記のIf文はTRUEを返すことになります。 このように、Like演算子はテキストを扱う上で非常に強力なツールですが、あまり使われていないことが多いようです。

Ifループ

VBAのループは、アクションを繰り返すことができます。IF-ELSEとLoopを組み合わせることで、多くの計算を素早く処理することができます。 正負の例の続きで、For Eachループを追加して、セルの範囲をループするようにします。

Sub If_Loop()
Dim Cell as Range

  For Each Cell In Range("A2:A6")
    If Cell.Value > 0 Then
      Cell.Offset(0, 1).Value = "正"
    ElseIf Cell.Value < 0 Then
      Cell.Offset(0, 1).Value = "負"
    Else
      Cell.Offset(0, 1).Value = "ゼロ"
     End If
  Next Cell

End Sub

vba else if statement jp

If Else の例

では、もう少し具体的な例を見ていきましょう。

セルが空かどうかをチェックする

このコードは、セルが空であるかどうかをチェックします。もし空なら、そのセルは無視される。空でない場合は、その値を右のセルに出力する。

Sub If_Cell_Empty()

If Range("a2").Value <> "" Then
    Range("b2").Value = Range("a2").Value
End If

End Sub

vba if cell empty do nothing jp

セルに特定の文字列が含まれているかどうかを確認する

Instr関数は、ある文字列が他の文字列の中にあるかどうかを調べる関数です。セルが特定の文字列を含んでいるかどうかを調べるには、If 文と一緒に使用します。

If Instr(Range("A2").value, "text") > 0 Then
  Msgbox "textが見つかりました"
End If

セルにテキストが含まれているかどうかを確認する

このコードは、セルがテキストであるかどうかをテストします。

Sub If_Cell_Is_Text()

If Application.WorksheetFunction.IsText(Range("a2").Value) Then
    MsgBox "セルはテキストです"
End If

End Sub

If Goto

If文の結果を利用して、別のコードのセクションに「移動」することができます。

Sub IfGoTo()

    If IsError(Cell.value) Then
        Goto Skip
    End If

    '任意の処理

Skip:
End Sub

セルが空白の場合、行を削除する

Ifとループを使用すると、セルが空白かどうかをテストし、空白の場合は行全体を削除することができます。

Sub DeleteRowIfCellBlank()

Dim Cell As Range

For Each Cell In Range("A2:A10")
    If Cell.Value = "" Then Cell.EntireRow.Delete
Next Cell

End Sub

If とメッセージボックス 「はい / いいえ」

VBAのメッセージボックスを使うと、ユーザーにいくつかの選択肢から選ぶように指示することができます。プロシージャにはい/いいえメッセージボックスを追加して、プロシージャの実行を継続するかどうかをユーザーに尋ねることができます。ユーザーの入力は、If 文を使用して処理します。

ここでは、実際に「はい/いいえ」メッセージボックスを使ってみます。

vba yes no msgbox compressed jp

Sub MsgBoxVariable()

Dim answer As Integer
answer = MsgBox("続けますか?", vbQuestion + vbYesNo)

  If answer = vbYes Then
    MsgBox "はい"
  Else
    MsgBox "いいえ"
  End If

End Sub

Access VBAのIf、ElseIf、Else

Access VBAのIf、ElseIf、Else関数は、Excel VBAと全く同じ動作をします。 If ステートメントを使用して、レコードセットにレコードがあるかどうかをチェックできます。 vba yes no msgbox

vba-free-addin

VBA Code Examples Add-in

Easily access all of the code examples found on our site.

Simply navigate to the menu, click, and the code will be inserted directly into your module. .xlam add-in.

(No installation required!)

Free Download

Return to VBA Code Examples