Excel VBAには、複数の条件の分析とコードの実行に使用できるIF ThenElse構造があります。これらの条件に基づいています。
複数の条件をチェックできる別の同様の構造は、SELECTCASEステートメントです。
Select Caseは、必要な条件が3つ以上ある場合に役立ちます。チェックする。これは2つの条件で使用することもできます(ただし、そのような場合はIf Then Elseの方が使いやすいと思います)。
次のグレードを取得するときにSelectCaseステートメントが役立つ簡単な例採点した点数に基づいた学生(このチュートリアルの後半で例として取り上げます)。
注:このチュートリアルで取り上げるすべてのサンプルコードは、VBAのモジュールに配置することを目的としています。
このチュートリアルの内容:
ケースの選択構文
以下は、Excelでのケースの選択の構文です。 VBA:
Select Case Test_ExpressionCase Value_1Code Block when Test_Expression = Value_1Case Value_2Code Block when Test_Expression = Value_2Case Value_3Code Block when Test_Expression = Value_3Case ElseCode Block when none of the case conditions are metEnd Select
- Test_Expression:これは、さまざまなケースを使用して値を分析する式です(以下の例で詳しく説明します)。
- Condition_1、Condition_2、…:これらはテキスト式がテストされる条件です。条件を満たしている場合は、指定された条件のコードブロックが実行されます。
使用するすべてのSelectCaseステートメントについて、EndSelectステートメントを使用する必要があります。
ケースの例を選択
次にVBAでSelectCaseステートメントを使用する方法をよりよく理解するために、いくつかの例を見ていきましょう。
このチュートリアルのほとんどの例は、概念を説明することを目的としています。これらは、作業を完了するための最良の方法である場合とそうでない場合があります。
Select Caseで条件を確認する方法の簡単な例から始めましょう。
例1–番号を確認する
次の例では、コードはユーザーに1〜5の任意の番号を入力するように求め、ユーザーが入力した番号を示すメッセージボックスを表示します。
Sub CheckNumber()Dim UserInput As IntegerUserInput = InputBox("Please enter a number between 1 and 5")Select Case UserInputCase 1MsgBox "You entered 1"Case 2MsgBox "You entered 2"Case 3MsgBox "You entered 3"Case 4MsgBox "You entered 4"Case 5MsgBox "You entered 5"End SelectEnd Sub
このコードは役に立たず、絶対確実ではないことに注意してください。たとえば、6または任意の文字列を入力しても、何も実行されません。ただし、前述したように、ここでの私の目的は、SelectCaseがどのように機能するかを紹介することです。
例2–IS条件でのSelectCaseの使用
SelectCase構造でIS条件を使用できます数値の値を確認します。
次のコードは、入力された数値が100より大きいかどうかを確認します。
Sub CheckNumber()Dim UserInput As IntegerUserInput = InputBox("Please enter a number")Select Case UserInputCase Is < 100MsgBox "You entered a number less than 100"Case Is >= 100MsgBox "You entered a number more than (or equal to) 100"End SelectEnd Sub
例3 – CaseElseを使用してすべてをキャッチする
上記の例では、2つの条件(100未満または100以上)を使用しました。
2番目のケースの代わりに条件として、CaseElseを使用することもできます。
Case Elseはキャッチオールとして機能し、前のケースのいずれにも該当しないものはすべてCaseElseによって処理されます。
以下は、CaseElseを使用したサンプルコードです。
Sub CheckNumber()Dim UserInput As IntegerUserInput = InputBox("Please enter a number")Select Case UserInputCase Is < 100MsgBox "You entered a number less than 100"Case ElseMsgBox "You entered a number more than (or equal to) 100"End SelectEnd Sub
例4–数値の範囲を使用する
In Select場合によっては、数値の範囲を確認することもできます。
次のコードは入力を要求し、値に基づいてメッセージボックスを表示します。
Sub CheckNumber()Dim UserInput As IntegerUserInput = InputBox("Please enter a number between 1 and 100")Select Case UserInputCase 1 To 25MsgBox "You entered a number less than 25"Case 26 To 50MsgBox "You entered a number between 26 and 50"Case 51 To 75MsgBox "You entered a number between 51 and 75"Case 75 To 100MsgBox "You entered a number more than 75"End SelectEnd Sub
例5–スコアに基づいて成績を取得する
これまで、基本的な例を見てきました(実際の世界ではあまり役に立ちません)。
これは、ExcelVBAでSelectCaseを使用できる実際の例に近い例です。
次のコードは、学生が取得する成績を示します。試験のマーク。
上記のコードはユーザーにマークを要求し、それに基づいて、最終成績を示すメッセージボックスを表示します。
上記のコードでは、マーク0〜100のすべての条件を指定しました。
Select Caseを使用する別の方法は、最後にCaseElseを使用することです。これは、すべての条件を考慮し、どの条件も満たされない場合の対処方法を指定する場合に役立ちます。
以下のコードは、マイナーな変更を加えたグレードコードのバリエーションです。最後に、Case elseステートメントがあり、上記の条件のいずれも当てはまらない場合に実行されます。
例6– Select Caseを使用したカスタム関数(UDF)の作成
上記の例では、コードはユーザーにマークの入力を求めました。
通常のワークシート関数と同じように使用できるカスタム関数(ユーザー定義関数)を作成することもできます。学生の成績。
カスタム式を作成するコードは次のとおりです。
Function GetGrade(StudentMarks As Integer)Dim FinalGrade As StringSelect Case StudentMarksCase Is < 33FinalGrade = "F"Case 33 To 50FinalGrade = "E"Case 51 To 60FinalGrade = "D"Case 60 To 70FinalGrade = "C"Case 70 To 90FinalGrade = "B"Case ElseFinalGrade = "A"End SelectGetGrade = FinalGradeEnd Function
このコードをモジュールでは、以下に示すように、ワークシートで関数GetGradeを使用できます。
例7–ケースを選択してODD / EVENを確認する
以下はコードの例です。セルA1の数値が奇数か偶数かを確認します。
例8–平日/週末の確認(複数の条件)
ケースの選択を使用して、で複数の値を確認することもできます。同じケースです。
たとえば、次のコードは現在の日付を使用して、今日が平日か週末か(週末は土曜日と日曜日)を示します。
Sub CheckWeekday()Select Case Weekday(Now)Case 1, 7MsgBox "Today is a Weekend"Case ElseMsgBox "Today is a Weekday"End SelectEnd Sub
上記のコードでは、同じケースで2つの条件(1と7)をチェックします。
注:平日関数は日曜日に1を返し、土曜日に7を返します。
例9–ネストされたSelectCaseステートメント
1つのSelectCaseステートメントを他のステートメント内にネストすることもできます。
以下は、日が平日か平日かをチェックするコードです。週末で、週末の場合は、土曜日か日曜日かが表示されます。
Sub CheckWeekday()Select Case Weekday(Now)Case 1, 7 Select Case Weekday(Now) Case 1 MsgBox "Today is Sunday" Case Else MsgBox "Today is Saturday" End SelectCase ElseMsgBox "Today is a Weekday"End SelectEnd Sub
上記のコードでは、 Select Caseをネストして、週末が土曜日か日曜日かを確認しました。
注:上記の例は、概念を説明するためのものです。これは、平日/週末を見つけるための最良または最も実用的な方法ではありません。
例10–大文字と小文字を選択してテキスト文字列を確認する
大文字と小文字を選択してから、特定の文字列を確認できます。それに基づいてコードを実行します。
以下のサンプルコードでは、ユーザーに部門名の入力を求め、オンボーディングのために接続する必要のある人の名前を示しています。
Sub OnboardConnect()Dim Department As StringDepartment = InputBox("Enter Your Department Name")Select Case DepartmentCase "Marketing"MsgBox "Please connect with Bob Raines for Onboarding"Case "Finance"MsgBox "Please connect with Patricia Cruz for Onboarding"Case "HR"MsgBox "Please connect with Oliver Rand for Onboarding"Case "Admin"MsgBox "Please connect with Helen Hume for Onboarding"Case ElseMsgBox "Please connect with Tony Randall for Onboarding"End SelectEnd Sub
上記のすべての例が、ExcelVBAでのSelectCaseの概念とアプリケーションを理解するのに役立つことを願っています。
次のVBAチュートリアルもお気に召すかもしれません:
- Excel VBAループ– For Next、Do While、Do until、ForEach。
- ExcelVBAの次のループ用。
- マクロを記録する方法Excel。