Excel VBAを使用したファイル形式別のデータ整理方法

この記事では、Excel VBAを使用して、ファイル形式別(.xlsx, .pdfなど)でのデータ整理に関する詳細な方法を解説します。具体的なコードの例から、その背後にある詳細なロジック、そして応用例まで、実践的な内容を深堀しています。

目次

Excel VBAの基本

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

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

Excel VBAによるファイル形式別の整理の基本

Excel VBAを使用すると、指定したフォルダ内のファイルをその形式(拡張子)に基づいて整理することが可能です。ここでは、ファイルの拡張子を判別し、それに基づいて指定したフォルダに移動させる基本的なコードを紹介します。


Sub OrganizeFilesByFormat()
Dim FolderPath As String
Dim FileName As String
Dim FileExt As String
FolderPath = "C:\YourFolderPath\" ' 対象フォルダのパスを指定
FileName = Dir(FolderPath & "*.*")
Do While FileName <> ""
    FileExt = Right(FileName, Len(FileName) - InStrRev(FileName, "."))
    If Not FolderExists(FolderPath & FileExt) Then
        MkDir FolderPath & FileExt
    End If
    FileCopy FolderPath & FileName, FolderPath & FileExt & "\" & FileName
    Kill FolderPath & FileName
    FileName = Dir
Loop
End Sub
Function FolderExists(FolderPath As String) As Boolean
    FolderExists = (Dir(FolderPath, vbDirectory) <> "")
End Function

コードの解説

上記のVBAコードは以下の手順で動作します。

1. 対象のフォルダ内のすべてのファイルを取得します。
2. 各ファイルの拡張子を取得します。
3. 拡張子の名前を持つフォルダが存在しない場合、新しいフォルダを作成します。
4. ファイルをその拡張子名のフォルダに移動します。

補足事項

– このコードは、指定したフォルダ内のファイルを拡張子ごとに整理します。ファイルが多い場合、処理時間がかかる可能性があります。
– すでに同名のファイルが存在する場合、上書きされますので注意してください。

応用例

1. 特定の拡張子だけを移動する

特定のファイル形式だけを整理したい場合、以下のコードを使用できます。


Sub MoveOnlyXLSXFiles()
Dim FolderPath As String
Dim FileName As String
FolderPath = "C:\YourFolderPath\" ' 対象フォルダのパスを指定
FileName = Dir(FolderPath & "*.xlsx")
Do While FileName <> ""
    FileMove FolderPath & FileName, FolderPath & "XLSX" & "\" & FileName
    FileName = Dir
Loop
End Sub

2. ファイルの最終更新日時に基づいて整理

ファイルの最終更新日時に基づいて、年月のフォルダに分けて整理するコード例です。


Sub OrganizeByLastModifiedDate()
Dim FolderPath As String
Dim FileName As String
Dim LastModDate As String
FolderPath = "C:\YourFolderPath\" ' 対象フォルダのパスを指定
FileName = Dir(FolderPath & "*.*")
Do While FileName <> ""
    LastModDate = Format(FileDateTime(FolderPath & FileName), "YYYY-MM")
    If Not FolderExists(FolderPath & LastModDate) Then
        MkDir FolderPath & LastModDate
    End If
    FileMove FolderPath & FileName, FolderPath & LastModDate & "\" & FileName
    FileName = Dir
Loop
End Sub

3. ファイルサイズに基づいて整理

以下のコードは、ファイルのサイズに応じて「Large」、「Medium」、または「Small」というフォルダに整理する方法を示しています。


Sub OrganizeByFileSize()
Dim FolderPath As String
Dim FileName As String
Dim FileSizeCategory As String
FolderPath = "C:\YourFolderPath\" ' 対象フォルダのパスを指定
FileName = Dir(FolderPath & "*.*")
Do While FileName <> ""
    Select Case FileLen(FolderPath & FileName)
        Case Is > 10000000
            FileSizeCategory = "Large"
        Case 1000000 To 10000000
            FileSizeCategory = "Medium"
        Case Else
            FileSizeCategory = "Small"
    End Select
    If Not FolderExists(FolderPath & FileSizeCategory) Then
        MkDir FolderPath & FileSizeCategory
    End If
    FileMove FolderPath & FileName, FolderPath & FileSizeCategory & "\" & FileName
    FileName = Dir
Loop
End Sub

まとめ

Excel VBAを使用すると、多数のファイルを効率的に整理することが容易になります。上記の基本的なコードや応用例を参考に、自分のニーズに合わせてカスタマイズしてください。繁雑な作業を自動化することで、日常業務の効率を大幅に向上させることができます。

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

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

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

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

コメント

コメントする

目次