【Excel マクロ VBA】Functionの戻り値がエラーを返したときに確認すること

資料請求番号:SH45

VBAのFunctionプロシージャがうまく使えないときのデバック方法

VBAのFunctonプロシージャを使用していると、エラーを返したり、想定と異なる計算結果を出してきたりします。ここでは、エラーや想定外の計算結果(オーバーフロー含)が起きた際のデバックで確認すべきことをまとめます。

プログラム例

今回は以下のようなプログラムを例に取り、よくあるエラー例を解説します。

プログラム例では

の演算をしています。

正常稼働時

x = 10, y = 2, k = 2としたとき、

を計算すれば値は7となるはずです。

エラーの原因① 引数の順番が違う

ここでx = 0としたとき値は2となります。

ところが、引数の順番が異なる場合、例えば
F1(x,y)と記述すべきところをF1(y,x)と記述したとき、

このようなエラーを返します。

これはFunction F1内でxとyが入れ替わってしまっているために起こったバグです。
0÷2の演算はできますが、2÷0の演算はできないため、エラーを起こしました。

エラーの原因② 定数をパブリック変数にしていない

演算

の中で、kは定数です。したがって、Functionプロシージャの外部で定義することが多いです。
このとき、kはパブリック変数として、Functionプロシージャ内外で利用できるようにしなければいけません。

例えば、kをパブリック変数とせずに、メインプログラムで定義してしまうと

kはなかったことにされてしまいます。したがって
z = (10/2) + 0が演算されてしまい、値として5を返すのです。

コメントを残す

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