論理演算子(And、Or、Not、Xor、Eqv、Imp)の役割や使い方をマスターしよう

論理演算子(And、Or、Not、Xor、Eqv、Imp)の役割や使い方をマスターしよう

VBAでは、複数の条件を組み合わせるために論理演算子が使用されます。この記事では、VBAで使用される論理演算子(And、Or、Not、Xor、Eqv、Imp)について詳しく解説します。

論理演算子の役割や使い方を理解し、条件式の結果を正しく評価する方法を学びましょう。

論理演算の基本

論理演算子とは

論理演算子は、複数の式の真偽を求めるために用いる演算子で、主に条件式で複数の条件を論理式で連結し、全体の真偽の評価を行うときに使用します。

VBAで使用される論理演算子には以下のようなものがあります。

演算子 意味 使い方
And 論理積
(Logical AND)
「A And B」は「A かつ B」を意味します。
つまり式 A、 Bが ともに True(真)であるときだけ、True を返し、他の場合はすべて False を返します。
Or 論理和
 (Logical OR) 
「A Or B」は「A または B」を意味します。
つまり式 A、 Bがのどちらか一方が True(真)であれば、True を返し、どちらも False(偽) のときだけ False を返します。
Not 論理否定
(Logical NOT)
「Not A」は「A の反転」を意味します。
つまり式 Aが True(真)であれば、False(偽) を返し、 Falseであれば Trueを返します。

Xor

排他的論理和
(Exclusive OR)
 「A Xor B」は「A か B のどちらか一方」を表します。
つまり式 A 、 B がともに True(真) のときは False(偽), ともに False のときも False を返し、それ以外は True を返します。
Eqv 論理等価
 (Logical equivalence) 
「A Eqv B」は排他的論理和とは逆の結果を返します。
つまり式A と B がともに True(真) のときは True, ともに False(偽) のときも True を返し、それ以外は False を返します。
Imp 論理包含
(Logical implication) 
「A Imp B」は「(A の否定) または B」を意味します。
つまり、Not と Or を用いて「(Not A) Or B」と記述しても同じ結果が得られます。


Not を除く “式A 論理演算子 式B” の式の値と各演算子による演算結果は次の通りです。

ABA And BA Or BA Xor BA Eqv BA Imp B
TrueTrueTrueTrueFalseTrueTrue
TrueFalseFalseTrueTrueFalseFalse
FalseTrueFalseTrueTrueFalseTrue
FalseFalseFalseFalseFalseTrueTrue
論理演算子(And、Or、Not、Xor、Eqv、Imp)の役割や使い方をマスターしよう
しらかば堂

但し EqvImpは以下の理由から一般に利用が推奨されていません。

  • if や 他の論理演算子で代替可能
  • 利用される場面が少なく、その利用がかえって可読性を悪くする懸念がある

真理値表とは

B A And B
True True True
True False False
False True False
False False False

真理値表(しんりちひょう、Truth table)は、式A、Bの、全入力パターンとそれに対する論理演算結果の値を、このような表にしたものです。

 

ベン図とは

論理演算子(And、Or、Not、Xor、Eqv、Imp)の役割や使い方をマスターしよう

ベン図(Venn diagram)は、英国の数学者であるジョン・ベンによって提案され、一般的に論理演算子や集合の関係性を示すために使われているこのような図です。

 

ベン図で論理演算子を表すときは、円は論理演算の入力となる式A、Bを表し

  • 円の内部はその式が真(True)
  • 円の外部はその式が偽(False)

であることを表しています。

そして式と論理演算子の組み合わせに対し、例えば対応領域に

  • 真(True)は青
  • 偽(Fause)は白

を塗って、式の入力の組み合わせと論理演算子の出力の関係を表します。

論理演算子(And、Or、Not、Xor、Eqv、Imp)の役割や使い方をマスターしよう
しらかば堂

このベン図は集合 A と集合 B の共通部分 A ∩ B を表すベン図と見かけは同じですが、論理演算をベン図で表現する場合 、円は集合の意味ではないことに注意しましょう。

論理演算子の詳細

And(論理積)

「A And B」は「A かつ B」を意味します。
つまり式 A、 Bが ともに True(真)であるときだけ、True を返し、他の場合はすべて False (偽)を返します。

このことを真理値表とベン図で表現すると次のようになります。

B A And B
True True True
True False False
False True False
False False False
論理演算子(And、Or、Not、Xor、Eqv、Imp)の役割や使い方をマスターしよう

 

 

この真理値表をVBAで記載し、実行すると

Const IsTrue As Boolean = True
Const IsFalse As Boolean = False

Sub LogicalOperator_And()
    Dim result As Boolean
    
    ' AND演算子の組み合わせ
    result = IsTrue And IsTrue
    Debug.Print "IsTrue And IsTrue: " & result
    
    result = IsTrue And IsFalse
    Debug.Print "IsTrue And IsFalse: " & result
    
    result = IsFalse And IsTrue
    Debug.Print "IsFalse And IsTrue: " & result
    
    result = IsFalse And IsFalse
    Debug.Print "IsFalse And IsFalse: " & result

End Sub


イミディエットウインドウは次のようになり、先ほどの真理値表の記載と合致します。

IsTrue And IsTrue: True
IsTrue And IsFalse: False
IsFalse And IsTrue: False
IsFalse And IsFalse: False

 

Or(論理和)

「A Or B」は「A または B」を意味します。
つまり式 A、 Bがのどちらか一方が True(真)であれば、True を返し、どちらも False(偽) のときだけ False を返します。

このことを真理値表とベン図で表現すると次のようになります。

B A Or B
True True True
True False True
False True True
False False False
論理演算子(And、Or、Not、Xor、Eqv、Imp)の役割や使い方をマスターしよう

 

 この真理値表をVBAで記載し、実行すると

Const IsTrue As Boolean = True
Const IsFalse As Boolean = False

Sub LogicalOperator_Or()
    Dim result As Boolean
      
    ' OR演算子の組み合わせ
    result = IsTrue Or IsTrue
    Debug.Print "IsTrue Or IsTrue: " & result
    
    result = IsTrue Or IsFalse
    Debug.Print "IsTrue Or IsFalse: " & result
    
    result = IsFalse Or IsTrue
    Debug.Print "IsFalse Or IsTrue: " & result
    
    result = IsFalse Or IsFalse
    Debug.Print "IsFalse Or IsFalse: " & result

End Sub


イミディエットウインドウは次のようになり、先ほどの真理値表の記載と一致します。

IsTrue Or IsTrue: True
IsTrue Or IsFalse: True
IsFalse Or IsTrue: True
IsFalse Or IsFalse: False

Not (論理否定)

「Not A」は「A の反転」を意味します。
つまり式 Aが True(真)であれば、False(偽) を返し、 Falseであれば Trueを返します。

このことを真理値表とベン図で表現すると次のようになります。

Not A
True False
False True
論理演算子(And、Or、Not、Xor、Eqv、Imp)の役割や使い方をマスターしよう

 

 この真理値表をVBAで記載し、実行すると

Const IsTrue As Boolean = True
Const IsFalse As Boolean = False

Sub LogicalOperator_Not()
    Dim result As Boolean
          
    ' NOT演算子の組み合わせ
    result = Not IsTrue
    Debug.Print "Not IsTrue: " & result
    
    result = Not IsFalse
    Debug.Print "Not IsFalse: " & result
End Sub


イミディエットウインドウは次のようになり、先ほどの論理表の記載と一致します。

Not IsTrue: False
Not IsFalse: True

Xor(排他的論理和)

「A Xor B」は「A か B のどちらか一方」を表します。
つまり式 A 、 B がともに True(真) のときは False(偽), ともに False のときも False を返し、それ以外は True を返します。

このことを真理値表とベン図で表現すると次のようになります。

B

A Xor B

True True False
True False True
False True True
False False False
論理演算子(And、Or、Not、Xor、Eqv、Imp)の役割や使い方をマスターしよう

 

 

この真理値表をVBAで記載し、実行すると

Const IsTrue As Boolean = True
Const IsFalse As Boolean = False

Sub LogicalOperator_Xor()
    Dim result As Boolean
        
    ' XOR演算子の組み合わせ
    result = IsTrue Xor IsTrue
    Debug.Print "IsTrue Xor IsTrue: " & result
    
    result = IsTrue Xor IsFalse
    Debug.Print "IsTrue Xor IsFalse: " & result
    
    result = IsFalse Xor IsTrue
    Debug.Print "IsFalse Xor IsTrue: " & result
    
    result = IsFalse Xor IsFalse
    Debug.Print "IsFalse Xor IsFalse: " & result
    
End Sub


イミディエットウインドウは次のようになり、先ほどの論理表の記載と一致します。


IsTrue Xor IsTrue: False
IsTrue Xor IsFalse: True
IsFalse Xor IsTrue: True
IsFalse Xor IsFalse: False

 

Eqv(論理等価)

Eqv は論理等価演算 (logical equivalence) で

「A Eqv B」は排他的論理和とは逆の結果を返します。

つまり式A と B がともに True(真) のときは True, ともに False(偽) のときも True を返し、それ以外は False を返します。

このことを真理値表とベン図で表現すると次のようになります。

B

A Eqv B

True True True
True False False
False True False
False False True
論理演算子(And、Or、Not、Xor、Eqv、Imp)の役割や使い方をマスターしよう

 



この真理値表をVBAで記載し、実行すると

Const IsTrue As Boolean = True
Const IsFalse As Boolean = False

Sub LogicalOperator_Eqv()
    Dim result As Boolean
           
    ' Eqv演算子の組み合わせ
    result = IsTrue Eqv IsTrue
    Debug.Print "IsTrue Eqv IsTrue: " & result
    
    result = IsTrue Eqv IsFalse
    Debug.Print "IsTrue Eqv IsFalse: " & result
    
    result = IsFalse Eqv IsTrue
    Debug.Print "IsFalse Eqv IsTrue: " & result
    
    result = IsFalse Eqv IsFalse
    Debug.Print "IsFalse Eqv IsFalse: " & result
End Sub


イミディエットウインドウは次のようになり、先ほどの論理表の記載と一致します。

IsTrue Eqv IsTrue: True
IsTrue Eqv IsFalse: False
IsFalse Eqv IsTrue: False
IsFalse Eqv IsFalse: True

 

Imp(論理包含)

Imp は論理包含 (Implication) とよばれる演算子で

「A Imp B」は「(A の否定) または B」を意味します。つまり、Not と Or を用いて「(Not A) Or B」と記述しても同じ結果が得られます。Imp の演算表(真理値)は次のようになります。

このことを真理値表とベン図で表現すると次のようになります。

B A Imp B
True True True
True False False
False True True
False False True
論理演算子(And、Or、Not、Xor、Eqv、Imp)の役割や使い方をマスターしよう

 



この真理値表をVBAで記載し、実行すると

Const IsTrue As Boolean = True
Const IsFalse As Boolean = False

Sub LogicalOperator_Imp()
    Dim result As Boolean
           
    ' Imp演算子の組み合わせ
    result = IsTrue Imp IsTrue
    Debug.Print "IsTrue Imp IsTrue: " & result
    
    result = IsTrue Imp IsFalse
    Debug.Print "IsTrue Imp IsFalse: " & result
    
    result = IsFalse Imp IsTrue
    Debug.Print "IsFalse Imp IsTrue: " & result
    
    result = IsFalse Imp IsFalse
    Debug.Print "IsFalse Imp IsFalse: " & result
End Sub


イミディエットウインドウは次のようになり、先ほどの論理表の記載と一致します。

IsTrue Imp IsTrue: True
IsTrue Imp IsFalse: False
IsFalse Imp IsTrue: True
IsFalse Imp IsFalse: True

 

【目次】Office 365 VBA 完全マスター