VBAで自動化 VBA一覧 シート追加 セル・シート・ブック操作

【VBA】シートがなければ作成する方法

Excel VBA で作業を自動化する際、指定したシートが存在しない場合に自動で新しいシートを作成したい場面がよくあります。

この記事では、シートが存在するかを確認し、存在しない場合は自動で作成する方法を基本から活用例まで解説します。

シートが存在するか確認する方法

シートが既に存在するかを確認する必要があります。そのために、Worksheets コレクションを使用してシート名をチェックします。

【シートの存在確認】

Function SheetExists(sheetName As String) As Boolean

Dim ws As Worksheet
On Error Resume Next
Set ws = Worksheets(sheetName)
SheetExists = Not ws Is Nothing
On Error GoTo 0

End Function

解説

  • Worksheets(sheetName) を使用してシート名を検索します。
  • シートが存在しない場合は wsNothing になるため、それを利用して真偽値を返します。

シートがなければ作成する基本例

シートが存在しない場合に新しいシートを作成するコードを紹介します。【VBA】シートを追加して名前を付ける方法:Sheets.Addメソッド・Nameプロパティ

【シートがなければ作成】

Sub CreateSheetIfNotExists()

Dim sheetName As String
sheetName = "新しいシート"

If Not SheetExists(sheetName) Then

Worksheets.Add.Name = sheetName

MsgBox "シート '" & sheetName & "' を作成しました。"

Else

MsgBox "シート '" & sheetName & "' は既に存在します。"

End If

End Sub

解説

  • SheetExists 関数を使用してシートの存在を確認します。
  • シートが存在しない場合、Worksheets.Add を使って新しいシートを作成し、名前を設定します。

指定の位置にシートを作成

デフォルトでは、新しいシートは現在のアクティブなシートの前に追加されます。特定の位置にシートを作成したい場合は、Before または After プロパティを使用します。

【指定の位置に作成】

Sub CreateSheetAtPosition()

Dim sheetName As String
sheetName = "レポート"

If Not SheetExists(sheetName) Then

Worksheets.Add(After:=Worksheets(Worksheets.Count)).Name = sheetName
MsgBox "シート '" & sheetName & "' を最後に作成しました。"

Else

MsgBox "シート '" & sheetName & "' は既に存在します。"

End If

End Sub

解説

  • After:=Worksheets(Worksheets.Count) を指定して、新しいシートを既存の最後のシートの後に作成します。

シート名を動的に指定して作成

ユーザー入力に基づいて、シート名を動的に指定して作成することも可能です。

【ユーザー入力でシート名を指定】

Sub CreateSheetWithUserInput()

Dim sheetName As String
sheetName = InputBox("新しいシート名を入力してください:")

If sheetName = "" Then

MsgBox "シート名が入力されませんでした。"
Exit Sub

End If

If Not SheetExists(sheetName) Then

Worksheets.Add.Name = sheetName
MsgBox "シート '" & sheetName & "' を作成しました。"

Else

MsgBox "シート '" & sheetName & "' は既に存在します。"

End If

End Sub

解説

  • InputBox を使用してユーザーにシート名を入力させます。
  • 入力が空の場合は処理を終了します。

複数のシートをチェックして作成

複数のシートを一括でチェックし、存在しないシートだけを作成する方法です。

【複数シートをチェックして作成】

Sub CreateMultipleSheetsIfNotExists()

Dim sheetNames As Variant
Dim sheetName As String
Dim newSheets As String

sheetNames = Array("売上", "経費", "利益") ' チェックするシート名
newSheets = ""

For Each sheetName In sheetNames

If Not SheetExists(sheetName) Then

Worksheets.Add.Name = sheetName
newSheets = newSheets & sheetName & vbCrLf

End If

Next sheetName

If newSheets <> "" Then

MsgBox "以下のシートを作成しました:" & vbCrLf & newSheets

Else

MsgBox "すべてのシートが既に存在します。"

End If

End Sub

解説

  • 配列 sheetNames に作成するシート名を定義します。
  • 存在しないシートだけを追加します。

シートの可視状態をチェックして再利用

非表示になっているシートがある場合は、そのシートを再利用し、存在しない場合のみ新しいシートを作成する方法です。

【非表示シートの再利用】

Sub ReuseOrCreateSheet()

Dim sheetName As String
Dim ws As Worksheet

sheetName = "非表示シート"

On Error Resume Next
Set ws = Worksheets(sheetName)
On Error GoTo 0

If ws Is Nothing Then
' シートが存在しない場合は作成

Set ws = Worksheets.Add
ws.Name = sheetName
MsgBox "新しいシート '" & sheetName & "' を作成しました。"

ElseIf ws.Visible = xlSheetHidden Then

' シートが非表示の場合は表示
ws.Visible = xlSheetVisible
MsgBox "シート '" & sheetName & "' を再利用しました。"

Else

MsgBox "シート '" & sheetName & "' は既に存在しています。"

End If

End Sub

解説

  • 非表示状態のシートを Visible プロパティで確認し、表示状態に変更します。

注意点とベストプラクティス

  1. シート名の重複を防ぐ
    Excel は同じ名前のシートを複数作成できません。必ずシートの存在を確認するコードを組み込みましょう。
  2. エラーハンドリング
    シートが見つからない場合のエラーを防ぐために、On Error Resume Next を使用します。ただし、エラー状態は確実にリセットしましょう。【VBA】On Error Resume Nextでエラーを無視してエラーの制御
  3. ユーザー入力の検証
    ユーザーが無効なシート名を入力した場合に備えて、入力チェックを行うとさらに安全です。

まとめ

Excel VBA を使用して、シートが存在しない場合に作成する方法を以下のポイントで押さえましょう。

  1. SheetExists 関数を使ってシートの存在を確認する。
  2. Worksheets.Add メソッドで新しいシートを作成する。
  3. 動的なシート名や複数シートを一括で処理する応用例を活用する。
  4. 非表示シートを再利用する工夫を加える。

 

    -VBAで自動化, VBA一覧, シート追加, セル・シート・ブック操作