【Excel VBA】If Elseとは違う条件式(Select Case)について
エンジニアのIMMRです。Excel VBAの条件式には、以前に説明したExcel VBA 条件式(If Else)とこれから説明するSelect Caseの二つあります。1.従来のIf Else条件式If Elseは条件に合った時は処理Aを、条件に合わなかったら処理Bを実行します。では、下記のようなデータがあり、複数の条件があるとします。If Elseを使用して作成すると2種類の方法が浮かぶと思
Workteria(ワークテリア)では難易度の高いものから低いものまで、スキルや経験に合わせた案件を多数揃えています。会員登録は無料ですので、ぜひ会員登録してご希望の案件を探してみてください!
フリーランス/正社員のエンジニアとして活躍するには、ご自身のスキルや経験に合わせた仕事を選ぶことが大切です。ご希望の案件がみつからない場合はお気軽にお問い合わせください!ユーザ満足度の高いキャリアコンサルタントが在籍していますので、希望条件や悩み事などなんでもご相談ください。ご希望にピッタリの案件をご紹介させていただきます。
こんににちはIMMRです。
VBAに限ったことではないですが、プログラムを実行したが、
エラーが発生して、処理が止まってしまうことはあると思います。
例えば下記のようなブックがあったとします。
図1 割り算を行う処理が記載してあるブック
そして、下記がプログラムです。
図2 割り算を行う処理が記載してあるブックのVBAプログラム
これは、セルB3に記載された数値 ÷ セルD3に記載された数値 の結果をセルF3に入力するというプログラムです。
本来の動作は以下になります。
図3 ブックに数値を入力(処理が正常に動作する数値)
セルB3に6を入力します。
セルD3に3を入力します。
そして、プログラムを実行してみます。
図4 ブックに数値入力後の処理結果(正常)
6(セルB3)÷3(セルD3)なので答えの2がセルF3に入力されます。
しかし、次のように数値を入力するとどうでしょうか。
図5 ブックに数値を入力(処理がエラーする数値)
図6 ブックに数値を入力後の処理結果(エラー発生)
もちろんエラーになります。
これは、6÷0を実施したからです。
ゼロ除算で明確な計算結果出すことができないからエラーとなっています。
エラーが発生したら、それに対しての処理を行いたい場合もあると思います。
しかし、VBAではエラーが発生してしまうとデバックモードが止まって処理が中止します。
ここでは、エラーが発生した時に処理を実行する方法を説明します。
下記のように、エラーが発生した時のラベルを作成します。
そして、それ以降にエラーが発生した時に行いたい処理を記述します。
On Error GoTo エラー発生時のラベル
Exit Sub
エラー発生時のラベル:
※エラー発生時のラベルは任意の名前でいいです。変数のように事前の宣言もいりません。
処理の途中でエラーになった場合は、処理を行うのを中止して、
エラー発生時のラベルまで飛び、その下に記述したエラー発生時の処理を行います。
ここで大事なのが、処理とエラー発生時のラベルの間にあるExit Subですが、
これによって、正常に処理が完了したらプロシージャーから抜けることを意味します。
これがないと、正常の時(エラーが発生しなかった)でもエラー発生時の処理を行ってしまうからです。
下記が使用例となります。
サンプルコード
Sub test17()
On Error GoTo error_go
Range("F3") = Range("B3") / Range("D3")
Exit Sub
error_go:
MsgBox ("エラーが発生しました。")
End Sub
・まず、初めに、On Error GoTo error goを記載します。これによりエラーが発生したら、
その下にあるerror go: というラベルの箇所まで行い、ラベル以降の処理を行います。 ※ラベル名は、error go です。
・Range("F3") = Range("B3") / Range("D3")は通常の処理です。
・Exit Subはプロシージャーから抜けるためのものです。
これがないと、エラーが発生しなかった時も、error goのラベル以下の処理をしてしまいます。
では、上記コードを投稿した下記、ブックで処理を行います。
図7 ブックに数値を入力(処理がエラーする数値)
セルB3には、6
セルD3には、0を入力しました。
この状態で実行すると
図8 ブックに数値を入力後の処理結果(エラー後の処理)
Error GoTo error goの記載がないとエラーが発生した時点でプログラムが止まってしまいますが、
止まらずに、error goのラベルまで行き、その下に記載したメッセージを表示することが出来ました。
ちなみに正常に終了する動作も確認します。
図9 ブックに数値を入力(処理が正常に動作する数値)
セルB3には、6
セルD3には、3を入力しました。
この状態で実行すると
図10 ブックに数値入力後の処理結果(正常)
正常に処理が終了します。
「エラーが発生しました。」というメッセージは出ません。
先ほどのExit forがないと下記のようにエラーが発生してないのにも関わらず以下のように「エラーが発生しました。」と
メッセージが出てしまいます。
図11 ブックに数値入力後の処理結果(正常なのにエラー発生時の処理を実行)
これだとエラーが発生したのか、正常終了なのかが、わかりにくくなってしまいます。
Exit forを使うことは、大切なことなのです。
そのような方はぜひ、Workteriaサイトをご利用ください!
定期的にご本人に合う高額案件を紹介
リモートワークなど自由な働き方ができる案件多数
専属エージェントが契約や請求をトータルサポート