注目キーワード
  1. VBA
  2. 関数
  3. ショートカット

ExcelVBAで条件分岐を学ぼう⑥

  • 2019年3月24日
  • 2019年3月24日
  • VBA
  • 7回
  • 0件
VBA NO IMAGE

①エラーが発生したときの処理を指定する

文字列データを計算に使用したり、データ型を指定した変数に別の種類のデータを代入しようとしたりすると、「エラー」が発生し、マクロが止まってしまうことがあります。このような場合にマクロを止めず、あらかじめ指定した処理を実行させることが可能です。

・エラーが発生する可能性のあるコ―ド

エラーが発生する可能性がある処理を記述する場合は、その処理よりも前に、エラーに備えるためのコードを記述しておくとよいでしょう。次の例では、アクティブセルに入力された数値を1.08倍にした税込み価格を右隣りのセルに入力し、「処理を終了しました」というメッセージを表示するコードです。しかし、アクティブセルの値が文字列のときに実行すると、エラーが表示されてしまいます。エラーメッセージ画面では、「終了」をクリックしてください。

・実行結果①

・実行結果②

 

・エラーが発生しても処理を継続する

この問題を解決するために、上記のマクロにエラー対応の行を追加してみましょう。エラーが発生してもそのまま処理を続けるには、問題の行の前に「On Error Resume Next」という1行を追加します。これで、アクティブセルの値が数値でなくても、「処理を終了しました」というメッセージが表示されます。

・実行結果

 

・セル参照の入力画面のエラーに対応する

上記のような処理では、あらかじめ対象のセルのデータの種類を調べて条件分岐させることで、エラー自体を回避することもできます、しかしエラー処理以外に解決方法がない例として、ApplicationオブジェクトのInputBoxメソッドで、引数Typeに8を指定してセル参照を指定するケースがあります。次の例は、InputBoxメソッドでセル範囲を指定し、戻り値として取得したセル範囲を表すRangeオブジェクトに塗りつぶしの色を設定するコードです。

・実行結果

このコードでは、入力画面で「キャンセル」がクリックされた場合にエラーが発生します。引数Typeに8を指定した場合でも、キャンセル時の戻り値はFalseなので、オブジェクト変数に対してしか行えない「Set」の操作でエラーになるのです。この場合は、「On Error GoTo ラベル」の一行を設定することで、コード中でエラーが発生したときにラベルで指定した行へジャンプさせることができます。ラベルとは、コードの中で、任意の名前の後に「:」を付けた行のことです。上記のコードを次のように修正すると、入力画面で「キャンセル」をクリックした場合は「ErrHandler」ラベルにジャンプして、「処理をキャンセルしました」というメッセージを表示します。

なお「Exit Sub」は、コードの途中でSubプロシージャを終了するための命令です。これをエラー処理の前に記述すると、エラーが発生しないときに「ErrHandler:」行以下が実行されなくなります。

・実行結果

NO IMAGE
最新情報をチェックしよう!