【VBA】シート削除やコピーでのデータ損失防止

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 を使うと削除確認をスキップできるが、設定を戻すのを忘れない
  • コピー時は重複しないユニークな名前を付ける
  • 大事なデータは削除前に別ブックにバックアップしておく

コメント

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