• ベストアンサー

関数エラーによるエクセルマクロの処理中断

そんなにエクセルVBAが得意じゃないです。よろしく教示くださいませ。 セルにエクセル関数を設定し、マクロを働かせて使用しています。 セルに想定外のデータが入力されると、関数エラーを起こしてしまうのですが、 このエラーが発生すると、マクロも中断になってしまいます。 関数エラーが発生しても、マクロが中断しないような、マクロ命令って あるのでしょうか。 実は、マクロで想定外データのチェックをかけてるのですが、その想定外データが入力されると、 警告は発するのですが、関数エラーが発生し、マクロが中断してしまうのです。 マクロに組み込むべき、コマンドはあるのでしょうか。

質問者が選んだベストアンサー

  • ベストアンサー
  • keithin
  • ベストアンサー率66% (5278/7941)
回答No.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が「エラーじゃないなら」具体的にどんな結果が現れるのか、といった事実を利用してエラーになったセルが含まれているか否か判定する事も出来るかもしれません。

k0758
質問者

お礼

ありがとうございましたm(_ _)m 最初の回答で試してみました。 バッチリ駆動しました。 なんだかよく分かりませんが、VBAって奥深いですね。

その他の回答 (2)

  • keithin
  • ベストアンサー率66% (5278/7941)
回答No.2

セルに記入した関数の計算結果がエラーだったらマクロが止まるのですか?? んじゃまぁ、「想定外」の想定に寄らずとにかく関数がエラーなら分岐させてみます。 if iserror(worksheets("どこかの").range("セル番地")) then  msgbox "関数ERRORだってばよ" else ’本来のヤリタイ仕事 end if てな具合でしょうか。

k0758
質問者

お礼

ありがとうございます。 でも、ダメでした(>_<) 下記のように作ってみましたが、関数エラーが発生すると、 "範囲外データが入力されています!" は表示されますが、 下記のプログラムが機能しなくなってしまいます。 ただし、ポタンに対応している終了プログラム(ブックを閉じる)は、 機能します。 どうしたら、関すエラーが発生しても、下記が機能するように できるのでしょうか。分かれば、教示くださいませ。 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)
回答No.1

こんばんは! 安直な方法ですが、 関数上でのエラーと判っているのであれば、 その前におまじないとして >On Error Resume Next の1行を加えておきます。 >セルに想定外のデータが入力されると・・・ とありますが、 本来であれば「想定外のデータ」が入力された場合の処理を If~Then で分岐してエラー処理するのが望ましいと思います。m(_ _)m

k0758
質問者

お礼

ありがとうございました。 でも解決できませんでした。 No.2の方のお礼にさらなる疑問書き込んだので、もし、お分かりになれば、助言お願いしますm(_ _)m

関連するQ&A