- ベストアンサー
VBAでシートが存在するか確認し、処理を行うマクロの作成方法
- VBAでシートが存在するか確認し、処理を行うマクロの作成方法について教えてください。
- 質問者さんが試したVBAコードでは、シートが2枚不足すると「インデックスが有効範囲にありません」とのエラーメッセージが表示されます。1枚不足の場合は正常に処理されます。この理由と対策を教えてください。
- お礼と質問の文章を作成して、シートが存在するか確認し、処理を行うVBAマクロの作成方法について教えてください。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
エラーで「On Error GoTo」になった場合、エラーを一度リセット(Resume)する必要があります。 よって今回は2度目のエラー時にResume命令を行わなかったのでエラーメッセージが表示されたようです。 対応は以下のようにすれば良いですが、もうちょっとわかりやすいプログラムにした方が良いかと思います。 【OKERAUMIさんのプログラムを単純に変更】 Sub マクロ() Dim mychksht As Worksheet 1: On Error GoTo err2 Set mychksht = Sheets("1") MsgBox "1 あります" 2: On Error GoTo err3 Set mychksht = Sheets("2") MsgBox "2 あります" 3: On Error GoTo err4 Set mychksht = Sheets("3") MsgBox "3 あります" 4: On Error GoTo err5 Set mychksht = Sheets("4") MsgBox "4 あります" 5: MsgBox "終了します" Exit Sub err2: Resume 2 err3: Resume 3 err4: Resume 4 err5: Resume 5 End Sub 【On Error Resume Next で行った場合(処理後にエラーがないかを確認)】 Sub マクロ() Dim mychksht As Worksheet On Error Resume Next Err.Clear Set mychksht = Sheets("1") If Err.Number = 0 Then MsgBox "1 あります" Err.Clear Set mychksht = Sheets("2") If Err.Number = 0 Then MsgBox "2 あります" Err.Clear Set mychksht = Sheets("3") If Err.Number = 0 Then MsgBox "3 あります" Err.Clear Set mychksht = Sheets("4") If Err.Number = 0 Then MsgBox "4 あります" Err.Clear Set mychksht = Sheets("5") If Err.Number = 0 Then MsgBox "5 あります" End Sub 【On Error Resume Next で シート名を"1"~"5"で繰り返した場合】 Sub マクロ() Dim I As Integer Dim mychksht As Worksheet On Error Resume Next For I = 1 To 5 Err.Clear Set mychksht = Sheets(CStr(I)) If Err.Number = 0 Then MsgBox I & " あります" Next I End Sub
お礼
ありがとうございます。 教えて頂いた方法で上手にいきました。