パソコンカレッジ スタッフのひとりごと

パソコンスクールのスタッフが、
初心者から上級者まで役立つ情報をお伝えします。

IF構文を使わないで条件分岐を実現する

2012-04-07 09:01:07 | ExcelVBA
たとえば、以下のような表があるとします。



B列には、商品コードが入力されています。
C列には、在庫数が入力されています。

さて、ここで次のような要望があったとしましょう。

「C列の在庫数が0の場合は、B列の商品コードを太字にしたい。
ただし、在庫数が0でなければ、B列の商品コードの文字は太字にしない。」

さあ、どう対処しましょうか?
なお、商品数は固定とします。

条件付き書式を使えば簡単ですね。
でも、折角ですから、VBAで対応してみましょう。

普通に考えれば、以下のサンプルコードのようになるでしょう。



Sub Test()
  Dim i As Integer
  For i = 3 To 12
    If Cells(i, 3).Value = 0 Then
      Cells(i, 2).Font.Bold = True
    Else
      Cells(i, 2).Font.Bold = False
    End If
  Next
End Sub

条件分岐を使って、C列の在庫数が0のときは、B列の値を太字にします。
太字にするには、BoldプロパティにTrueを代入します。

もちろん、これで、まったく問題はありません。
でも、今回は、IF構文(条件分岐)を使わないでコーディングする方法を紹介します。


Sub Test2()
  Dim i As Integer
  For i = 3 To 12
    Cells(i, 2).Font.Bold = Not CBool(Cells(i, 3).Value)
  Next
End Sub


解説をします。

太字にするには、BoldプロパティをTrueにし、太字にしない場合はFalseにするという特性を
十分に活かしているコードです。

CBool関数は、引数をBoolean型に変換します。
Boolean型とは、TrueもしくはFalseの2つしか値をとれない型です。
引数にはC列の値を指定していますから、数値(在庫数)をBoolean型に変換しています。

実は、数値の0は、Falseを意味し、0以外の数値は、全てTrueと解釈されます。
C言語は、そのあたりをふまえてコーディングする場面が多いのですが、
もちろん、VBAでもそのテクニックは使えます。

また、Not演算子は、否定を意味します。
在庫数が0の場合は、Falseと解釈されますので、Not演算子を使ってTrueにしています。

このようにBoolean型の値を設定するプロパティに対しては、
Cbool関数と、場合によってはNot演算子を使うことによって
条件分岐をすることなくコーディングすることができます。

実行結果を載せておきます。



だい

コメント    この記事についてブログを書く
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« 画像の固定 (Word2007で解説) | トップ | 今週のおすすめ記事 »
最新の画像もっと見る

コメントを投稿

ExcelVBA」カテゴリの最新記事