【VBA】同名シートが存在する場合のエラー対処

Excel VBAで新しいシートを追加したりコピーしたりする際、**既に同じ名前のシートが存在するとエラー(実行時エラー1004)**が発生します。
本記事では、同名シートエラーを回避するための対処方法を紹介します。


1. シート名の重複チェックを行う

事前に、同じ名前のシートが存在するかを SheetExists 関数で確認するのが基本です。

Function SheetExists(ByVal sheetName As String) As Boolean
On Error Resume Next
SheetExists = Not Worksheets(sheetName) Is Nothing
On Error GoTo 0
End Function

使用例:

Sub AddSheetSafe()
Dim newName As String
newName = "Report"

If SheetExists(newName) Then
MsgBox "シート「" & newName & "」は既に存在します。"
Else
Worksheets.Add.Name = newName
End If
End Sub

2. ユニークな名前を自動生成する

同じ名前のシートがあった場合に、番号を付けてユニークな名前を作る方法が便利です。

Function GetUniqueSheetName(ByVal baseName As String) As String
Dim i As Long
Dim uniqueName As String

uniqueName = baseName
i = 1
Do While SheetExists(uniqueName)
uniqueName = baseName & "_" & i
i = i + 1
Loop
GetUniqueSheetName = uniqueName
End Function

Sub AddSheetWithUniqueName()
Dim newSheetName As String
newSheetName = GetUniqueSheetName("Report")
Worksheets.Add.Name = newSheetName
MsgBox "シート「" & newSheetName & "」を作成しました。"
End Sub

3. コピー時のエラー回避

Worksheets("Data").Copy でシートをコピーすると、コピー先のブックに同名シートがある場合エラーが発生します。
この場合も、コピー直後に新しいシートにユニーク名を付与する方法で回避できます。

Sub CopySheetSafe()
Dim baseName As String
Dim newName As String

baseName = "Data"
newName = GetUniqueSheetName(baseName)

Worksheets(baseName).Copy After:=Worksheets(Worksheets.Count)
ActiveSheet.Name = newName
MsgBox "シート「" & newName & "」としてコピーしました。"
End Sub

4. ユーザーに名前を入力させる方法

ユーザーにシート名を入力してもらい、既存シート名と重複していないか確認する方法もあります。

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

If userInput = "" Then Exit Sub

If SheetExists(userInput) Then
MsgBox "シート「" & userInput & "」は既に存在します。"
Else
Worksheets.Add.Name = userInput
MsgBox "シート「" & userInput & "」を作成しました。"
End If
End Sub

5. まとめ

  • 同名シートがあると Worksheets.Add や Copy でエラーが出る
  • SheetExists で事前チェックするのが安全
  • 自動的に番号付きでユニークな名前を生成する方法が便利

コメント

タイトルとURLをコピーしました