GEN MUTO'S HOMEPAGE  エクセル大事典  エクセルVBAを極める

エクセルExcel大事典 エクセル大事典TOPページへ
 ■ エクセルVBA中級編−VBAでいろんなテクニック
  エラー処理(例外処理)は重要です2
 
■ エラー処理(例外処理)2

前回に続いて、エラー処理の解説です。
前回は、Errオブジェクトのプロパティまで説明しました。

Err.Raise Errオブジェクトのメソッドです。エラーを意図的に発生させることができます。エラー処理のテストなどに利用できます。

例:
Sub test()
On Error GoTo ErrHandler
  Err.Raise 11
Exit Sub
ErrHandler:
  Debug.Print Err.Number & vbCrLf & _
          Err.Description & vbCrLf & _
          Err.Source
  Resume Next
End Sub

この例では、Err.Raise 11 で意図的に0除算エラーを発生させ、エラーハンドラ内で対応するエラー情報を出力させた後、終了します。

例:
On Error Resume Next
  ' 構文1
  If Err.Number<>0 Then
    Debug.Print Err.Number & vbCrLf & _
            Err.Description & vbCrLf & _
            Err.Source
  End If

この例では、構文1内で何らかのエラーが発生した場合、Err.Numberに0以外の整数がセットされるため、
If Err.Number<>0 Then のIfブロックが実行されます。(0以外ならばなんらかのエラーが発生している)

ちなみにNumberはErrオブジェクトの規定プロパティなので、
・If Err.Number<>0 Then
・If Err<>0 Then
・If Err Then (If文で0以外はTrueに評価されるため)
どの記述をしても、動作は同じになります。

Error関数
エラー番号を引数にして、エラーメッセージを返します。エラー処理ルーチン内だけでなく、プロシージャ内のどこにでも記述が可能です。
またErr.Raiseのように、エラーを発生させることも可能です。

例:
MsgBox Error(11)
「0で除算しました」のメッセージを表示します。

例:
Error 11
0除算エラーを発生させます。

エラー処理が必要なプロシージャ

エラー処理は、すべてのプロシージャに必要なわけではありません。逆に必ずエラー処理が必要なプロシージャも存在します。

一般に、ユーザーから実行させるメインプロシージャや、イベントによって実行されるイベントプロシージャにはエラー処理が必要になります。つまり、プログラムの呼び出し元になるプロシージャには必ずエラー処理を実装しておく必要があります。

これは、呼び出し先のプロシージャ(子・孫プロシージャ)にエラー処理がない場合、さかのぼって呼び出し元のエラーハンドラを利用するためです。
ですので、大元のプロシージャにエラー処理が実装されていない場合、VBAのエラーメッセージが表示されることになります。

ただし、呼び出し先のプロシージャでエラーが発生する可能性があることを分かっている場合は、呼び出し先プロシージャ内でエラートラップを行います。
例えば、呼び出し先プロシージャでファイルをオープンしている場合、エラーが発生したら呼び出し先プロシージャ内でエラートラップし、ファイルをクローズさせるべきです。これを行わずに呼び出し元のエラーハンドラで処理させていると、使用されないファイルハンドラが残ってしまう恐れがあります。

エラー処理で行うべきでない処理

以下のようなエラー処理は間違いです。必要でないエラー処理は極力使用すべきでありません。

例:
Sub test()
Dim MyDate As Date
On Error GoTo ErrHandler
  MyDate = CDate(InputBox("Input Date"))
  MsgBox "有効な日付です"
Exit Sub
ErrHandler:
  MsgBox "有効な日付ではありません"
End Sub

このような処理をエラーハンドラで処理すべきではありません。

Sub test()
Dim MyDate As String
  MyDate = InputBox("Input Date")
  If IsDate(MyDate) Then
    MsgBox "有効な日付です"
  Else
    MsgBox "有効な日付ではありません"
  End If
End Sub

このように記述すれば、エラーハンドラは必要ありません。
VBAの機能でチェックできる内容を、エラー処理を用いて判定すべきではありません。



バグ、デバッグとエラー、エラー処理(例外処理)

よく似た言葉として用いられる、バグとエラー、厳密にはどう違うのでしょう?

バグは、コンピュータが真空管とリレーで構成されていた時代に、真空管の発する光と熱に誘われ内部に入り込んだ小さな虫(bug)が焼死し、炭化して装置の誤作動を招いたことに由来します。

現在ではプログラムのコーディング上のミス・欠陥そのものを指します。つまり、エラーが発生する原因そのものを指すのですが、エラーは必ずしもバグだけで発生するわけではないことに注意してください。コードにバグがなくてもエラーは発生します。
ちなみにコード上のバグを修正・除去する作業をデバッグと呼びます。

エラーはシステムがプログラム動作が正常でないと判断し、処理の中断または停止をさせようとする状態を指します。
エラー処理(例外処理)はエラーが発生した時点で、通常の処理を中断しておこなう「通常とは異なる処理」のことを表します。


以上、エラー処理について解説しました。
エラー処理は、必ず実装させる必要のある処理です。その最大の目的は、
ユーザーの環境およびデータの保護
にあります。

開発の最終フェーズは動作確認テストですが、このテストは開発者(プログラマ)レベルで行えば、それでよいというものではありません。必ず設計者(SE)レベル、使用者(エンドユーザー)レベルでのテストを行ってください。

これは、趣味のフリーソフトの開発であれ、業務用パッケージの受注開発であれ、基本的なスタンスに変わりはありません。
あくまでユーザーへの利益(ユーザーの保護)を最優先すべきです。


>> 次の話にすすむ


サイト内検索ができます

Microsoft Most Valuable Professional

Microsoft MVP Excel
武藤 玄 プロフィール
 

■■■ 執筆した書籍 ■■■
 

EXCEL VBA 業務自動化
 

Excel VBA を5日でマスターする本
 

仕事を速くする Excel VBA 入門
 

Excel VBAと業務改善のポイントがわかる本
 

Access VBA ベーシック スタンダード
 

Excel VBA アクションゲーム作成入門
 

■■■ 連載中の記事 ■■■
 

Excel VBAで業務改善!
 

実務で使うExcel VBA
 


TOPページ


■ エクセルVBA超入門

 ・9ステップで"Hello World!"
  からオブジェクト指向まで!
  1."Hello World!"を表示しよう
  2.基本はデータの入出力
  3.繰り返し処理
  4.シートで簡易データベース
  5.名前をつけよう
  6.構造化プログラムに挑戦
  7.構造体を使ってみよう
  8.フォームを使ってみよう
  9.オブジェクト指向に挑戦

■ エクセルVBA中級編

 ・VBAでいろんなテクニック
  変数・関数のスコープ
  引数の参照方法を明示
  配列の中身を一気に複写
  識別子がよいコードを作る
  データ定義型をもっと知ろう
  定数と列挙型を活用しよう
  エラー処理の重要性1
  エラー処理の重要性2
  いろいろな条件分岐
  いろいろな繰り返し処理
  演算子について知ろう
  文字列操作 連結 変換 置換
  文字列操作 検索 比較 書式
  日付操作関数を知ろう
  数値操作・評価・その他関数
  並び替えソートをマスター
  いろいろな検索をマスター
  VBEditorを使いこなそう
  マクロの記録を活用しよう1
  マクロの記録を活用しよう2
  VBAからVBEを操作しよう1
  VBAからVBEを操作しよう2
  VBAからVBEを操作しよう3
 ・ワークシートを使いこなす
  セルの参照をマスターしよう
  セルの選択をマスターしよう
  セルの操作をマスターしよう
  セルの書式設定をマスターしよう
  行・列の操作をマスターしよう
  シートの参照をマスターしよう
  シートの操作をマスターしよう
  ブックの操作をマスターしよう
  ウィンドウの操作をマスターしよう
  イベントプロシージャを活用しよう
  ワークシートを印刷しよう1
  ワークシートを印刷しよう2
  音声(読み上げ)機能を操作しよう
  グラフを操作しよう
 ・ユーザーフォームを使いこなす
  ユーザーフォームを使おう
  UserFormsオブジェクト
  Labelコントロール
  TextBoxコントロール
  ComboBoxコントロール
  ListBoxコントロール
  CheckBoxコントロール
  OptionButtonコントロール
  ToggleButtonコントロール
  CommandButtonコントロール
  ScrollBarコントロール
  SpinButtonコントロール
 ・VBA関数の一覧
  Aから始まる関数の一覧
  Cから始まる関数の一覧
  Dから始まる関数の一覧
  Eから始まる関数の一覧
  Fから始まる関数の一覧
  Gから始まる関数の一覧
 
■ エクセルVBAを極める
 VBAスーパーテクニック
 
 ・データベースへ接続してみよう!
  CSVファイルへの接続
  ワークシートへの接続
  mdbファイルへの接続
  SQL Serverへの接続
  ADOレコードセットの操作1
  ADOレコードセットの操作2
 ・ファイルを操作してみよう!
  FileSystemObjectの操作
  Drive File Folderの操作
  TextStream ダイアログ
  ステートメントでファイル操作1
  ステートメントでファイル操作2
 ・他アプリと連携してみよう!
  ActiveXオートメーションの操作
 ・ゲーム技でマクロを超える
  エクセルで音を鳴らす1
  エクセルで音を鳴らす2  
  スクリーン座標を取得
  様々なイベント取得
  リボンUIを制御しよう1
  リボンUIを制御しよう2
  シート上でアニメを動かそう
 
■ 一歩上行くエクセル
 基本操作の完全マスター!

 
 ・あなたはいったい
  エクセルで何をしたいのか?
  エクセルで業務効率化
  エクセル関数を使いこなす
  エクセルの便利技
  エクセルは最高の帳票ツール
 ・エクセル基本操作上級編!
  セル選択、コメント、シリアル値
  オート機能を使いこなそう!
  参照、条件付書式、入力規則
  関数をもっと理解しよう!
  配列数式を有効利用しよう!
  データの正規化をしよう!
  ショートカットキーを利用しよう1
  ショートカットキーを利用しよう2
  Office用アプリを作成しよう!
  PowerPivotとExcelで簡単BI!
 ・世間の誤ったエクセルの
  べからず集
  エクセルで文章を書くべからず
  エクセルで図形を描くべからず
  エクセルでシステムをつくるな
 
■ エクセル関連その他

 ・エクセルコミニュティにあなたも
  参加しませんか?
  Excel関連リンク・コミニュティ
 ・VBの理解がVBAをマスターする
  最短距離!
  VB関連の老舗・大家サイト
 ・エクセルExcel大事典掲示板
 ・プライバシーポリシー

2000アイテムを超えるラベルを販売
送料無料、即納対応の優良ショップ
今買っているラベルより確実に安い!
OAラベルの販売専科グラフトラベル




エクセルExcel大事典ははリンクフリーです エクセル大事典Excel大事典
お問い合わせはこちら gengengen@yahoo.co.jp

Copyright© Gen Muto 武藤 玄 All Rights Reserved,