【VBA】Boolean (ブール型変数)

【VBA】Boolean

 VBA の BooleanTrue または Falseの 2 種類の値のみをとるデータ型です。True は「真」、False は「偽」の意味で、ある条件式が正しいかどうか(真偽)を判定するときなどに用います。
 ちなみに、こばとは正直者なので、その発言は全て True(真)なのです。
 え? 嘘 (False) ばかりつくな?
 まあ、とにかく講座を始めますよ。
 まずは簡単なプロシージャで Boolean を試してみましょう。

'[VBA] Booleanによる等式成立判定(1)
Sub True_Or_False_1()
  Dim bool As Boolean
  bool = (10 = 10)
  Debug.Print bool
End Sub

 True_Or_False_1() は等式 10 = 10 が成り立っているかを判定します。この式の “=” は「等しい」ことを表す記号で、値を代入しているのではありません。一方で変数 bool のあとの “=” は値を代入するものです。紛らわしさを避けるために式を ( ) で括ってありますけど、

bool = 10 = 10

と記述しても同じです。もちろん等式 10 = 10 は正しいので、True_Or_False_1() を実行すると True が返ってきます。これを少し書き換えて

'[VBA] Booleanによる等式成立判定(2)
Sub True_Or_False_2()
  Dim bool As Boolean
  bool = (5 > 10)
  Debug.Print bool
End Sub

としてみると、5 > 10 は正しくない不等式なので False と表示されます。実は VBA の True の正体は「-1」、 False の正体は「0」という数値 (16ビットの整数) です。なので、たとえば

'[VBA] Booleanを数値で表示するマクロ(1)
Sub Int_True()
  Dim i As Integer
  i = (10 = 10)
  Debug.Print i
End Sub

のように書いて、True を整数型変数 (Integer) に入れてみると「-1」の値が表示されます。また、

'[VBA] Booleanを数値で表示するマクロ(2)
Sub Int_True()
  Dim i As Integer
  i = (5 > 10)
  Debug.Print i
End Sub

のように書いて、False を整数型変数に入れると「0」が返ってきます。Boolean 型の True や False を数値として用いると色々な場面で応用することができます。たとえば下の図にあるような 2 列に並んだ数値の中から、となり合うセルの数値が互いに等しい組をかぞえてみます。

Excel VBA Boolean 隣り合うセルが等しい

'[VBA] となり合うセルの数値が等しい組を数えるマクロ

Sub Equal_Number()

  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

 Equal_Number() はとなり合うセルの値を順次比較して、変数 s に真偽値を加算していきます。False は 0 なので、True の値「-1」だけが加算されることになります。Abs関数で絶対値をとって符号を正に反転させれば、求める組の個数がカウントされます。上のワークシートの通りに数値を入力した場合、Equal_Number() を実行すると「3」が返ってくるはずです。

コメント

タイトルとURLをコピーしました