Excelのシートを追加や削除もVBAでは可能になります。
VBAでワークシートの追加や削除、コピー、移動などの操作を行う場合は、Worksheetオブジェクトを使います。
シートの追加方法
最もシンプルなシートの追加
新しいシートを現在のブックに追加する基本的な方法です。
Sub AddNewSheet()
Worksheets.Add
End Sub
「Worksheets.Add」これは新しいシートを追加する命令です。
シートに名前を付けて追加
新しいシートを追加し、そのシートに名前を付ける方法です。
Sub AddNewSheetWithName()
Dim newSheet As Worksheet
Set newSheet = Worksheets.Add
newSheet.Name = "MyNewSheet"
End Sub
「newSheet.Name = “MyNewSheet”」は 新しいシートの名前を”MyNewSheet”に設定します。名前は自由に変更できます。
特定の位置にシートを追加
新しいシートを特定の位置(例えば、最後に追加)に挿入する方法です。
Sub AddSheetAtEnd()
Worksheets.Add(After:=Worksheets(Worksheets.Count)).Name = "LastSheet"
End Sub
このコードを実行するとWorksheets.Addが新しいシートが現在のブックの一番前に追加されます。そして次にAfterプロパティでシートを特定の位置に追加します。Worksheets.Countでシート全部をカウントしその最後にシートがきます。
プロパティ | 詳細 |
---|---|
Before | 指定したシートの前に、新しい シートを追加。 |
After | 指定したシートの後に、新しいシートを追加。 |
シートの削除方法
Excel VBAを使ってシートを削除する方法について説明します。
シートを削除する基本的なコード
Sub DeleteSheet()
Worksheets("Sheet1").Delete
End Sub
「Worksheets(“Sheet1”).Delete」 これは名前がSheet1のシートを削除する命令です。Sheet1の部分は削除したいシートの名前に置き換えてください。
確認メッセージを抑制してシートを削除
マクロを組み込んでシートの削除をするときに確認メッセージが表示されると処理が途中で止まってしまいます。シートを削除する際に表示される確認メッセージを表示しないようにするには、以下のようにコードを追加します。
Sub DeleteSheetWithoutPrompt()
Application.DisplayAlerts = False
Worksheets("Sheet1").Delete
Application.DisplayAlerts = True
End Sub
「Application.DisplayAlerts = False」 確認メッセージを表示しないように設定します。
プロパティ | 詳細 |
---|---|
Application.DisplayAlerts = False | 確認メッセージを表示しない |
Application.DisplayAlerts = True | 確認メッセージを表示 |
削除するシートが存在しない場合
削除するシートが存在しない場合にエラーが発生します。エラー処理を加えることで、指定したシートが存在しない場合でも、スムーズに処理を続けることができます。
エラーハンドリングを使って、削除するシートが存在しない場合にエラーをキャッチし、適切なメッセージを表示する方法です。
Sub DeleteSheetIfExists()
Dim sheetName As String
sheetName = "Sheet1" ' 削除したいシート名を指定
On Error Resume Next ' エラーハンドリング開始
Application.DisplayAlerts = False ' 確認メッセージを表示しない
Worksheets(sheetName).Delete
Application.DisplayAlerts = True ' 確認メッセージを再度有効にする
If Err.Number <> 0 Then
MsgBox "シート '" & sheetName & "' は存在しません。", vbExclamation
Else
MsgBox "シート '" & sheetName & "' が削除されました。", vbInformation
End If
End Sub
エラーハンドリングを使わない方法もあります。
シートの存在を確認してから削除する方法
シートの存在を確認し、存在する場合にのみ削除を実行する方法です。
Sub DeleteSheetIfExists()
Dim sheetName As String
sheetName = "Sheet1" ' 削除したいシート名を指定
If SheetExists(sheetName) Then
Application.DisplayAlerts = False ' 確認メッセージを表示しない
Worksheets(sheetName).Delete ' シートを削除
Application.DisplayAlerts = True ' 確認メッセージを再度有効にする
MsgBox "シート '" & sheetName & "' が削除されました。", vbInformation
Else
MsgBox "シート '" & sheetName & "' は存在しません。", vbExclamation
End If
End Sub
Function SheetExists(sheetName As String) As Boolean
Dim ws As Worksheet
SheetExists = False
For Each ws In Worksheets
If ws.Name = sheetName Then
SheetExists = True
Exit Function
End If
Next ws
End Function
「Function SheetExists」 シートの存在を確認する関数を定義します。
「If SheetExists(sheetName) Then」 シートの存在を確認し、存在する場合に削除を実行します。
シートのコピー方法
シートのコピーは、新しいシートとしてブック内に追加することができます。
シートをコピーする基本的なコード
Sub CopySheet()
Worksheets("Sheet1").Copy After:=Worksheets(Worksheets.Count)
End Sub
「Worksheets(“Sheet1”).Copy After:=Worksheets(Worksheets.Count)」 これはSheet1という名前のシートをコピーし、そのコピーをブックの最後に追加する命令です。
Sheet1の部分はコピーしたいシートの名前に置き換えてください。
注意
コピー元の名前が存在しないとエラーになります。
コピーしたシートに名前を付ける
コピー先のシート名を任意につけたい場合があります。「newSheet.Name = “CopiedSheet”」 はコピーされたシートの名前を設定します。名前は自由に変更できます。
Sub CopySheetWithName()
Dim newSheet As Worksheet
Worksheets("Sheet1").Copy After:=Worksheets(Worksheets.Count)
Set newSheet = Worksheets(Worksheets.Count) ' コピーされたシートを取得
newSheet.Name = "CopiedSheet"
End Sub
シートをコピーし、重複しない名前を付けるコード
コピー先に同じ名称のシートが存在する場合に、エラーが発生しないように対処する方法
Sub CopySheetWithUniqueName()
Dim newSheet As Worksheet
Dim baseName As String
Dim newName As String
Dim i As Integer
baseName = "Sheet1" ' コピー元のシート名を指定
newName = baseName & " - Copy"
i = 1
' シート名が重複しない名前を生成
Do While SheetExists(newName)
newName = baseName & " - Copy (" & i & ")"
i = i + 1
Loop
' シートをコピーし、新しい名前を設定
Worksheets(baseName).Copy After:=Worksheets(Worksheets.Count)
Set newSheet = Worksheets(Worksheets.Count)
newSheet.Name = newName
End Sub
Function SheetExists(sheetName As String) As Boolean
Dim ws As Worksheet
SheetExists = False
For Each ws In Worksheets
If ws.Name = sheetName Then
SheetExists = True
Exit Function
End If
Next ws
End Function
「Function SheetExists」はシート名の存在を確認する関数です。
Do While SheetExists(newName): SheetExists関数を使ってシート名の存在を確認します。重複する場合は名前を変更します。
「newName = baseName & ” – Copy (” & i & “)”」は 重複する場合、新しい名前を生成します(例:Sheet1 – Copy (1))。
これで、コピー先に同じ名前のシートが存在する場合に、エラーが発生しないように対処する方法です。