論理値の使い方 [全般]
論理値とは、「真 = true」と「偽 = false」の2値を指します。
略称として、TとFとすることもありますね。
私の認識では、論理値を必要とする場合に、数値をあてはめようとすると、たいてい0以外はtrueとして扱われ、0はfalseとして扱われます。
これを利用して、よくある条件式を簡略化できます。
<Excel関数>
=IF(COUNTIF(A1:A1000, B1)>=1, "存在", "該当なし")
↓
=IF(COUNTIF(A1:A1000, B1), "存在", "該当なし")<VB/VBA>
Do While textStream.AtEndOfStream=False
'処理
Loop
↓
Do Until textStream.AtEndOfStream
'処理
Loop
Excelの例で言うと、IF関数の第1引数で必要な条件式に対して、結果がTRUEかFALSEを与えて返す値を変化させるものです。判定内容はA1:A1000にB1値が存在しているかです。
このとき[>=1]と記述して明示してもいいのですが、要は0でなければ"存在"と表示すればいいので、0でない=TRUEを活かして、省略してしまったほうが式としてはスッキリすると思います。
VB/VBAの例は、テキストストリームオブジェクトの中身を処理していき、ファイルの終端にたどり着いたらループ処理を終了するものです。
明示例は[Do While]と[=False]の組み合わせですが、[While]を[Until]に置き換えれば、[=False]を省略し、実質の評価がTrueのときにループを抜けることができます。
#これはむしろWhileとUntilの使い分け例に見えるな…。
ExcelやAccessの関数にしても、VBやCにしても、単純な処理であれば特にシンプルに記述するほうが可読性が上がります。ただ、論理値が必要な引数や条件に対して、「要はtrueかfalseを返せばいいんでしょ」ということが理解できていなければ、Excelの例なんかは良く分からない式に見えてしまうかもしれませんね。
論理値の特性として、もうひとつあげておくと、「trueの反対はfalse、falseの反対はtrue」であるということです。
論理値が格納された変数などについて、反対の値に入れ替えたいときは、その否定値を代入すればよいのですが、その発想が意外になかったりする方もいらっしゃるかと思います。
私がExcelVBAの自作ツールバーに登録してある機能で、セルの枠線の表示/非表示切り替えがあるのですが、発想があるのとないのを比較すると以下のようなコードになるかと思います。
<ExcelVBA>
With ActiveWindow
If .DisplayGridlines = True Then
.DisplayGridlines = False
Else
.DisplayGridlines = True
End If
End With
↓
With ActiveWindow
.DisplayGridlines = Not .DisplayGridlines
End With
7行が3行になって、よく処理が重いといわれている条件判定を回避することができました。Withステートメントを使わなければ、それぞれ2行ずつ減りますし。
2値しかない論理値ですが利用する機会は非常に多いので、それぞれがスマートに利用できるとより効率的にコーディングできると思います。
コメント 0