• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:お世話になります)

VBAでシートが存在するか確認し、処理を行うマクロの作成方法

このQ&Aのポイント
  • VBAでシートが存在するか確認し、処理を行うマクロの作成方法について教えてください。
  • 質問者さんが試したVBAコードでは、シートが2枚不足すると「インデックスが有効範囲にありません」とのエラーメッセージが表示されます。1枚不足の場合は正常に処理されます。この理由と対策を教えてください。
  • お礼と質問の文章を作成して、シートが存在するか確認し、処理を行うVBAマクロの作成方法について教えてください。

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

  • ベストアンサー
  • jcctaira
  • ベストアンサー率58% (119/204)
回答No.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

OKERAUMI
質問者

お礼

ありがとうございます。 教えて頂いた方法で上手にいきました。