Excel VBAを使用して古い日付のファイルをアーカイブする方法

Microsoft ExcelのVBAを使用して、特定の条件を満たすファイルを自動的にアーカイブフォルダに移動する方法を紹介します。この記事では、古い日付のファイルを対象として、詳しいコードの作成からその解説、そして実践的な応用例までを説明します。

目次

Excel VBAの基本

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

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

基本的なアーカイブ処理のコード


Sub ArchiveOldFiles()
    Dim SourceFolder As String, ArchiveFolder As String
    Dim FileItem As String
    Dim LastModified As Date
    ' フォルダのパスを設定
    SourceFolder = "C:\Your\Source\Folder\Path\"
    ArchiveFolder = "C:\Your\Archive\Folder\Path\"
    FileItem = Dir(SourceFolder & "*.*")
    Do While FileItem <> ""
        LastModified = FileDateTime(SourceFolder & FileItem)
        ' 30日以上前のファイルを移動
        If DateDiff("d", LastModified, Now) > 30 Then
            Name SourceFolder & FileItem As ArchiveFolder & FileItem
        End If
        FileItem = Dir
    Loop
End Sub

コードの詳細解説

上記のコードは、指定されたソースフォルダ内のすべてのファイルをチェックし、最終変更日が30日以上前のものをアーカイブフォルダに移動します。

– `Dir` 関数: フォルダ内のファイルのリストを取得します。
– `FileDateTime` 関数: ファイルの最終変更日を取得します。
– `DateDiff` 関数: 2つの日付間の差を計算します。
– `Name` ステートメント: ファイルやフォルダの名前を変更したり、移動したりするために使用します。

応用例

応用例1:拡張子ごとにアーカイブ


Sub ArchiveByExtension()
    Dim SourceFolder As String, ArchiveFolder As String
    Dim FileItem As String
    Dim LastModified As Date
    SourceFolder = "C:\Your\Source\Folder\Path\"
    ArchiveFolder = "C:\Your\Archive\Folder\Path\"
    FileItem = Dir(SourceFolder & "*.xls*")
    Do While FileItem <> ""
        LastModified = FileDateTime(SourceFolder & FileItem)
        If DateDiff("d", LastModified, Now) > 30 Then
            Name SourceFolder & FileItem As ArchiveFolder & FileItem
        End If
        FileItem = Dir
    Loop
End Sub

このコードは、指定したフォルダ内の`.xls`または`.xlsx`の拡張子を持つExcelファイルのみをアーカイブします。

応用例2:サイズが大きいファイルをアーカイブ


Sub ArchiveLargeFiles()
    Dim SourceFolder As String, ArchiveFolder As String
    Dim FileItem As String
    Dim FileSize As Long
    SourceFolder = "C:\Your\Source\Folder\Path\"
    ArchiveFolder = "C:\Your\Archive\Folder\Path\"
    FileItem = Dir(SourceFolder & "*.*")
    Do While FileItem <> ""
        FileSize = FileLen(SourceFolder & FileItem)
        ' 10MB以上のファイルを移動
        If FileSize > 10 * 1024 * 1024 Then
            Name SourceFolder & FileItem As ArchiveFolder & FileItem
        End If
        FileItem = Dir
    Loop
End Sub

このコードは、指定したフォルダ内のサイズが10MB以上のファイルのみをアーカイブします。

応用例3:特定のフォルダのみを対象にする


Sub ArchiveSpecificFolder()
    Dim SourceFolder As String, ArchiveFolder As String
    Dim SubFolder As String
    Dim FileItem As String
    Dim LastModified As Date
    SourceFolder = "C:\Your\Source\Folder\Path\"
    SubFolder = "SpecificSubFolder\"
    ArchiveFolder = "C:\Your\Archive\Folder\Path\"
    FileItem = Dir(SourceFolder & SubFolder & "*.*")
    Do While FileItem <> ""
        LastModified = FileDateTime(SourceFolder & SubFolder & FileItem)
        If DateDiff("d", LastModified, Now) > 30 Then
            Name SourceFolder & SubFolder & FileItem As ArchiveFolder & FileItem
        End If
        FileItem = Dir
    Loop
End Sub

このコードは、指定したソースフォルダ内の特定のサブフォルダのみを対象に、古いファイルをアーカイブします。

まとめ

Excel VBAを使用することで、特定の条件を満たすファイルを自動的にアーカイブフォルダに移動する処理を効率的に行うことができます。この記事で紹介した基本的なコードや応用例を参考に、自身のニーズに合わせてカスタマイズしてください。

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

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

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

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

コメント

コメントする

目次