VBA 論理演算子(And, Or, Not, Xor, Imp, Eqv)

論理演算(ブール演算)とは?

 今回は 論理演算 (logical operation) について解説します。論理演算と聞くと、なんだかとても難しそうに思えますけど、実際は全然たいしたことありません。ようは慣れの問題。慣れてしまえば足し算や掛け算を計算するのと同じぐらい簡単です。

 普通の四則演算(加減乗除)と違って、論理演算では True(真)または False(偽)の 2 種類の値しか使いません。この 2 種類の値に対して、答えもやっぱり True(真)か False(偽)のいずれかの値になるように、色々な演算規則を決めているのです。

 四則演算の「+」「-」「×」「÷」に代わって使われるのが、論理演算子 です。VBA では And(論理積)、Or(論理和)、Not(論理否定)、Xor(排他的論理和)、Imp(論理包含)、Eqv(論理等価)の 6 種類の論理演算子が用意されています。

 ちなみに論理演算のことを ブール演算 とよぶことがあります。論理演算が、George Boole の提唱したブール代数にもとづく操作であることに由来します。VBA では True と False の値をブール型変数 (Boolean) で扱います。
 

And(論理積)

 And は論理積 (logical conjunction) とよばれる演算子です。
 「A And B」は「A かつ B」を意味します。
 つまり A, B ともに True(真)であるときだけ、True を返し、他の場合はすべて False を返します。And の演算表(真理値表)は次のようになります。

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

 実際にマクロを作成して、And の演算結果を確認してみましょう。

 Option Base 1

 '論理積の戻り値をテストします

 Sub LogicalConjunction()

 Dim i As Integer

 '配列変数をブーリアン型で定義します
 Dim x(4) As Boolean

 x(1) = 1 > 0 And 2 > 0
 x(2) = 1 > 0 And 2 < 0
 x(3) = 1 < 0 And 2 > 0
 x(4) = 1 < 0 And 2 < 0

 For i = 1 To 4
  Debug.Print x(i)
 Next i

 End Sub

 「1> 0」と「2>0」はともに正しい不等式なので、

x(1) = 1 > 0 And 2 > 0

の行では True と True の論理積を計算して、True を x(1) に格納しています。「1> 0」は正しい不等式、「2<0」は間違った不等式なので、

x(2) = 1 > 0 And 2 < 0

の行では True と False の論理積を計算して、False を x(2) に入れています。マクロを実行すると、4 つの論理積を演算結果を表示してくれます(最初の不等式以外はすべて False になるはずです)。
 

Or(論理和)

 Or は論理和 (logical disjunction) です。
 「A Or B」は「A または B」を意味します。
 条件式 A, B のどちらか一方が True(真)であれば、True を返し、どちらも False であるときだけ False を返します。And の演算表(真理値表)は以下のようになります。

A B A Or B
True True True
True False True
False True True
False False False

 Or の演算結果を確認するマクロです。

 Option Base 1

 '論理和の戻り値をテストします

 Sub LogicalDisjunction()

 Dim i As Integer
 Dim x(4) As Boolean

 x(1) = 1 > 0 Or 2 > 0
 x(2) = 1 > 0 Or 2 < 0
 x(3) = 1 < 0 Or 2 > 0
 x(4) = 1 < 0 Or 2 < 0

 For i = 1 To 4
  Debug.Print x(i)
 Next i

 End Sub

 

Not(論理否定)

 Not は論理否定演算で、ブーリアン値を反転させます(True を False に、False を True に変換します)。

 Option Base 1

 '論理否定の戻り値をテストします

 Sub Inversion()

 Dim i As Integer
 Dim x(2) As Boolean

 x(1) = Not 1 + 1 = 2
 x(2) = Not 1 + 1 = 3

 Debug.Print x(1)
 Debug.Print x(2)

 End Sub

 「1 + 1 = 2」は正しい等式なので、そのブーリアン値は True です。なので

x(1) = Not 1 + 1 = 2

は True を反転させた False を x(1) に入れています。一方で「1 + 1 = 3」は誤った等式なので、ブーリアン値は False であり、

x(1) = Not 1 + 1 = 2

では False を反転させた True が x(2) に入ります。
 

Xor(排他的論理和)

 Xor は排他的論理和 (exclusive disjunction) とよばれる演算子です。「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

 Xor の演算結果を確認するマクロです。

 Option Base 1

 '排他的論理和の戻り値をテストします

 Sub ExclusiveDisjunction()

 Dim i As Integer
 Dim x(4) As Boolean

 x(1) = 1 > 0 Xor 2 > 0
 x(2) = 1 > 0 Xor 2 < 0
 x(3) = 1 < 0 Xor 2 > 0
 x(4) = 1 < 0 Xor 2 < 0

 For i = 1 To 4
  Debug.Print x(i)
 Next i

 End Sub

 「1 > 0」と「2 > 0」はともに正しい不等式なので、

x(1) = 1 > 0 Xor 2 > 0

は True と True の排他的論理和を計算して、False を配列変数 x(1) に格納しています。
 

Imp(論理包含)

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

A B A Xor B
True True True
True False False
False True True
False False True

 

Eqv(論理等価)

 Eqv は論理等価演算 (logical equivalence) です。いわゆる必要十分(同値)であり、否定排他的論理和とよばれることもあります。つまり、排他的論理和とは逆の結果を返すということです。A と B がともに True のときは True, ともに False のときも True を返し、それ以外は False を返してきます。 Eqv の演算表(真理値)は次のようになります。

A B A Xor B
True True True
True False False
False True False
False False True

 Imp(論理包含)と Eqv(論理等価)なんて、ほとんど使う機会がないので、きれいさっぱり忘れてしまってけっこうです。こんなの知ってるとオタクだと思われるだけです。え? こばとは VBA オタクじゃないですよ? 何言ってるんですか?

 ≫ VBA 辞典メニューに戻って他の記事も読んでくださいな

スポンサードリンク
末尾大型広告
末尾大型広告

コメントをどうぞ

メールアドレスが公開されることはありません。

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください