【VBA】Error(errornumber) 関数でエラーメッセージを取得

【VBA】Error(errornumber) 関数でエラーメッセージを取得

概要

VBA(Visual Basic for Applications)では、ユーザー定義関数やプロシージャ内でエラーを意図的に返す必要が生じる場合があります。Error(errornumber) 関数は、指定したエラー番号に対応するエラー値(Variant 型、サブタイプ Error)を生成するための関数です。

このエラー値は、Excelのセルにエラーとして表示されたり、他の処理でエラー状態を伝播させるために利用されます。たとえば、ユーザー定義関数が計算不可能な値を検出した場合、Error(2007) を返すことで「#DIV/0!」エラーを表現できます。

Error(errornumber) の基本的な使い方

Error(errornumber) 関数は、引数としてエラー番号(数値)を受け取り、その番号に対応するエラー値を返します。返された値は、通常の数値や文字列とは異なり、エラーであることを示す特殊な値となります。

VBAで作成したユーザー定義関数が、何らかの理由で正しい値を返せない場合、この関数を使ってエラー値を返すことが可能です。たとえば、入力値が不正な場合や、ゼロ除算が発生した場合などに使用します。

以下は Error(errornumber) の基本的な使用例です:

' 例: 0で割ろうとした場合に #DIV/0! エラーを返す
Function SafeDivision(numerator As Double, denominator As Double) As Variant
    If denominator = 0 Then
        SafeDivision = Error(2007)  ' 2007 は #DIV/0! エラーに対応
    Else
        SafeDivision = numerator / denominator
    End If
End Function

このように、条件に応じてエラー値を返すことで、Excel上でエラー表示(例: #DIV/0!)がされるようになります。

エクセルでのエラー番号一覧

Error(errornumber) で指定するエラー番号は、Excelの各種エラーに対応しています。よく使用されるエラー番号は以下のとおりです。

  • 2000 : #NULL! エラー
  • 2007 : #DIV/0! エラー
  • 2015 : #VALUE! エラー
  • 2023 : #REF! エラー
  • 2029 : #NAME? エラー
  • 2036 : #NUM! エラー
  • 2042 : #N/A エラー

これらの番号は、Excelの内部でエラー状態を管理するためのものであり、Error() 関数に渡すことで、意図したエラー表示をセルに反映させることができます。

実際の使用例

以下に、Error(errornumber) を利用した具体的な例をいくつか紹介します。

例 1: ゼロ除算エラーの処理

Function DivideValues(a As Double, b As Double) As Variant
    If b = 0 Then
        ' b が 0 の場合、#DIV/0! エラーを返す
        DivideValues = Error(2007)
    Else
        DivideValues = a / b
    End If
End Function

この関数は、引数 b がゼロの場合、Error(2007) を返すことで Excel 上に #DIV/0! エラーが表示されます。

例 2: 不正な入力値に対するエラー処理

Function CalculateSquareRoot(x As Double) As Variant
    If x < 0 Then
        ' 負の数の場合、#NUM! エラーを返す
        CalculateSquareRoot = Error(2036)
    Else
        CalculateSquareRoot = Sqr(x)
    End If
End Function

ここでは、負の数が入力された場合に Error(2036) を返し、#NUM! エラーを Excel 上に表示するようにしています。

例 3: 入力値の検証

Function ValidateInput(value As Variant) As Variant
    ' 文字列が入力された場合、#VALUE! エラーを返す
    If Not IsNumeric(value) Then
        ValidateInput = Error(2015)
    Else
        ValidateInput = value * 2
    End If
End Function

この関数では、数値以外が入力された場合に Error(2015) を返して、#VALUE! エラーを示します。

注意点とベストプラクティス

Error(errornumber) 関数を使用する際の注意点や推奨事項は以下の通りです:

  • エラー番号の意味を把握する : 指定する数値がどのエラーに対応しているか、Excelのエラー番号一覧を参照して正しく設定しましょう。
  • 通常のエラーハンドリングとの区別 : VBAには On Error ステートメントや Err オブジェクトを用いたエラーハンドリング機能があります。Error(errornumber) はあくまで関数の戻り値としてエラーを返すためのものであり、これらと混同しないように注意してください。
  • ユーザー定義関数での利用 : ユーザー定義関数がセルから呼び出される場合、エラー値を返すとセル上に直接エラー表示(例: #DIV/0!)が行われ、ユーザーに問題を明示することができます。
  • エラー値の伝播 : 一度エラー値が発生すると、その後の計算や処理においてエラーが伝播するため、必要に応じてエラー値のチェックを行い、適切な対応をするようにしましょう。

まとめ

VBAにおける Error(errornumber) 関数は、ユーザー定義関数やプロシージャで意図的にエラーを返すための便利な機能です。正しいエラー番号を指定することで、Excel上で標準のエラー表示(#DIV/0!、#NUM!、#VALUE! など)を実現でき、計算やデータ検証における異常値の扱いが容易になります。エラー番号の意味を理解し、他のエラーハンドリング手法と区別して使うことが、安定したVBAプログラム作成のポイントとなります。

この解説を参考に、実際のプロジェクトやユーザー定義関数の中で Error(errornumber) の活用方法を検討してみてください。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です