VBAを使ってシートを削除・コピーする際、誤った操作で大事なデータを失ってしまうことがあります。
特に、シート削除は一度実行すると元に戻すことができないため、事前の対策が重要です。
本記事では、シート削除やコピーでデータ損失を防ぐための注意点とサンプルコードを紹介します。
1. シート削除前の確認メッセージ
通常、VBAで Worksheets("Sheet1").Delete
を実行すると、確認メッセージが表示されます。
ただし Application.DisplayAlerts = False
を設定するとこの確認がスキップされるため、慎重な制御が必要です。
安全な削除例:
Sub SafeDeleteSheet()
Dim sheetName As String
sheetName = "Data"
If SheetExists(sheetName) Then
If MsgBox("シート「" & sheetName & "」を削除しますか?", vbYesNo + vbQuestion) = vbYes Then
Application.DisplayAlerts = False '確認メッセージを非表示
Worksheets(sheetName).Delete
Application.DisplayAlerts = True '設定を元に戻す
End If
Else
MsgBox "シート「" & sheetName & "」は存在しません。"
End If
End Sub
Function SheetExists(ByVal sheetName As String) As Boolean
On Error Resume Next
SheetExists = Not Worksheets(sheetName) Is Nothing
On Error GoTo 0
End Function
ポイントApplication.DisplayAlerts
の設定を削除後に必ず True
に戻すこと。戻さないと、他の削除操作で確認メッセージが出なくなり、誤削除の原因になります。
2. シートコピー時の名前重複防止
シートをコピーする際、同名シートがあるとエラーが発生します。これを防ぐには、コピー後にユニークな名前を自動付与する方法が便利です。
例:シート名に日付や番号を追加
Sub CopySheetWithUniqueName()
Dim newName As String
Dim baseName As String
Dim i As Long
baseName = "Data"
newName = baseName
i = 1
Do While SheetExists(newName)
newName = baseName & "_" & i
i = i + 1
Loop
Worksheets(baseName).Copy After:=Worksheets(Worksheets.Count)
ActiveSheet.Name = newName
End Sub
3. 削除前にバックアップを取る
削除予定のシートを事前に別ブックへコピーしてバックアップしておくことで、データ損失を防げます。
Sub BackupAndDeleteSheet()
Dim targetSheet As Worksheet
Dim backupBook As Workbook
Dim sheetName As String
sheetName = "Data"
If SheetExists(sheetName) Then
Set targetSheet = Worksheets(sheetName)
'バックアップ用ブック作成
Set backupBook = Workbooks.Add
targetSheet.Copy Before:=backupBook.Sheets(1)
backupBook.SaveAs ThisWorkbook.Path & "\Backup_" & sheetName & ".xlsx"
backupBook.Close
'元シート削除
Application.DisplayAlerts = False
targetSheet.Delete
Application.DisplayAlerts = True
MsgBox "シート「" & sheetName & "」を削除し、バックアップを作成しました。"
Else
MsgBox "シート「" & sheetName & "」は存在しません。"
End If
End Sub
4. まとめ
Application.DisplayAlerts
を使うと削除確認をスキップできるが、設定を戻すのを忘れない- コピー時は重複しないユニークな名前を付ける
- 大事なデータは削除前に別ブックにバックアップしておく
コメント