SSブログ
......................................................φ( ̄∇ ̄o) 記録、記録っとネ☆

論理値の使い方 [全般]

論理値とは、「真 = 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値しかない論理値ですが利用する機会は非常に多いので、それぞれがスマートに利用できるとより効率的にコーディングできると思います。


nice!(0)  コメント(0)  トラックバック(0) 
共通テーマ:パソコン・インターネット

nice! 0

コメント 0

コメントを書く

お名前:[必須]
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

トラックバック 0

このblogについてSUM関数いろいろ ブログトップ

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。