EXCEL VBA Switch関数の使い方(最初の条件式に関連付けられている 値または、式を返す・複数条件設定)
EXCEL VBA Switch関数の使い方(最初の条件式に関連付けられている 値または、式を返す・複数条件設定)
●はじめに
今回は、Switch関数の取り扱い方法を説明いたします。Switch関数は、Select CaseステートメントやChoose関数と似ていますが、Switch関数のリスト内に複数条件を設定して最初に条件一致した値または、式を返します。
また、IF関数で複数条件を設定するよりも、Switch関数を使うとシンプルに条件設定する事が出来きます。それでは、順番にサンプルプログラムを交えて説明いたします。
【参照ページ:Choose関数】
【参照ページ:Select Case】
【参照ページ:IF Then Else Elself】
●書式の説明 (Switch関数)
● Switch(expr-1, value-1[, expr-2, value-2 … [, expr-n,value-n]])
Switch関数リスト内に複数条件を設定して最初に条件一致(真:True)した、値または式を返します。expr-n :リスト内の条件式を指定します。(複数条件指定可能)
value-n : expr-nと対象なる条件式が(真:Ture)の時に値または式を返します。
【使用例】
Ans = Switch(Way = “東”, “East”, Way = “西”, “West”)
MsgBox Ans※Wayが【東】ならば、【East】をメッセージボックスで表示します。
※Wayが【西】ならば、【West】をメッセージボックスで表示します。
※Wayが【東】・【西】以外だと【Null】を返します。(エラー発生)
【注意点】
設定した複数条件でTrueとなる条件が存在しない場合は、Nullを返します。
Switch関数リスト内に複数条件を設定して最初に条件一致(真:True)した、値または式を返します。expr-n :リスト内の条件式を指定します。(複数条件指定可能)
value-n : expr-nと対象なる条件式が(真:Ture)の時に値または式を返します。
【使用例】
Ans = Switch(Way = “東”, “East”, Way = “西”, “West”)
MsgBox Ans※Wayが【東】ならば、【East】をメッセージボックスで表示します。
※Wayが【西】ならば、【West】をメッセージボックスで表示します。
※Wayが【東】・【西】以外だと【Null】を返します。(エラー発生)
【注意点】
設定した複数条件でTrueとなる条件が存在しない場合は、Nullを返します。
入力した値(条件)に対して該当する値を返します。
●プログラム説明 サンプル① 【Switch関数】
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
' '******** AKIRA55.COM ******* https://akira55.com/Switch/ ' Sub Switch01() '入力した文字列に対して該当する文字列を返します。 Dim Ans, Way As String Way = InputBox("東・西・南・北のいずれかを入力して下さい") '東西南北をいずれかを入力します。 Ans = Switch(Way = "東", "East", Way = "西", "West", Way = "南", "South", Way = "北", "Nouth") On Error Resume Next '【東・西・南・北】以外の文字又は、空白を入力した時のエラー回避 MsgBox Ans '入力結果を表示します。 End Sub ' |
●実行前~実行後 ※プログラム実行後、メッセージボックスが表示されるので、【東・西・南・北】のいずれがを入力します。入力して値に対して、【東・西・南・北】の英語をメッセージボックスに返します。
(画面クリックして拡大)
(画面クリックして拡大)
セルに登録されているデータを元に、Switch関数を使い該当する数値を返す。(条件判断・複数条件)
●プログラム説明 サンプル② 【Switch関数】
下記のサンプルプログラム、セルに登録されているデータを元に、Switch関数を使い該当する数値を返すサンプルプログラムです。具体的には、エクセルシートに社員情報の一覧が表示されています。そのデータ内にあるD列の【役職名】から該当する【基本給】をE列に代入します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
' '******** AKIRA55.COM ******* https://akira55.com/Switch/ ' Sub Switch02() 'セルに登録されているデータを元に、Switch関数を使い該当する数値を返します。 Dim Yaku As String Dim I, lRow, Yen As Long lRow = Cells(Rows.Count, "A").End(xlUp).Row 'A列の最終行を取得します。 For I = 2 To lRow Yen = 0 '代入される「Yen」を0にする(クリアー) Yaku = Cells(I, "D") 'D列の役職名を取得します。 Yen = Switch(Yaku = "部長", 550000, Yaku = "次長", 450000, Yaku = "課長", 400000, _ Yaku = "係長", 350000, Yaku = "主任", 300000, Yaku = "事務員", 250000) '役職名に応じて該当する基本給をYenに代入します。 On Error Resume Next '登録外の役職名を取り込んだ時のエラー回避 Cells(I, "E") = Yen '役職名の基本給をE列に代入します。 Next I End Sub ' |
●実行前~実行後 ※プログラム実行後、社員情報一覧のD列【役職名】から該当する【基本給】をE列に代入されました。
(画面クリックして拡大)
(画面クリックして拡大)
セルに登録されているデータを元に、Switch関数を使い複数条件で合否を判定する。(テスト結果の合否判定)
●プログラム説明 サンプル③ 【Switch関数】
下記のサンプルプログラムは、個人のテスト結果(国語・数学・英語)より、テスト結果の合否を判定するサンプルプログラムです。Switch関数を利用する事で、複数条件による判定させるプログラムもシンプルに作成する事ができます。
【テスト結果の合否:複数条件】
①国語60点以上 かつ 数学60点以 かつ 英語60点以上 ⇒【合格】
②国語50点以上 かつ 数学50点以 かつ 英語50点以上 かつ 補習受講 ⇒ 【合格】
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
' '******** AKIRA55.COM ******* https://akira55.com/Switch/ ' Sub Switch03() 'セルに登録されているデータを元に、Switch関数を使い複数条件で合否を判定する。 Dim Hosyu, Hantei As String Dim I, lRow, Kokugo, Sugaku, Eigo As Long lRow = Cells(Rows.Count, "A").End(xlUp).Row 'A列の最終行を取得します。 For I = 2 To lRow Kokugo = 0: Sugaku = 0: Eigo = 0 '代入される「KOKUGO/SUGAKU/EIGO」を0にする(クリアー) Hantei = "" '判定結果を空白にする Kokugo = Cells(I, "E") 'E列の国語の点数を代入する。 Sugaku = Cells(I, "F") 'F列の数学の点数を代入する。 Eigo = Cells(I, "G") 'G列の英語の点数を代入する。 Hosyu = Cells(I, "H") 'H列の補習の記号を代入する。 '【テスト結果の合否:複数条件】 Hantei = Switch(Kokugo >= 60 And Sugaku >= 60 And Eigo >= 60, "合格", _ Kokugo >= 50 And Sugaku >= 50 And Eigo >= 50 And Hosyu = "受講", "合格") 'Switch関数で上記の複数条件による合格判定を行う On Error Resume Next '登録外のデータを取り込んだ時のエラー回避 Cells(I, "I") = Hantei '判定結果(合計)をI列に代入します。 Next I End Sub ' |
●実行前~実行後 ※個人のテスト結果(国語・数学・英語)により、テスト結果の合否判定されました。複雑な複数条件であってもSwitch関数を使う事で、見やすくプログラムも作成できました。
(画面クリックして拡大)
(画面クリックして拡大)
最後まで、ご覧いただきまして誠に有難うございました。
また、VBAに関するテクニックや便利な手法などをこのサイトに掲載していきますので、定期的に参照していただけると幸いです。
また、VBAに関するテクニックや便利な手法などをこのサイトに掲載していきますので、定期的に参照していただけると幸いです。