Excel VBAでバックアップ先の容量が超えた場合の自動削除機能を実装する方法

この記事では、Excel VBAを使用して、バックアップ先の容量が一定値を超えた際に古いファイルを自動で削除する機能の実装方法を紹介します。具体的なコード例、その詳細な解説、および実際の応用例を交えて説明していきます。

目次

Excel VBAの基本

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

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

基本的な自動削除機能の実装

### 自動削除機能とは
バックアップ先の容量が指定した容量を超えた場合、自動的に古いファイルから削除する機能のことを指します。この機能は、定期的なバックアップを取る際に、ディスク容量の不足を防ぐために役立ちます。

VBAコードの例


Sub AutoDeleteOldFiles()
    Dim targetFolderPath As String
    Dim file As String
    Dim oldestFile As String
    Dim oldestDate As Date
    Dim totalSize As Double
    Dim maxSize As Double
    '設定
    targetFolderPath = "C:\path\to\backup" '変更してください
    maxSize = 1073741824 ' 1GBを上限とする例(容量はバイト単位で指定)
    'フォルダの総サイズ計算
    file = Dir(targetFolderPath & "\*.*")
    Do While file <> ""
        totalSize = totalSize + FileLen(targetFolderPath & "\" & file)
        file = Dir()
    Loop
    '指定した容量を超える場合、古いファイルから削除
    While totalSize > maxSize
        oldestDate = Now
        file = Dir(targetFolderPath & "\*.*")
        Do While file <> ""
            If FileDateTime(targetFolderPath & "\" & file) < oldestDate Then
                oldestDate = FileDateTime(targetFolderPath & "\" & file)
                oldestFile = file
            End If
            file = Dir()
        Loop
        Kill targetFolderPath & "\" & oldestFile
        totalSize = totalSize - FileLen(targetFolderPath & "\" & oldestFile)
    Wend
End Sub

コードの詳細解説

1. `targetFolderPath` には、監視したいバックアップフォルダのパスを指定します。
2. `maxSize` は、フォルダの最大容量をバイト単位で指定します。この例では1GBとしています。
3. ループを使用して、指定したフォルダ内の全ファイルのサイズを合計しています。
4. もし指定した容量を超えていれば、最も古い日時のファイルを特定し、それを削除しています。
5. ファイルを削除後、再度容量を計算し、まだ指定サイズを超えている場合は、さらに古いファイルの削除を繰り返します。

応用例

1. ログファイルの生成

自動削除時に、どのファイルが削除されたのかログとして保存することで、後で確認することができます。


Sub WriteLog(logMessage As String)
    Dim logFilePath As String
    Dim fileNum As Integer

    logFilePath = "C:\path\to\log.txt" '変更してください
    fileNum = FreeFile

    Open logFilePath For Append As fileNum
    Print #fileNum, logMessage
    Close fileNum
End Sub

2. 特定の拡張子のファイルのみを削除

例えば、`.bak` の拡張子を持つバックアップファイルのみを対象にすることができます。


If Right(oldestFile, 4) = ".bak" Then
    Kill targetFolderPath & "\" & oldestFile
End If

3. 一定の期間が経過したファイルのみを削除

指定した日数以上古いファイルのみを削除することも可能です。


Dim daysOld As Integer
daysOld = 30 ' 30日以上古いファイルを削除

If DateDiff("d", FileDateTime(targetFolderPath & "\" & oldestFile), Now) > daysOld Then
    Kill targetFolderPath & "\" & oldestFile
End If

まとめ

Excel VBAを使用して、バックアップ先の容量を監視し、一定の容量を超えた際に古いファイルから自動的に削除する機能の実装方法を学びました。これにより、ディスクの容量不足を未然に防ぐことができます。様々な応用例を取り入れることで、より柔軟な運用が可能となります。

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

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

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

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

コメント

コメントする

目次