- ベストアンサー
関数エラーによるエクセルマクロの処理中断
そんなにエクセルVBAが得意じゃないです。よろしく教示くださいませ。 セルにエクセル関数を設定し、マクロを働かせて使用しています。 セルに想定外のデータが入力されると、関数エラーを起こしてしまうのですが、 このエラーが発生すると、マクロも中断になってしまいます。 関数エラーが発生しても、マクロが中断しないような、マクロ命令って あるのでしょうか。 実は、マクロで想定外データのチェックをかけてるのですが、その想定外データが入力されると、 警告は発するのですが、関数エラーが発生し、マクロが中断してしまうのです。 マクロに組み込むべき、コマンドはあるのでしょうか。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
IsErrorを使うのは「セル番地」に対してだとお話ししてあります。 勝手にセル範囲を対象に計算しようとしてもダメです。 あなたの方針を踏襲するなら: private sub Worksheet_Change(byval Target as excel.range) dim h as range if application.intersect(target, range("C10:C15")) is nothing then exit sub for each h in range("D10:D15") if iserror(h) then msgbox "ERROR" exit sub end if next application.enableevents = false application.run "Keisan" application.enableevents = true end sub こんなカンジ: private sub Worksheet_Change(byval Target as excel.range) dim res if application.intersect(target, range("C10:C15")) is nothing then exit sub on error resume next set res = range("D10:D15").specialcells(xlcelltypeformulas, xlerrors) if isempty(res) then application.enableevents = false application.run "Keisan" application.enableevents = true else msgbox "ERROR" end if end sub #参考 D10:D15が「エラーじゃないなら」具体的にどんな結果が現れるのか、といった事実を利用してエラーになったセルが含まれているか否か判定する事も出来るかもしれません。
その他の回答 (2)
- keithin
- ベストアンサー率66% (5278/7941)
セルに記入した関数の計算結果がエラーだったらマクロが止まるのですか?? んじゃまぁ、「想定外」の想定に寄らずとにかく関数がエラーなら分岐させてみます。 if iserror(worksheets("どこかの").range("セル番地")) then msgbox "関数ERRORだってばよ" else ’本来のヤリタイ仕事 end if てな具合でしょうか。
お礼
ありがとうございます。 でも、ダメでした(>_<) 下記のように作ってみましたが、関数エラーが発生すると、 "範囲外データが入力されています!" は表示されますが、 下記のプログラムが機能しなくなってしまいます。 ただし、ポタンに対応している終了プログラム(ブックを閉じる)は、 機能します。 どうしたら、関すエラーが発生しても、下記が機能するように できるのでしょうか。分かれば、教示くださいませ。 Private Sub Worksheet_Change(ByVal Target As Range) With Target If Intersect(Target, Range("C10:C15")) Is Nothing Then Exit Sub Application.EnableEvents = False With Target If IsError(ActiveSheet.Range("D10:D15")) Then MsgBox "範囲外データが入力されています!" On Error Resume Next Else Application.Run "Keisan" Application.EnableEvents = True End If End With End With
- tom04
- ベストアンサー率49% (2537/5117)
こんばんは! 安直な方法ですが、 関数上でのエラーと判っているのであれば、 その前におまじないとして >On Error Resume Next の1行を加えておきます。 >セルに想定外のデータが入力されると・・・ とありますが、 本来であれば「想定外のデータ」が入力された場合の処理を If~Then で分岐してエラー処理するのが望ましいと思います。m(_ _)m
お礼
ありがとうございました。 でも解決できませんでした。 No.2の方のお礼にさらなる疑問書き込んだので、もし、お分かりになれば、助言お願いしますm(_ _)m
お礼
ありがとうございましたm(_ _)m 最初の回答で試してみました。 バッチリ駆動しました。 なんだかよく分かりませんが、VBAって奥深いですね。