Excel VBA

Excel VBA | if文の複数条件をマスターする!

2024年6月12日

本ページはプロモーションが含まれています

vba_if文の複数条件アイキャッチ画像

複数条件を組み合わせることで、より複雑な条件分岐を実現できます。

条件の組み合わせは、問題の要件やデータの構造に応じて柔軟に調整する必要があります。

  • And:論理積(両方の条件がTrueの場合にTrue)
  • Or:論理和(どちらか一方以上の条件がTrueの場合にTrue)
  • Not:論理否定(条件の真偽を反転させる)
  • Xor:排他的論理和(2つの条件が異なる場合に True を返す)

if文の複数条件について主な疑問や問題点を挙げてみます。

  • 条件の優先順位AndOr を組み合わせた場合、どのように優先順位が決まるのか?
  • 複数条件のグループ化:複数の条件をグループ化して評価するにはどうすればよいのか?
  • データ型の不一致:条件式に異なるデータ型(数値と文字列など)を使った場合、どのような問題が発生するのか?

この記事ではこれらについても詳しく解説します。

複数の条件分岐

複数の条件を組み合わせて処理する場合、論理演算子を活用して条件式を作成します。

VBAでは、主に4つの論理演算子が使用されます。

  1. 論理積 (AND):両方の条件がTrue の場合に全体がTrue となります。
  2. 論理和 (OR)どちらか一方または両方の条件がTrue の場合に全体がTrue となります。
  3. 論理否定 (NOT)条件の結果を反転させます。
  4. 排他的論理和(Xor):2つの条件が異なる場合に True を返します。
条件1条件2AND (論理積)OR (論理和)NOT (論理否定) 条件1NOT (論理否定) 条件2XOR (排他的論理和)
TrueTrueTrueTrueFalseFalseFalse
TrueFalseFalseTrueFalseTrueTrue
FalseTrueFalseTrueTrueFalseTrue
FalseFalseFalseFalseTrueTrueFalse

AND演算子(かつ)を使用した例

以下の例では、セルA1の値が10以上かつセルB1の値が5以上の場合にのみメッセージが表示されます。
両方の条件が満たされない場合は、何も表示されません。

Sub CheckValues()
    If Range("A1").Value >= 10 And Range("B1").Value >= 5 Then
        MsgBox "条件を満たしています"
    End If
End Sub

OR演算子(または)を使用した例

以下の例では、セルA1の値が10以上またはセルB1の値が5以上の場合にメッセージが表示されます。
いずれかの条件が満たされない場合は、何も表示されません。

Sub CheckValues()
    If Range("A1").Value >= 10 Or Range("B1").Value >= 5 Then
        MsgBox "条件を満たしています"
    End If
End Sub

NOT演算子(否定)を使用した例

以下の例では、セルA1の値が10以上でない場合にメッセージが表示されます。
つまり、セルA1の値が10未満の場合にメッセージが表示されます。
セルA1の値が10以上の場合は、条件が満たされずメッセージは表示されません。

Sub CheckValue()
    If Not Range("A1").Value >= 10 Then
        MsgBox "A1は10以上ではありません"
    End If
End Sub

XOR演算子を使用した例

  • 片方だけが True の場合に True を返すXor 演算子は、片方の条件だけが True の場合に True を返します。
  • 両方が同じ値(両方が True または両方が False)の場合には False:両方が同じ場合には False を返します。

以下の例は、A > 10B < 5 の条件が異なるため、MsgBox が表示されます。

Dim A As Integer
Dim B As Integer

A = 10
B = 5

If A > 10 Xor B < 5 Then
    MsgBox "条件が一致しました。"
Else
    MsgBox "条件が一致しませんでした。"
End If

条件の優先順位

以下に、主要な論理演算子の優先順位を示します。

Not > And > Or > Xor

複雑な条件式では、括弧 () を使用して優先順位を上げることもできます。

複数条件のグループ化

複数の条件をグループ化して評価するには、VBAにおいて括弧 () を使用して条件を明確にグループ化し、評価順序を制御します。

括弧を使うことで、条件式内での演算子の優先順位を変更することができます。

括弧を使用する例

複数の括弧を組み合わせることで、複雑な論理条件を評価できます。

If ((A > 10 And B < 5) Or (C > 7 And D < 20)) And E = 5 Then
    ' 処理
End If

コードの解説

  • ((A > 10 And B < 5) Or (C > 7 And D < 20)) が先に評価され、その結果と E = 5And で結合されます。
  • つまり、最初の条件グループが True であり、かつ E が 5 の場合に True となります。

データ型の不一致

条件式に異なるデータ型(例えば数値と文字列)を使う場合、いくつかの問題が発生する可能性があります。
VBAでは、異なるデータ型を比較する際に型変換が行われますが、これが意図しない結果を招くことがあります。

型変換の自動実行

VBAでは、自動的に型変換が行われる場合があります。
例えば、文字列と数値を比較すると、VBAは文字列を数値に変換しようとします。
この変換が失敗するか、意図しない結果を生む可能性があります。

Dim num As Integer
Dim str As String

num = 10
str = "20"

If num < str Then
    ' 処理
End If

対策:条件式での型変換を避けるため、比較する値を同じデータ型に変換してから比較します。

If num < CInt(str) Then
    ' 処理
End If

型不一致エラー

問題:データ型が一致しない場合、VBAは型不一致エラーを発生させることがあります。
特に、数値と文字列を比較する際に発生しやすいです。

Dim num As Integer
Dim str As String

num = 10
str = "abc"

If num < str Then
    ' 処理
End If

対策:比較前にデータ型が一致するか確認し、適切に型変換を行います。

If IsNumeric(str) And num < CInt(str) Then
    ' 処理
End If

まとめ

  • 論理演算子の優先順位:Not > And > Or > Xor
  • 複数条件のグループ化:条件を明確にグループ化するために括弧 () を使用。
  • データ型の不一致CIntCDblCStr などの型変換関数を使用。

Follow me!

-Excel VBA
-,

PAGE TOP