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” の式の値と各演算子による演算結果は次の通りです。
A | B | A And B | A Or B | A Xor B | A Eqv B | A Imp B |
---|---|---|---|---|---|---|
True | True | True | True | False | True | True |
True | False | False | True | True | False | False |
False | True | False | True | True | False | True |
False | False | False | False | False | True | True |
真理値表とは
A | B | A And B |
---|---|---|
True | True | True |
True | False | False |
False | True | False |
False | False | False |
真理値表(しんりちひょう、Truth table)は、式A、Bの、全入力パターンとそれに対する論理演算結果の値を、このような表にしたものです。
ベン図とは
ベン図(Venn diagram)は、英国の数学者であるジョン・ベンによって提案され、一般的に論理演算子や集合の関係性を示すために使われているこのような図です。
ベン図で論理演算子を表すときは、円は論理演算の入力となる式A、Bを表し
- 円の内部はその式が真(True)
- 円の外部はその式が偽(False)
であることを表しています。
そして式と論理演算子の組み合わせに対し、例えば対応領域に
- 真(True)は青
- 偽(Fause)は白
を塗って、式の入力の組み合わせと論理演算子の出力の関係を表します。
このベン図は集合 A と集合 B の共通部分 A ∩ B を表すベン図と見かけは同じですが、論理演算をベン図で表現する場合 、円は集合の意味ではないことに注意しましょう。
論理演算子の詳細
And(論理積)
「A And B」は「A かつ B」を意味します。
つまり式 A、 Bが ともに True(真)であるときだけ、True を返し、他の場合はすべて False (偽)を返します。
このことを真理値表とベン図で表現すると次のようになります。
A | B | A And B |
---|---|---|
True | True | True |
True | False | False |
False | True | False |
False | False | False |
この真理値表を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 を返します。
このことを真理値表とベン図で表現すると次のようになります。
A | B | A Or B |
---|---|---|
True | True | True |
True | False | True |
False | True | True |
False | False | False |
この真理値表を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を返します。
このことを真理値表とベン図で表現すると次のようになります。
A | Not A |
---|---|
True | False |
False | True |
この真理値表を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 を返します。
このことを真理値表とベン図で表現すると次のようになります。
A | B |
A Xor B |
---|---|---|
True | True | False |
True | False | True |
False | True | True |
False | False | False |
この真理値表を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 を返します。
このことを真理値表とベン図で表現すると次のようになります。
A | B |
A Eqv B |
---|---|---|
True | True | True |
True | False | False |
False | True | False |
False | False | True |
この真理値表を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 の演算表(真理値)は次のようになります。
このことを真理値表とベン図で表現すると次のようになります。
A | B | A Imp B |
---|---|---|
True | True | True |
True | False | False |
False | True | True |
False | False | True |
この真理値表を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
但し EqvとImpは以下の理由から一般に利用が推奨されていません。