
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 の値(一つ左側のセルの値)により、ユーザー定義関数の結果をセットしています。

「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コード は「未変換の英数字のみ」で記述してください。(テキストエディタからの貼り付けは可能)
「広告」
最後まで読んでいただき、ありがとうございます。
ぜひ、右側の「人気ブログランキング」投票に ご協力ください。
また、お越しくださいませ。
// アタル
「広告」
コメント