記事キャッチ画像   (11) 条件分岐の Select Case 文(ステートメント)2種類の使い方! 


 1. Select Case 変数名 〜 の形式 


 2. Select Case True 〜 の形式 

If に続き、Select Case 文(ステートメント)の使用方法を理解する!
  「広告」  
 

   (11) 条件分岐の Select Case 文(ステートメント)2種類の使い方!  

Excel メニューバーの [ヘルプ] - [更新プログラムのチェック] にて、適用されていないアップデートがあれば行ってください。 

Excel 2016 for Mac 環境での説明となりますので、 Mac版 Excel 2011 では( VBA が利用できますが )同じ結果にならない場合があるかもしれません。

現状、 VBE 内で日本語を記述すると(貼り付けのみ可能な場合あり)乱れたり、保存時にクラッシュすることが多いため、 VBAコード は「未変換の英数字のみ」で記述してください。(テキストエディタからの貼り付けは可能)

 1. Select Case 変数名 〜 の形式 

( ユーザー定義関数 のVBAコードを含んだ)前回使用した XLSM ファイルを、「マクロを有効」にして開きます。

[ alt ] + [ F11 ] にて VBE を開き、Module1 の最後に以下の VBAコードを入力するかコピーして貼り付け。



Public Function FuncTest3() As String
    Dim str As String
    Dim num As Long

    str = Application.ThisCell.Offset(0, -1).Value

    If (str = "") Or (Not IsNumeric(str)) Then
        FuncTest3 = "入力値、対象外"
        Exit Function
    End If

    FuncTest3 = str
    num = CLng(str)

    Select Case num
    Case Is <= 1
        FuncTest3 = "XXX"
    Case Is = 2
        FuncTest3 = "XX"
    Case 3
        FuncTest3 = "X"
    Case 4, 5
        FuncTest3 = "△"
    Case 6, 7
        FuncTest3 = "◯"
    Case 8
        FuncTest3 = "◎"
    Case Is = 9
        FuncTest3 = "◎◎"
    Case Else
        FuncTest3 = "◎◎◎"
    End Select

End Function

Application.ThisCell は、ユーザー定義関数が呼び出されたセルを示すプロパティ。
Offset(0, -1) は、上のセルから相対的にオフセットしたセルを示す。
Offset(y, x) の形で記述するため、Offset(0, -1) は行はそのままで 一つ前の列(一つ左側の列)の意味。
.Value にて、オフセット後のセルの値を取得。

該当セルが未入力か数値以外の場合、結果に ”入力値、対象外”をセット後 Exit Function 命令にて 当 Function プロシージャを即終了しています。
この場合、 Exit Function 以降のコードは実行されません。

既に取得文字列が「数値」であることをチェック済みのため、CLng 関数にて「 Long 整数」に変換。
ChangeLong か ConvertLong を省略して CLng だと思われます。

Case 2」と「Case Is = 2」 は等価。(等号・不等号を記述する場合、 Is キーワードが必要)
変数 num の値(一つ左側のセルの値)により、ユーザー定義関数の結果をセットしています。



51

「A11:A22」セルは、普通にキーボードから入力します。
「B11」セルに =FuncTest3() と入力後、「B11」セルをコピーして「B12:B22」に貼り付け。
VBAコードの通りに、「B11:B22」が表示されるかどうか確認します。


 2. Select Case True 〜 の形式 


    Select Case True
    Case (num <= 1)
        FuncTest3 = "XXX"
    Case (num = 2)
        FuncTest3 = "XX"
    Case (num = 3)
        FuncTest3 = "X"
    Case (num = 4) Or (num = 5) 
        FuncTest3 = "△"
    Case (num >= 6) And (num <= 7)
        FuncTest3 = "◯"
    Case (num = 8)
        FuncTest3 = "◎"
    Case (num = 9)
        FuncTest3 = "◎◎"
    Case Else
        FuncTest3 = "◎◎◎"
    End Select


Select Case True 形式の「条件分岐」で記述し直すと上記の通りとなり、「条件」が複雑な場合は重宝します。
Case に続く条件式が「最終的に成り立つ(Trueを返す)」なら、どんなに複雑な条件式でも記述可能です。

Excel に元々用意されている関数を使用しても可能だと思いますが、修正が発生した場合のメンテナンスや柔軟な入力チェックVBA の利点も多いはずです。
細かい所に手が届く「ユーザー定義関数」をぜひ試してみてくださいね!


明日は、 For 〜 Next 以外の「繰り返し」を説明する予定です。


お疲れ様でした!
[command] + [Q] にてExcel を終了時、「作業中のブック」を保存するか確認のダイアログ画面が表示されるため 「保存」しましょう。
現状、 VBE 内で日本語を記述すると(貼り付けのみ可能な場合あり)乱れたり、保存時にクラッシュすることが多いため、 VBAコード は「未変換の英数字のみ」で記述してください。(テキストエディタからの貼り付けは可能)

  「広告」  
  

最後まで読んでいただき、ありがとうございます。
ぜひ、右側の「人気ブログランキング」投票に ご協力ください。
また、お越しくださいませ。
// アタル
 

  「広告」