- ベストアンサー
EXCELユーザー関数でISERRORを使うには?
- EXCELユーザー関数を使用して除算エラーを回避する方法について教えてください。
- 作成したユーザー関数で#VALUE!エラーが表示されてしまう問題があります。
- 改良方法を教えてください。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
アナタのヤリタイ延長で作成するなら 例えば: function ddx(a as double, b as double) as variant dim res as variant on error goto errhandle res = a / b ddx = res exit function errhandle: ddx = "" end function などのようにします。 #補足 変数resを介する必要はなく直接「ddx = a / b」とすることで十分ですが,そこは敢えてアナタのマクロの延長として作成しています。 #以下余談 >今回は、なんとかエラーの回避の仕方をマスターしたいと思いますので、私の作ったマクロか、回答1の延長でやってみたいと思います。 という事でしたら,まずご自分で書いたマクロをご自分でデバッグできるようになってください。 ■手順:不明の箇所はご自分でネットで調べるか,別途ご質問を投稿して解決してください マクロにブレイクポイントを設ける マクロを実行する(今回はセルにユーザー定義関数を記入して計算させる) デバッグを開始し,ステップ実行でマクロの実行を一行ずつ追いかける ローカルウィンドウを表示し,各変数の内容の推移を確認する ■先にも回答したとおり,マクロの中でゼロ割りを試みても,「エラー値は計算されません」。 結果してアナタが試みた >If IsError(FORMULA) Then も,意図したようには機能していません。 アナタのマクロで,変数FORMULAには意図したようにはエラー値が格納されていないこと,では代わりに何が格納され,マクロはどこへと向かっていったのか。 そういった事をデバッグの操作によって確認しながら,間違いを見つけ正しい道筋を探ってください。
その他の回答 (1)
- keithin
- ベストアンサー率66% (5278/7941)
回答1) 下記など参考にしてみて下さい。 Excel の数式エラーを非表示にするユーザー定義関数のサンプル http://support.microsoft.com/kb/280094/ja 使い方 =iferror(A1/B1,"") =iferror(2/0,"err") 回答2) >下記のように作ったのですが、#VALUE!と、表示され、上手くエラーを回避出来ていません。 ふつーのマクロで sub macro1() dim a,b,c a = 1 b = 0 c = a / b msgbox c end sub なんて具合に作成してみると判りますが,マクロの途中でゼロ割りを試みると「エラー値が計算される」のではなく,即座に実行時エラーを起こしてマクロが停止します。ユーザー定義関数の場合は,無条件にエラー値が返ります。 前述参考資料ではこれを回避するためにon errorで逃がしていますが,今回のご質問でとりあえずやりたかったのは >0で除算すると、エラーになるのですが、それを回避するユーザー関数を作ろうと思っています。 なので,もっとシンプルに function ddx(a as double, b as double) as variant if b = 0 then ddx = 0 else ddx = a / b end if end function などのように組み立てるだけです。
お礼
keithinさん、深夜にもかかわらず丁寧に教えて頂きありがとうございました。 回答2は、よく理解出来ます。1つの方法だとは思うのですが、今回は、なんとかエラーの回避の仕方をマスターしたいと思いますので、私の作ったマクロか、回答1の延長でやってみたいと思います。 (順序が逆になりましたが)回答1を参照して、下記のようなマクロを作ってみました。 Function XX(A As Integer, B As Integer) Dim FORMULA As Variant Dim SHOW As String On Error GoTo ErrorHandler FORMULA = A / B SHOW = "" If IsError(FORMULA) Then XX = SHOW Else XX = FORMULA End If Exit Function ErrorHandler: Resume Next End Function ところが、(0で割り算をした場合)答えを求めたいセルには、スペースでなく、0となってしまいます。 引き続き、(keithinさんに限らず)、ご教示頂けると幸いです。
お礼
ユーザー定義関数の添削をありがとうございました!(当たり前なんでしょうけれども)見事に、私の思い通りのものが出来ました。 以下余談・・と、おっしゃってますが、まさに図星で、私のマクロの作成能力で足りないところだと思います。デバックは知っているのですが、ローカルウィンドウでの表示の仕方は知りません・・・。Orz 早速に、職場から本を持ってきて、今晩勉強したいと思います。 マクロが動くようになったことよりも、デバックに関してのことが、よっぽどタメになったと思います。 今回は、本当にありがとうございました。感謝感激です。 今から、勉強です!!
補足
ご丁寧に、ありがとうございます。キーワードがちりばめられていますので、1つ1つ地道に理解して行きたいと思います。 (お礼の方に入れてしまうと、結果報告が出来なくなりそうなので、とりあえずこちらへレスしました・・。)