#034 True/Falseをうまく使ってコードをシンプルに VBA

VBAではお馴染みの If〜Then〜Else ステートメント を使う場合、もし "If a > 10 Then" とあったとしたら普通は『もしaが10より大きければ』と考えると思いますが、この構文は本来は「If <条件式> Then で<条件式>の部分が真(True)と評価されたらThen以降のステートメントを実行する」というものなので、『もし"aが10より大きい"が真(True)ならば』と解釈することもできます。いくつかの場面でこの真(True)か偽(False)かの考え方を頭に入れてコーディングすることによって、VBAのコードをシンプルにすることができます。

例えば、
  If a = True Then Debug.Print "TRUE"
というコードを『もし"a = True"が真(True)ならば』と見た場合、Trueかどうかの判断がダブっていることが分かります。ここでは単純に『もしaが真(True)ならば』と考えているわけですから、次のように書き換えることによってコードをシンプルにすることができます。
  If a Then Debug.Print "TRUE"

また、「If a = False Then Debug.Print "FALSE"」とある場合には、「If Not a Then Debug.Print "FALSE"」と書き換えることができます。


続いて、この真(True)か偽(False)かの考え方をFunctionプロシージャに当てはめてみましょう。
Function TrueOrFalse(a) As Boolean
  If a > 10 Then
    TrueOrFalse = True
  Else
    TrueOrFalse = False
  End If

End Function
このコードでは、"a > 10"の部分は真(True)か偽(False)のいずれであるかを判断しているわけですから、やはり返り値へのTrue/Falseの代入はコードがダブっていると考えることができます。そこで次のように非常にシンプルな形に書き換えることができます。
Function TrueOrFalse(a) As Boolean
  TrueOrFalse = (a > 10)

End Function


さらにこの考え方は、真(True)か偽(False)のいずれかしか値を持たないフォーム上のコントロールなどのプロパティにも適用できます。例えば、チェックボックス(chkData)がもしチェックされたらテキストボックス(txtData)を使用可能にし、チェックが外されたら使用不可にしたいような場合、チェックボックスの[AfterUpdate/更新後処理]イベントプロシージャを使って次のようにコーディングすることができます。
Private Sub chkData_AfterUpdate()
    Me!txtData.Enabled = Me!chkData

  End Sub
| Index | Prev | Next |



T'sFactory
Accessで動く生産管理DB
Ureru Express
Webで使う販売顧客管理
Access開発&アドバイス
DB開発やテクニカルアドバイス
Copyright © T'sWare All rights reserved