この記事では、Excel VBAを使用して、バックアップ先の容量が一定値を超えた際に古いファイルを自動で削除する機能の実装方法を紹介します。具体的なコード例、その詳細な解説、および実際の応用例を交えて説明していきます。
Excel VBAの基本
Excel VBA(Visual Basic for Applications)は、Microsoft Excelに組み込まれたプログラミング言語です。これを用いると、単純作業の自動化だけでなく、高度なデータ分析やレポート作成も可能になります。
そもそも、どこにVBAコードを書いて、どう実行すれば良いのか分からない場合は、以下の記事をご参照ください。

基本的な自動削除機能の実装
### 自動削除機能とは
バックアップ先の容量が指定した容量を超えた場合、自動的に古いファイルから削除する機能のことを指します。この機能は、定期的なバックアップを取る際に、ディスク容量の不足を防ぐために役立ちます。
VBAコードの例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
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. ログファイルの生成
自動削除時に、どのファイルが削除されたのかログとして保存することで、後で確認することができます。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
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
の拡張子を持つバックアップファイルのみを対象にすることができます。
1 2 3 4 5 |
If Right(oldestFile, 4) = ".bak" Then Kill targetFolderPath & "\" & oldestFile End If |
3. 一定の期間が経過したファイルのみを削除
指定した日数以上古いファイルのみを削除することも可能です。
1 2 3 4 5 6 7 8 |
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講座が表示されます。
-
【初心者向け】パワークエリ入門:ETLツールを使ってエクセルデータを簡単に整形・統合しよう!(1/11)
-
【実践ガイド】パワークエリでデータ収集:Excel、CSV、PDF、Webデータを簡単に取り込む方法をマスターしよう!(2/11)
-
【総力特集】パワークエリで列操作をマスター:選択、変更、移動、削除、結合、分割の詳細解説&実践テクニック!(3/11)
-
【徹底解説】パワークエリで行操作をマスター!フィルター・保持・削除テクニックと練習用エクセルで実践学習(4/11)
-
パワークエリでデータクレンジング: 文字列結合、0埋め、テキスト関数をマスター(5/11)
-
パワークエリで四捨五入、切り捨て、切り上げをマスターする方法(6/11)
-
パワークエリで効率的なデータグループ化を実現する方法(7/11)
-
パワークエリで時間と日付の計算をマスター!便利な関数を使って効率アップ(8/11)
-
パワークエリで条件別集計をマスターする方法(9/11)
-
Excelパワークエリでクロス集計表とデータベース形式を瞬時に変換する方法(10/11)
-
Excelパワークエリ入門: 効率的なデータ整理をマスターしよう!(11/11)
パワーピボットの記事はありません。興味がある場合は、書籍で学んでみてください
コメント