#010 複数のIIf関数を簡略化する方法 VBA

IIf関数は、クエリーのフィールドの演算式でも If〜Else〜End If の構文のように使えますし、モジュールのコードでも1行で If〜Else〜End If を記述できるので便利なのですが、複数の分岐条件がある場合には複雑になるので決して使い勝手がいいものではありません。
例: = IIf(A < 50, 0, IIf(A < 70, 1, 2))
※変数Aが50未満なら0、50以上70未満なら1、70以上なら2を返す。
モジュールの場合にはあえて IIf関数 を使わなくても If〜Else〜End If や Select Case でも対応できるのですが、さらに次のようなSwitch関数を使えば、複数のIIf関数を使うような場合にも同様の条件分岐をシンプルに表現することができます。
= Switch(A < 50, 1, A < 70, 2, A >= 70, 3)
また、ここでの変数Aが 1, 2, 3.... のように値の場合には Choose関数 によってさらにシンプルになります。
= Choose(A, "A", "B", "C")
※変数Aが1のとき"A"を、2のとき"B"を返す。


このChoose関数は、何らかのプロパティの値に応じてある変数に値をセットするような場合に便利です。例えばフォームの[スクロールバー]プロパティの値(数値)に応じて、文字列変数にその内容を漢字で設定するような場合、次のように使うことができます。
Private Sub コマンド1_Click()
   Dim strScrolProp As String

  strScrolProp = Choose(Me.ScrollBars + 1, "なし", "水平のみ", "垂直のみ", "水平/垂直")

  Debug.Print strScrolProp

End Sub
どうですか?。If〜Else〜End If や Select Case よりはるかにシンプルだと思いませんか?。
| Index | Prev | Next |



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