Switch関数はRangeオブジェクトを返すのか
Switch関数はRangeオブジェクトを返すか
前回
初めてその存在を知ったSwitch
関数。
こいつは、たとえばRange
オブジェクトを返したりすることはできるのだろうか。
やってみた。
準備
Sheet1
オブジェクトに次のようなProperty
を実装してみる。
リスト1 Sheet1モジュール
Option Explicit Public Enum ProvocationType ptTypeA ptTypeB ptTypeC End Enum Friend Property Get ProvocationCell( _ ByVal typeOfProvocation As ProvocationType) As Range Dim tmp As ProvocationType tmp = typeOfProvocation Dim ret As Range Set ret = Switch(tmp = ptTypeA, Me.Range("A1"), _ tmp = ptTypeB, Me.Range("A2"), _ tmp = ptTypeC, Me.Range("A3")) Set ProvocationCell = ret End Property
自作のProvocationCell
プロパティの引数に、自作列挙体ProvocationType
を指定。
Property
プロシージャ内部では、引数で受け取ったProvocationType
列挙体の値(ptTypeA
~ptTypeC
)によって、Switch
関数の返り値をA1セル~A3セルに切り替えるようにしている。
特に逐次コンパイルに引っかかることもなかったので、普通にRange
オブジェクトを返しそう。
ワクワク感が止まらない!
ちなみに、Sheet1
はこの状態。
実験
標準モジュールに次のコードを書いて実験。
リスト2 標準モジュール
Private Sub testSwitchFunctionReturnRange() Call MsgBox(Sheet1.ProvocationCell(ptTypeA).Value) Call MsgBox(Sheet1.ProvocationCell(ptTypeB).Value) Call MsgBox(Sheet1.ProvocationCell(ptTypeC).Value) End Sub
Sheet1
オブジェクトの自作ProvocationCell
プロパティを、引数を変えながら参照し、取得したRange
オブジェクトのValue
プロパティの値をメッセージボックスに表示させるだけのコード。
ご覧のとおり。
おわりに
ちゃんとRange
オブジェクトも返してくれる。
簡単な条件分岐なら、Select Case
を使わずとも簡単に書けそう。