• ベストアンサー

エクセルマクロでエラーの処理

次のようなマクロを組みました。 1列目の値を2列目の値で割り、その答を3列目に表示するというものです。 Sub Macro1() ' On Error GoTo ErrRtn: R = 1 FLAG1: Do While Cells(R, 1) <> "" Cells(R, 3) = Cells(R, 1) / Cells(R, 2) R = R + 1 Loop End ErrRtn: Cells(R, 3) = "ゼロ割" R = R + 1 GoTo FLAG1 ' End Sub ゼロ割が発生したときのエラー処理として3列目に「ゼロ割」を表示させて次の行について処理を継続するようにしていますが、上記のプログラムだと全データのうち最初のエラーは思い通りになりますが、続けて処理をしていって2番目に発生したエラーではエラーメッセージが出て止まってしまいます。 どう直せばよいのでしょうか? なお、上記だと2列目がゼロであるか否かを先に判定してやればよいのですが、エラー処理の質問をしたいために例として上記のような簡単なプログラムをあげているものです。 よろしくお願いします。

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

  • ベストアンサー
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.2

ErrRtn: Cells(R, 3) = "ゼロ割" R = R + 1 GoTo FLAG1 の部分を ErrRtn: Cells(R, 3) = "ゼロ割" Resume Next としましょう

tarobei
質問者

お礼

できました。ありがとうございました。

すると、全ての回答が全文表示されます。

その他の回答 (2)

  • papayuka
  • ベストアンサー率45% (1388/3066)
回答No.3

取りあえず、これで希望になると思います。 Sub Macro1() On Error GoTo ErrRtn: R = 1  Do While Cells(R, 1) <> ""    Cells(R, 3) = Cells(R, 1) / Cells(R, 2)    R = R + 1  Loop  Exit Sub ErrRtn:  Cells(R, 3) = "ゼロ割"  Resume Next End Sub

tarobei
質問者

お礼

ENDではなくExit Subとするのが普通なのですね。 ありがとうございました。

すると、全ての回答が全文表示されます。
  • a987654
  • ベストアンサー率26% (112/415)
回答No.1

errコードのリセットが必要ではありませんか? ちなみに表記のプログラムでは、2番目以降のエラーを回避した時点で 無限ループになりませんか?

tarobei
質問者

お礼

ありがとうございます。 エラーコードのリセットというのは自分も思いましたが、その術がわかりませんでした。 なお、ENDがErrRtnの前にあるので無限ループにはならないと思うのですが。 NO.2、NO.3の方の回答で解決しました。 ありがとうございました。

すると、全ての回答が全文表示されます。

関連するQ&A