【VBA】Boolean
VBA の Boolean は True または Falseの 2 種類の値のみをとるデータ型です。True は「真」、False は「偽」の意味で、ある条件式が正しいかどうか(真偽)を判定するときなどに用います。
ちなみに、こばとは正直者なので、その発言は全て True(真)なのです。
え? 嘘(False)ばかりつくな?
まあ、とにかく講座を始めますよ。
まずは簡単なプロシージャで Boolean を試してみましょう。
'[VBA] Booleanによる等式成立判定(1) Sub BooleanTest_1() Dim bool As Boolean bool = (10 = 10) Debug.Print bool End Sub 'BooleanTest_1()の実行結果: 'True
BooleanTest_1 は等式「10 = 10」が成り立っているかを判定します。この式の「=」は「等しい」ことを表す記号で、値を代入しているのではありません。一方で変数 bool のあとの「=」は値を代入するものです。多くのプログラミング言語では代入を「=」で、等価であることを「==」で表すのですが、VBA ではどちらも「=」を使います。私は紛らわしさを避けるために等価を表す式の部分を括弧で括るようにしています。もちろん、
bool = 10 = 10
と記述しても同じです。等式「10 = 10」は正しいので、BooleanTest_1() を実行すると True が返ってきます。これを少し書き換えて
'[VBA] Booleanによる等式成立判定(2) Sub BooleanTest_2() Dim bool As Boolean bool = (5 > 10) Debug.Print bool End Sub 'BooleanTest_2()の実行結果: 'False
としてみると、「5 > 10」は正しくない不等式なので False と表示されます。実は VBA の True の正体は「-1」、 False の正体は「0」という数値 (16ビットの整数) です。なので、たとえば
'[VBA] Booleanを数値で表示するマクロ(1) Sub BooleanTest_3() Dim i As Integer i = (10 = 10) Debug.Print i End Sub
のように書いて、True を整数型変数 (Integer) に入れてみると「-1」の値が表示されます。また、
'[VBA] Booleanを数値で表示するマクロ(2) Sub BooleanTest_4() Dim i As Integer i = (5 > 10) Debug.Print i End Sub
のように書いて、False を整数型変数に入れると「0」が返ってきます。Boolean 型の True や False を数値として用いると色々な場面で応用することができます。たとえば下の図にあるような 2 列に並んだ数値の中から、となり合うセルの数値が互いに等しい組をかぞえてみます。
'[VBA] となり合うセルの数値が等しい組を数えるマクロ Sub EqualNumber() Dim bool As Boolean Dim i As Integer Dim s As Integer 'となり合うセルの値を順次比較してbooleanを順次加算 For i = 2 To 11 bool = Cells(i, 2) = Cells(i, 3) s = s + bool Next i Debug.Print Abs(s) End Sub 'EqualNumber()の実行結果: '3
EqualNumber はとなり合うセルの値を順次比較して、変数 s に真偽値を加算していきます。False は 0 なので、True の値「-1」だけが加算されることになります。Abs関数で絶対値をとって符号を正に反転させれば、求める組の個数がカウントされます。上のワークシートの通りに数値を入力した場合、EqualNumber を実行すると「3」が返ってくるはずです。
コメント
【ChatGPTにbooleanについて質問しました】
[Q] VBAのbooleanについて解説してください。
[ChatGPT] VBAにおけるBooleanとは、TrueまたはFalseの値を持つデータ型のことを指します。Booleanは、論理値(TrueまたはFalse)を表すために使用されます。Booleanの構文は以下の通りです。
例えば、次のようなコードを考えてみましょう。
このコードでは、変数myValueに10を代入し、isGreaterにはmyValueが5より大きいかどうかを判定した結果が代入されます。myValueが10であるため、isGreaterにはTrueが代入されます。また、Booleanは、If文やWhile文などの条件式で使用されます。例えば、次のようなコードでは、変数xが10より大きい場合にメッセージを表示します。
この場合、xが15であるため、条件式x > 10はTrueを返します。そのため、メッセージ「xは10より大きいです」が表示されます。Booleanは、プログラミングにおいて非常に重要な役割を果たします。VBAでは、Booleanを活用することで、複雑な条件分岐や反復処理を行うことができます。