【ExcelVBA】シートの存在チェック

Excelで指定したシートがあるかどうかチェックして、存在しなければ作成し、存在していれば指定したシートを選択するという処理

シートの存在チェック

すべてのシートをループで回しながら名前をチェックするというやり方もあるけど、「On Error Resume Next」を使えばループする必要もなくチェックできる。

エラーが発生していなければ「Err.Number」の値が「0」となることを利用する。

<処理の手順>

  1. inputboxを使って選択したいシート名を入力
  2. 入力されたシートを選択
  3. エラーが発生していれば存在しないので新規に作成
  4. エラーがなければ存在しているので、シートを選択

<ソースコード>

Sub SelectSheet()
    Dim SheetName As String
    SheetName = InputBox("シート名を入力してください", "シート名入力")
    If SheetName = "" Then
        MsgBox "シート名が入力されませんでした。"
        Exit Sub
    End If
    ' この先のエラーを無視
    On Error Resume Next
    ' 入力されたシートを選択
    Worksheets(SheetName).Select
    If Err.Number <> 0 Then
        ' エラーが発生・・・シートが存在しない
        MsgBox SheetName & "は存在しないので新規に作成します"
        Worksheets.Add After:=ActiveSheet
        ActiveSheet.Name = SheetName
    Else
        ' エラーが発生しなかった・・・シートが存在
        MsgBox SheetName & "を選択します"
        xWsheet.Select
    End If
End Sub