Excel VBAを使って条件に応じたバックアップ処理を行う方法

Excel VBAを用いて、特定の条件下でのみバックアップを実行する方法について、この記事で詳しく解説します。具体的なコード例とその詳しい解説、さらに応用例を複数紹介することで、読者が実際の業務や日常での作業に生かせるように取り組んでいます。

目次

Excel VBAの基本

Excel VBA(Visual Basic for Applications)は、Microsoft Excelに組み込まれたプログラミング言語です。これを用いると、単純作業の自動化だけでなく、高度なデータ分析やレポート作成も可能になります。

そもそも、どこにVBAコードを書いて、どう実行すれば良いのか分からない場合は、以下の記事をご参照ください。

基本的なバックアップの処理コード


Sub BackupWorkbook()
    Dim backupPath As String
    backupPath = "C:\Backup\" & ThisWorkbook.Name
    If Weekday(Now()) = 2 Then '条件: 月曜日の場合のみ実行
        ThisWorkbook.SaveCopyAs backupPath
    End If
End Sub

コードの詳細解説

このコードは、現在開いているワークブックを特定の場所(この場合は”C:\Backup\”ディレクトリ)にバックアップとしてコピーします。しかし、条件として「今日が月曜日である場合のみ」バックアップを取るように設定されています。

補足事項

このコードはシンプルに作られているため、実際の業務で使用する際にはエラーハンドリングの追加や、バックアップ先のディレクトリが存在しない場合の処理など、さらなる機能の追加が必要となるかもしれません。

応用例

応用例1: バックアップファイル名に日付を付与する


Sub BackupWithDate()
    Dim backupPath As String
    backupPath = "C:\Backup\" & Format(Now(), "YYYYMMDD") & "_" & ThisWorkbook.Name
    If Weekday(Now()) = 2 Then
        ThisWorkbook.SaveCopyAs backupPath
    End If
End Sub

解説

このコードは、バックアップファイル名に現在の日付を付与します。これにより、いつのバックアップであるか一目でわかりやすくなります。

応用例2: バックアップディレクトリが存在しない場合にディレクトリを作成する


Sub BackupWithDirCheck()
    Dim backupPath As String, backupDir As String
    backupDir = "C:\Backup\"
    backupPath = backupDir & ThisWorkbook.Name
    If Not FolderExists(backupDir) Then MkDir backupDir
    If Weekday(Now()) = 2 Then
        ThisWorkbook.SaveCopyAs backupPath
    End If
End Sub
Function FolderExists(ByVal FolderPath As String) As Boolean
    FolderExists = Dir(FolderPath, vbDirectory) <> ""
End Function

解説

このコードは、指定したバックアップディレクトリが存在しない場合、新しくディレクトリを作成する機能を追加しています。

応用例3: 最後のバックアップから一定期間経過した場合のみバックアップを実行する


Sub BackupInterval()
    Dim backupPath As String
    Dim lastBackupDate As Date
    backupPath = "C:\Backup\" & ThisWorkbook.Name
    If FileExists(backupPath) Then
        lastBackupDate = FileDateTime(backupPath)
        If DateDiff("d", lastBackupDate, Now()) > 7 Then '一週間以上前の場合のみ実行
            ThisWorkbook.SaveCopyAs backupPath
        End If
    Else
        ThisWorkbook.SaveCopyAs backupPath
    End If
End Sub
Function FileExists(ByVal FilePath As String) As Boolean
    FileExists = Dir(FilePath) <> ""
End Function

解説

このコードでは、最後のバックアップから一週間以上経過している場合のみ、新たにバックアップを取るようにしています。

まとめ

Excel VBAを活用することで、特定の条件下でのみバックアップを実行するといった、柔軟なバックアップ処理を実現することができます。今回紹介したコードや応用例をベースに、自身のニーズに合わせてカスタマイズすることで、より効率的なバックアップ処理を構築することができます。

VBAも良いけどパワークエリも良い

VBAの解説をしてきましたが、VBAは正直煩雑でメンテナンス性が悪いです。最近はモダンExcelと呼ばれるパワークエリやパワーピボットへのシフトが進んできています。本サイトでもパワークエリの特集をしており、サンプルデータを含む全11回の学習コンテンツでパワークエリを習得することができます。

クリックするとパワークエリの全11講座が表示されます。

パワーピボットの記事はありません。興味がある場合は、書籍で学んでみてください

コメント

コメントする

目次