初心者オサムシがExcelのマクロと戦う戦闘ブログである
by オサムシ
Select Case ステートメント/マクロ基礎

Select Case ステートメント



Select Case ステートメントは複数の条件から、該当した条件の処理を実行したいときに使います

書式は、この通り
Select Case 値 '値は主に変数やオブジェクトなど
Case 条件1
処理1
Case 条件2
処理2
Case 条件3
処理3
End Select


例)
A1セルに粗大ごみの重さを入力すると、料金が表示される仕組みを作ります

Select Caseとイベントプロシージャを組み合わせます

Private Sub Worksheet_Change(ByVal Target As Range)
Dim a As Single '変数の型宣言
a = Range("A1") 'a にA1セルを代入
Select Case a 'Select Case ステートメント a がキー
Case Is <= 3 '一つ目の条件3Kg以下
MsgBox "料金は500円です " & a & "Kg"
Case Is <= 7 '二つ目の条件7Kg以下
MsgBox "料金は800円です " & a & "Kg"
Case Is > 7 '三つ目の条件7Kgを超える場合
MsgBox "別途見積もりが必要です " & a & "Kg"
Case Else 'Case Else は上記条件の全てに偽
MsgBox "入力に誤りがあります " & a
End Select
End Sub


1行目の()内 ByVal はこのプロシージャから子プロシージャに対して、オブジェクトを渡すときに、値渡し(⇔参照渡し)をする事を指します
詳しくは別の記事で。

"Is"は自分、つまりここでは"a"を表しています

この表記をCase 0 To 3 のような範囲指定することもできますし、Case 0,1,2,3 のようにカンマ区切りで、複数の値を指定することもできます

ただし、検証してみた限りでは、この指定方法を混在することはできないようです

例えばこのように
        Case 0,1,2,3
MsgBox "料金は500円です " & a & "Kg"
Case 4 <= 7
MsgBox "料金は800円です " & a & "Kg"
Case Is > 7
MsgBox "別途見積もりが必要です " & a & "Kg"

これは上手くいきませんでした

エラーは出ないものの、間違った処理がされてしまいました

調べた限りでは、設定などがあるという話は見つからず、理由も探せませんでした

Select Caseステートメントを使う場合は、注意してください

または解決策をご存じの方は、教えていただけると助かります

コメント&メッセージお待ちしております!osamushi

オサムシじゃーなる
[PR]
by 03musi | 2013-01-14 19:04 | マクロ 基礎
<< Do Loop ステートメント... コメントアウト/マクロ基礎 >>