プロが教える店舗&オフィスのセキュリティ対策術

下記のようなマクロを見よう見まねで作りました。

K13:K43に入れた文字列としての計算式を隣りのJ列に計算された答えを入れるというものです。
うまく動いたのですが、式が間違っている場合、エラーになるのでエラー処理をいれてみました。

On Error GoTo Trapと

Exit Sub
Trap: MsgBox "式が不正です。", vbCritical, "式"

の3行を新たに挿入しましたが、どういうわけか全部がエラーになってしまいMsgBoxが出てしまいます。
どこが間違ったのでしょうか?

Sub 包括料算()
Dim i As Long

Sheets("包括明細").Select
For i = 1 To 30
If Range("K" & i + 13) <> "" Then 'K列14~43行で空白以外のセルの場合

On Error GoTo Trap 'エラーの時Trapへ

Range("J" & i + 13).Formula = "=ROUND(" & Range("K" & i + 13).Value & ",2)" 'J列14~43行に式としていれる

Exit Sub
Trap: MsgBox "式が不正です。", vbCritical, "式"

End If

Next

A% = MsgBox("入力完了ですか?" _
+ Chr(&HD) + Chr(&HA) + "", vbYesNo + vbQuestion, "確認")
Select Case A%
Case vbYes
包括終了 '終了用マクロへ
Case vbNo
Exit Sub
End Select
End Sub

A 回答 (5件)

こんにちは。

maruru01です。

場所はNo.1の人のでいいですが、Exit Subが抜けています。


End Select

Exit Sub

Trap:MsgBox "式が不正です。", vbCritical, "式"

End Sub


あと、On ErrorステートメントもForループの外(前)へ出す方がいいでしょう。
それから、本題から外れますが、Forループの中で、常に
「i + 13」
としているなら、最初からループ範囲を、
For i = 14 To 43
としておけばいいのではないでしょうか。
    • good
    • 0
この回答へのお礼

お世話になりありがとう御座いました!
本当にたすかりました。

お礼日時:2003/04/28 16:54

ごめんなさい。

間違ってました。

前の方ですね。そうですね。
    • good
    • 0
この回答へのお礼

お世話になりありがとう御座いました!
本当にたすかりました。

お礼日時:2003/04/28 16:55

>Exit Subは今回の場合必要ありません。



違います。
Exit Subを置かないと、エラーが起こらなくても、End Selectの後に"必ず"MsgBoxを実行してしまいます。
だから、正常な場合は、Trap:の"前で"プロシージャを抜けるために、Exit Subは必要です。
    • good
    • 0
この回答へのお礼

お世話になりありがとう御座いました!
本当にたすかりました。

お礼日時:2003/04/28 16:54

Exit Subは今回の場合必要ありません。


次の行がEnd Subですから。

あとは、#2のmaruru01さんのご指摘通りです。
    • good
    • 0

エラートラップを記述する場所が間違ってます。




End Select

Trap:MsgBox "式が不正です。", vbCritical, "式"

End Sub

この位置です。

処理を継続したければ、

End Select
Trap:MsgBox "式が不正です。", vbCritical, "式"
ResumeNext
End Sub
です。
    • good
    • 0
この回答へのお礼

お世話になりありがとう御座いました!
本当にたすかりました。

お礼日時:2003/04/28 16:53

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!