EXCEL VBAで業務効率化VBAを使った賢いファイル整理術!ファイルの自動整理とその拡張利用!(テクニック)

 

 

EXCEL VBAで業務効率化VBAを使った賢いファイル整理術!ファイルの自動整理とその拡張利用!(テクニック)

 

 

●はじめに

日常業務における時間節約と効率化のために、Excel VBAは非常に有力なツールです。業務効率化のカギは、整理と自動化にあります。今回は、ExcelのVBAを活用したファイル整理の自動化方法をご紹介します。このVBAコードは、指定されたフォルダ内のファイルの拡張子や最終更新日に基づいてサブフォルダに自動で分類します。事務処理でのファイル管理が煩雑になりがちな方や、日々のファイル書類整理に時間を取られている方にとって、このツールは大きな助けとなるでしょう。
実務においては、このプログラムを利用して、日付ごとに報告書や書類を整理することが可能です。例えば、月次報告書の整理、プロジェクト関連の文書の管理などに有効に活用できます。
は、VBAコードの全体的な説明から、具体的な使用例、さらにはコードのカスタマイズ方法まで、段階的にわかりやすく解説していきます。Excel VBAを使った業務効率化の一例として、ぜひご覧ください。これで、あなたのデスクトップも、フォルダもスッキリ整理されること間違いなしです!

●【EXCEL VBA フォルダ内の複数ファイルの一括リネームを効率化するについては、下記を参照して下さい】

●【Worksheet.Move メソッド (Excel)オブジェクト (Excel)、下記を参照して下さい】(Microsoft社 様)】
https://learn.microsoft.com/ja-jp/office/vba/api/excel.worksheet.move

 

 

 

EXCEL VBA書類整理の時間を削減!Excel VBAを使った簡単ファイル管理

 

 

●プログラム説明 (サンプル①)

今回のプログラムは、ユーザーによって選択されたフォルダ内の全ファイルを走査し、それぞれのファイルの拡張子に基づいて、適切なサブフォルダへ移動する機能を提供します。各ファイルの拡張子に対応するサブフォルダが存在しない場合、そのフォルダは新たに作成されます。

 

【プログラムの流れ】
1.ユーザーにフォルダ選択ダイアログを表示。
2.ユーザーがフォルダを選択した場合、そのフォルダのパスを取得。
3.FileSystemObject(FSO)を作成し、ファイル操作を行うためのオブジェクトとして利用。
4.選択されたフォルダ内の各ファイルに対してループ処理を実行。
5.各ファイルの拡張子を取得し、小文字に変換。
6.対応する拡張子のサブフォルダが存在しない場合、新しく作成。
7.各ファイルをその拡張子に対応するサブフォルダに移動。
8.全ファイルの処理が完了したら、メッセージボックスで完了を通知。

 

【プログラム実行条件・注意事項】
1.サブフォルダの命名はファイル拡張子に基づくため、異なる種類のファイルでも同じ拡張子を持つ場合は同じフォルダに整理されます。
2.ファイル名が重複する場合、エラーが発生する可能性があります。
3.このコードは、選択されたフォルダの直下にあるファイルのみを対象とし、サブフォルダ内のファイルは処理しません。
4.セキュリティ設定によっては、FileSystemObjectの使用が制限される可能性があります。

 

Sub MoveFilesBasedOnExtension()
    ' 変数宣言
    Dim FolderPath As String ' 選択されたフォルダのパスを保存するための変数
    Dim FileExtension As String ' ファイルの拡張子を保存するための変数
    Dim ExtensionFolder As String ' 拡張子に基づいたフォルダのパスを保存するための変数
    Dim FileName As String ' ファイル名を保存するための変数
    Dim FSO As Object ' FileSystemObjectのためのオブジェクト変数

    ' フォルダ選択ダイアログを表示
    With Application.FileDialog(msoFileDialogFolderPicker)
        If .Show = -1 Then ' フォルダが選択された場合
            FolderPath = .SelectedItems(1) ' 選択されたフォルダのパスをFolderPathに代入
        Else
            MsgBox "フォルダが選択されませんでした。", vbExclamation ' フォルダが選択されなかった場合のメッセージ
            Exit Sub ' サブプロシージャを終了
        End If
    End With

    Set FSO = CreateObject("Scripting.FileSystemObject") ' FileSystemObjectを初期化

    ' 選択されたフォルダ内のファイルをチェック
    Dim Folder As Object ' フォルダオブジェクトのための変数
    Set Folder = FSO.GetFolder(FolderPath) ' FolderPathのフォルダオブジェクトを取得

    Dim File As Object ' ファイルオブジェクトのための変数
    For Each File In Folder.Files ' フォルダ内の各ファイルに対して繰り返し処理
        FileExtension = LCase(FSO.GetExtensionName(File.Path)) ' ファイルの拡張子を小文字で取得
        If FileExtension <> "" Then ' 拡張子が空でない場合
            ' 拡張子ごとのフォルダを作成(存在しない場合のみ)
            ExtensionFolder = FolderPath & "\" & FileExtension ' 拡張子フォルダのパスを作成
            If Not FSO.FolderExists(ExtensionFolder) Then ' 拡張子フォルダが存在しない場合
                FSO.CreateFolder(ExtensionFolder) ' フォルダを作成
            End If

            ' ファイルを対応するフォルダに移動
            FileName = FSO.GetFileName(File.Path) ' ファイル名を取得
            FSO.MoveFile Source:=File.Path, Destination:=ExtensionFolder & "\" & FileName ' ファイルを移動
        End If
    Next File

    MsgBox "ファイルの整理が完了しました。", vbInformation ' 処理完了のメッセージ
End Sub

 

 

●実行前~実行後 ※プログラム実行後、選択されたフォルダ内のファイルがそれぞれの拡張子に基づいて分類され、対応する拡張子名のサブフォルダに移動されるため、元のフォルダは整理された状態になります。
(画面クリックして拡大)

 

 

 

VBAで時短!フォルダ内のファイルを最終更新日に基づいて整理するプログラム

 

 

●プログラム説明 (サンプル②)

このVBAスクリプトは、ユーザーが選択したフォルダ内のすべてのファイルをスキャンし、それぞれのファイルの最終更新日に基づいて、対応する年月のフォルダに移動します。例えば、ファイルの最終更新日が2023年4月であれば、そのファイルは「2023-04」という名前のフォルダに移動されます。

【プログラムの流れ】
1.ユーザーにフォルダ選択ダイアログを表示し、フォルダを選択させる。
2.選択されたフォルダのパスを取得する。
3.FileSystemObjectを使用して、選択されたフォルダ内のファイルを操作する。
4.フォルダ内の各ファイルに対して、以下の処理を行う:
・ファイルの最終更新日(年月)を取得する。
・対応する年月のフォルダが存在しない場合は、そのフォルダを作成する。
・ファイルをその年月のフォルダに移動する。
5.すべてのファイルの処理が完了したら、処理完了のメッセージを表示する。

 

【プログラム実行条件・注意事項】
1.フォルダ選択ダイアログがキャンセルされた場合、プログラムは何もせずに終了します。
2.ファイルの移動は元のファイルを削除し、新しい場所にコピーします。失敗するとファイルが失われる可能性があります。
3.ファイル移動中にエラーが発生した場合、エラーハンドリングは行われていません。
4.大量のファイルが存在する場合、プロセスに時間がかかることがあります。

 

 

'
'

Option Explicit

Sub MoveFilesByDate()
    ' 変数宣言
    Dim FolderPath As String ' 選択されたフォルダのパスを保存するための変数
    Dim DateFolder As String ' 日付に基づいたフォルダのパスを保存するための変数
    Dim FileName As String ' ファイル名を保存するための変数
    Dim FSO As Object ' FileSystemObject操作用のオブジェクト変数
    Dim LastModified As String ' ファイルの最終更新日時を保存するための変数

    ' フォルダ選択ダイアログを表示
    With Application.FileDialog(msoFileDialogFolderPicker)
        If .Show = -1 Then ' フォルダが選択された場合
            FolderPath = .SelectedItems(1) ' 選択されたフォルダのパスをFolderPathに代入
        Else
            MsgBox "フォルダが選択されませんでした。", vbExclamation ' フォルダが選択されなかった場合のメッセージ
            Exit Sub ' サブプロシージャを終了
        End If
    End With

    Set FSO = CreateObject("Scripting.FileSystemObject") ' FileSystemObjectを初期化

    Dim Folder As Object ' フォルダ操作用のオブジェクト変数
    Set Folder = FSO.GetFolder(FolderPath) ' FolderPathのフォルダオブジェクトを取得

    ' フォルダ内のファイルをチェックし、日付ごとに整理
    Dim File As Object ' ファイル操作用のオブジェクト変数
    For Each File In Folder.Files ' フォルダ内の各ファイルに対して繰り返し処理
        ' ファイルの最終更新日を取得(年月のみ)
        LastModified = Year(File.DateLastModified) & "-" & Right("0" & Month(File.DateLastModified), 2)

        ' 日付に基づいたフォルダを作成(存在しない場合のみ)
        DateFolder = FolderPath & "\" & LastModified ' 日付フォルダのパスを作成
        If Not FSO.FolderExists(DateFolder) Then ' 日付フォルダが存在しない場合
            FSO.CreateFolder (DateFolder) ' フォルダを作成
        End If

        ' ファイルを対応するフォルダに移動
        FileName = FSO.GetFileName(File.Path) ' ファイル名を取得
        FSO.MoveFile Source:=File.Path, Destination:=DateFolder & "\" & FileName ' ファイルを移動
    Next File

    MsgBox "ファイルの整理が完了しました。", vbInformation ' 処理完了のメッセージ
End Sub
'
'

 

 

●実行前~実行後 ※プログラム実行後、選択されたフォルダ内のファイルが、それぞれの最終更新日に基づいて生成された年月ごとのサブフォルダに移動され、整理されます。
(画面クリックして拡大)

 

 

 

最後まで、ご覧いただきまして誠に有難うございました。
また、VBAに関するテクニックや便利な手法などをこのサイトに掲載していきますので、定期的に参照していただけると幸いです。

 

AKIRA