Excel VBAを使ったファイルの作成者別整理方法

Excel VBAを利用して、ファイルの作成者に基づく整理を行う方法を解説します。具体的には、特定のフォルダ内にあるファイルを作成者ごとに新しいフォルダに移動させるコードと、その解説を中心に紹介します。また、この処理の応用例として、さまざまな場面での使用方法を3つ提案します。

目次

Excel VBAの基本

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

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

ファイルを作成者別に整理する基本のコード


Sub OrganizeFilesByAuthor()
    Dim objFSO As Object
    Dim SourceFolder As Object
    Dim FileItem As Object
    Dim DestFolder As String
    Dim Author As String

    ' 初期設定
    Set objFSO = CreateObject("Scripting.FileSystemObject")
    Set SourceFolder = objFSO.GetFolder("C:\path_to_your_folder") '対象フォルダのパス

    ' フォルダ内の全ファイルを確認
    For Each FileItem In SourceFolder.Files
        Author = FileItem.Author 'ファイルの作成者を取得

        ' 作成者名を基にフォルダを作成
        DestFolder = SourceFolder & "\" & Author
        If Not objFSO.FolderExists(DestFolder) Then
            objFSO.CreateFolder DestFolder
        End If

        ' ファイルを作成者名のフォルダに移動
        FileItem.Move DestFolder & "\" & FileItem.Name
    Next

    ' オブジェクトをクリア
    Set objFSO = Nothing
    Set SourceFolder = Nothing
End Sub

コードの詳細解説

このコードは、指定したフォルダ内のファイルを作成者ごとに別々のフォルダに整理するものです。

– `objFSO`は、ファイルやフォルダの操作を行うためのオブジェクトです。
– `SourceFolder`は、整理の対象となるフォルダを示すオブジェクトです。
– フォルダ内の各ファイルに対して、作成者情報を取得し、その名前で新しいフォルダを作成します。
– すでに作成者名のフォルダが存在する場合は、新しいフォルダを作成せず、そのフォルダにファイルを移動します。

応用例

1. ファイルの更新日時で整理


Sub OrganizeFilesByDate()
    ' ... (上部は基本コードと同じ)

    For Each FileItem In SourceFolder.Files
        UpdateDate = Format(FileItem.DateLastModified, "yyyy-mm-dd")

        DestFolder = SourceFolder & "\" & UpdateDate
        If Not objFSO.FolderExists(DestFolder) Then
            objFSO.CreateFolder DestFolder
        End If

        FileItem.Move DestFolder & "\" & FileItem.Name
    Next

    ' ... (下部は基本コードと同じ)
End Sub

この応用例では、ファイルの更新日時を基にフォルダを作成し、それに応じてファイルを移動します。

2. ファイルの拡張子で整理


Sub OrganizeFilesByExtension()
    ' ... (上部は基本コードと同じ)

    For Each FileItem In SourceFolder.Files
        FileExtension = objFSO.GetExtensionName(FileItem.Name)

        DestFolder = SourceFolder & "\" & FileExtension
        If Not objFSO.FolderExists(DestFolder) Then
            objFSO.CreateFolder DestFolder
        End If

        FileItem.Move DestFolder & "\" & FileItem.Name
    Next

    ' ... (下部は基本コードと同じ)
End Sub

この応用例では、ファイルの拡張子(.xls, .docなど)を基にフォルダを作成し、それに応じてファイルを移動します。

3. ファイルサイズで整理


Sub OrganizeFilesBySize()
    ' ... (上部は基本コードと同じ)
    For Each FileItem In SourceFolder.Files
        If FileItem.Size < 1048576 Then
            SizeCategory = "Small"
        ElseIf FileItem.Size < 1073741824 Then
            SizeCategory = "Medium"
        Else
            SizeCategory = "Large"
        End If
        DestFolder = SourceFolder & "\" & SizeCategory
        If Not objFSO.FolderExists(DestFolder) Then
            objFSO.CreateFolder DestFolder
        End If
        FileItem.Move DestFolder & "\" & FileItem.Name
    Next
    ' ... (下部は基本コードと同じ)
End Sub

この応用例では、ファイルのサイズを基に(例:Small, Medium, Large)、フォルダを作成し、それに応じてファイルを移動します。

まとめ

Excel VBAを使用して、ファイルを特定の条件(作成者、更新日時、拡張子、ファイルサイズなど)に基づいて整理する方法を紹介しました。これらの方法は、大量のファイルを効率的に整理する際に非常に便利です。自分のニーズに合わせて、コードをカスタマイズして利用してみてください。

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

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

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

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

コメント

コメントする

目次