即効テクニック |
セルに数式が入力されていたとします。 数式の計算結果は、セル(Rangeオブジェクト)のValueプロパティでわかります。 また、入力されている数式自体を調べたいときは、Formulaプロパティを使います。Sub Sample1() MsgBox ActiveCell.Formula End Subでは、この数式がエラーになっているかどうかを調べるには、どうしたらいいでしょう。 ここでは、アクティブセルに入力した数式が「#NAME?」や「#DIV/0!」などのエラーを返しているとします。 任意の数式がエラーかどうかを判定するには、IsError関数を使えます。Sub Sample2() If IsError(ActiveCell.Value) Then MsgBox "エラーです" Else MsgBox "正常です" End If End Sub数式がエラーを返していると、RangeオブジェクトのValueプロパティは数値や文字列ではなく、エラー値を返します。 したがって、次のようにエラー値を文字列として扱うと、マクロの方で実行時エラーが発生します。Sub Sample3() MsgBox ActiveCell.Value End Subエラーの内容を調べるときは、MsgBoxではなくDebug.Printを使ってください。Sub Sample4() Debug.Print ActiveCell.Value End Sub実行すると、イミディエイトウィンドウに「エラー 2029」や「エラー 2007」などが出力されます。 この「2029」や「2007」が、数式で発生しているエラー番号です。 それぞれのエラー番号には、次の定数が割り当てられています。 エラー番号をエラー値に変換するには、CVErr関数を使います。Sub Sample5() Dim msg As String If IsError(ActiveCell.Value) Then Select Case ActiveCell.Value Case CVErr(xlErrDiv0): msg = "#DIV/0!" Case CVErr(xlErrNA): msg = "#N/A" Case CVErr(xlErrName): msg = "#NAME?" Case CVErr(xlErrNull): msg = "#NULL!" Case CVErr(xlErrNum): msg = "#NUM!" Case CVErr(xlErrRef): msg = "#REF!" Case CVErr(xlErrValue): msg = "#VALUE!" End Select MsgBox msg & "エラーです" Else MsgBox "正常です" End If End Sub