Excel VBAを活用した送信者別のファイル整理方法

Excel VBAは、Excel上での作業を効率化するための非常に強力なツールです。特に多くのファイルを扱う場合、Excel VBAを使って自動化することで、作業の効率を大幅に向上させることができます。この記事では、外部から受け取ったファイルを送信者別に自動で整理する方法を、具体的なコードとともに紹介します。

目次

Excel VBAの基本

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

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

Excel VBAを使ったファイル整理の基本

VBAでファイルを整理するには、以下の手順を踏む必要があります。

1. ファイルの一覧を取得する
2. 送信者ごとにフォルダを作成し、ファイルをそのフォルダに移動する

これを実現する基本的なコードは以下の通りです。


Sub OrganizeFilesBySender()
    Dim FolderPath As String
    Dim SenderName As String
    Dim FileName As String
    ' ファイルが保存されているフォルダのパスを指定
    FolderPath = "C:\YourFolderPath\"
    FileName = Dir(FolderPath & "*.*")
    Do While FileName <> ""
        ' 送信者名をファイル名から取得するロジックを設定
        SenderName = GetSenderFromFileName(FileName)
        
        ' 送信者名のフォルダを作成
        If Not FolderExists(FolderPath & SenderName) Then
            MkDir FolderPath & SenderName
        End If
        
        ' ファイルを送信者名のフォルダに移動
        Name FolderPath & FileName As FolderPath & SenderName & "\" & FileName
        FileName = Dir
    Loop
End Sub
Function GetSenderFromFileName(FileName As String) As String
    ' ファイル名から送信者名を取得するロジックを実装
    ' 例: [SenderName]_filename.xlsx の場合
    GetSenderFromFileName = Split(FileName, "_")(0)
End Function
Function FolderExists(ByVal FolderName As String) As Boolean
    On Error Resume Next
    FolderExists = (GetAttr(FolderName) And vbDirectory) = vbDirectory
    On Error GoTo 0
End Function

コードの詳細解説

OrganizeFilesBySender()関数

この関数は、指定したフォルダ内のファイルを送信者別に整理するためのメイン処理を行います。FolderPathには整理したいファイルが格納されているフォルダのパスを指定します。

GetSenderFromFileName()関数

この関数は、ファイル名から送信者名を取得します。今回の例では、ファイル名が「送信者名_filename.xlsx」という形式を持っていると仮定しています。この形式に基づき、送信者名を取得しています。

FolderExists()関数

指定したフォルダが存在するかどうかを確認する関数です。

応用例

1. 送信者名ごとのフォルダに日付フォルダを追加する

外部から受け取ったファイルを送信者別、さらに日付ごとに整理することで、過去のファイルも容易に管理できるようになります。


Sub OrganizeFilesBySenderAndDate()
    Dim FolderPath As String
    Dim SenderName As String
    Dim DateFolder As String
    Dim FileName As String
    FolderPath = "C:\YourFolderPath\"
    FileName = Dir(FolderPath & "*.*")
    Do While FileName <> ""
        SenderName = GetSenderFromFileName(FileName)
        DateFolder = Format(Date, "yyyy-mm-dd")
        If Not FolderExists(FolderPath & SenderName & "\" & DateFolder) Then
            MkDir FolderPath & SenderName & "\" & DateFolder
        End If
        Name FolderPath & FileName As FolderPath & SenderName & "\" & DateFolder & "\" & FileName
        FileName = Dir
    Loop
End Sub

2. 拡張子別にファイルを整理する

送信者名だけでなく、拡張子ごとにもファイルを整理することができます。


Sub OrganizeFilesByExtension()
    Dim FolderPath As String
    Dim Extension As String
    Dim FileName As String
    FolderPath = "C:\YourFolderPath\"
    FileName = Dir(FolderPath & "*.*")
    Do While FileName <> ""
        Extension = GetFileExtension(FileName)
        If Not FolderExists(FolderPath & Extension) Then
            MkDir FolderPath & Extension
        End If
        Name FolderPath & FileName As FolderPath & Extension & "\" & FileName
        FileName = Dir
    Loop
End Sub
Function GetFileExtension(FileName As String) As String
    GetFileExtension = Split(FileName, ".")(1)
End Function

3. ファイルの作成日時を基に古いファイルをアーカイブする

一定期間を超えたファイルを別のフォルダに自動で移動させ、アーカイブとして保存することができます。


Sub ArchiveOldFiles()
    Dim FolderPath As String
    Dim ArchivePath As String
    Dim FileName As String
    Dim FileDate As Date
    Dim ThresholdDate As
 Date
    FolderPath = "C:\YourFolderPath\"
    ArchivePath = "C:\YourArchivePath\"
    ThresholdDate = Date - 30 ' 30日前
    FileName = Dir(FolderPath & "*.*")
    Do While FileName <> ""
        FileDate = FileDateTime(FolderPath & FileName)
        If FileDate < ThresholdDate Then
            If Not FolderExists(ArchivePath) Then
                MkDir ArchivePath
            End If
            Name FolderPath & FileName As ArchivePath & FileName
        End If
        FileName = Dir
    Loop
End Sub

まとめ

Excel VBAを使用することで、多くのファイルを効率的に整理する作業を自動化することができます。この記事で紹介した方法を参考に、実際の業務に適用してみてください。自動化により、作業時間の短縮やミスの削減など、多くのメリットを享受できるでしょう。

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

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

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

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

コメント

コメントする

目次