EXCEL VBA フォルダ内の複数ファイルの一括リネームを効率化する。大量ファイルの一括リネームをスムーズに実行しよう!電子帳簿保存法に活用(テクニック)

 

EXCEL VBA フォルダ内の複数ファイルの一括リネームを効率化する。大量ファイルの一括リネームをスムーズに実行しよう!電子帳簿保存法に活用(テクニック)

 

 

●はじめに

日常業務における時間節約と効率化のために、Excel VBAは非常に有力なツールです。特に、ファイル名の一括変更が頻繁に必要な場合、VBAコードの活用が大きな助けになります。本記事では、Excel VBAを使用して、フォルダ内のファイル名を一括で変更する方法を初心者にも理解しやすいように段階的に説明します。この技術をマスターすることで、作業の自動化と時間の節約が可能になります。
さらに、この記事は「電子帳簿保存法」にも焦点を当てています。法的要件に対応したファイル名を自動生成するVBAコードを紹介し、取引年月日、取引金額、取引先名を含むファイル名の設定方法を詳しく解説します。このコードを利用することで、税務調査等の際に役立つ、効率的なデータ管理と適切なファイルの保存が実現できます。これらのVBAコードの詳細な使い方や設定手順を共有し、読者に実用的な情報を提供します。初心者から上級者まで、Excel VBAの強力な機能を日々の作業に活かして、業務効率を飛躍的に向上させましょう。

●【EXCEL VBA ファイル名の変更・ファイルの一括変更・ファイルの指定変更(ファイルの操作)については、下記を参照して下さい】

●【EXCEL VBAフォルダー内のファイル名をシートに一覧表示(サブフォルダー含める:再起呼び出し)については、下記を参照して下さい】

●【Nameステートメント (Excel)、下記を参照して下さい】(Microsoft社 様)】
https://learn.microsoft.com/ja-jp/office/vba/language/reference/user-interface-help/name-statement

 

 

 

 

Excel VBAを使った日々の作業の効率化と電子帳簿保存法に対応するファイル名自動生成方法

 

 

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

今回説明するプログラムは、指定したフォルダー内にあるファイル名を読み込み一覧表示させて、指定したファイル名にリネームするプログラムです。
なお、今回の記事では、日々のファイル管理作業の効率化に焦点を当て、Excel VBAを用いたファイル名の自動生成技術を紹介します。特に、「電子帳簿保存法」に準拠したファイル名付けを自動化するVBAコードの実装について詳しく説明します。この記事は、ファイル名の一括変更を必要とする業務をスマートに処理する方法を提供し、初心者から上級者までが容易に理解できるように構成されています。
具体的な処理内容としては、
フォルダ内のファイル名を取得し、Excelシートに表示するためのVBAサブルーチンRenameFiles01は、ファイルダイアログを使用してフォルダパスを取得し、ファイル名をExcelに一覧表示します。次に、ファイル名の変換処理を行うRenameFiles02サブルーチンは、ファイル名を「電子帳簿保存法」の要件に準拠する形式に変更する手順を説明します。このサブルーチンでは、取引年月日、取引金額、取引先名を組み合わせたファイル名を生成し、効率的なファイル管理を実現します。

さらに、VBAコードの各行の意味と機能を詳細に解説し、コードの実行方法やエラーハンドリングについても触れます。

電子帳票法のファイル名付けルールとは、電子帳簿保存法に基づいて保存する電子データのファイル名を決めるためのルールのことです。
このルールは、電子帳簿保存法の保存要件のうち、「検索機能の確保」の要件を満たすために定められています。
電子帳簿保存法のファイル名付けルールは、以下のとおりです。

①ファイル名は、取引年月日、取引金額、取引先名の3つの項目を含める。
③ファイル名は、半角英数字で記述する。
③ファイル名は、256文字以内に収める。

このルールを満たすことで、以下のメリットがあります。

①検索機能を利用して、目的の電子データを簡単に検索できる。
②税務調査等において、電子データが適切に保存されていることを証明できる。
③具体的なファイル名の例としては、以下のようなものが挙げられます。

例)20230308_100000_株式会社ABC
このファイル名は、取引年月日が2023年3月8日、取引金額が100,000円、取引先名が株式会社ABCであることを示しています。

また、ファイル名を作成するためのツールやテンプレートを利用することで、ファイル名付けルールを遵守したファイル名を簡単に作成することができます。なお、電子帳簿保存法のファイル名付けルールは、あくまでも最低限のルールです。より詳細なルールを定める場合には、自社の業務内容やニーズに合わせて、適宜ルールを追加したり、変更したりすることも検討しましょう。

【ファイル名では利用できない記号一覧】

 

【プログラムの流れ】

RenameFiles01:
1.フォルダ選択ダイアログを表示。
2.選択されたフォルダのファイルをループで取得。
3.各ファイルのフルパスとファイル名をExcelシートに記録。

RenameFiles02:
1.Excelシートの行をループ処理。
2.各行のファイルパス、新しい名前の要素を取得。
3.新しいファイル名を生成。
4.ファイル名を変更。

【プログラム実行条件・注意事項】
・ファイル名変更前にバックアップを取ることを推奨。
・ファイルパスの長さは255文字以下に制限されるため、長すぎるパスはエラーを引き起こす可能性がある。
・フォルダ内のファイルが多い場合、処理に時間がかかることがある。
・Excelのセルに表示されたファイル名を変更すると、その名前でファイル名が変更されるので注意。
・実行前にマクロの設定を確認し、必要な許可を与える。


★【サンプルプログラム】

下記のリンク先よりサンプルプログラムをダウンロードする事ができます。
● electronic_form_storage_method(サンプルプログラム)

 

'
'
Option Explicit  ' 変数を明示的に宣言する必要があることを示す

Dim ws As Worksheet  ' ワークシートオブジェクト
Dim newRow, LastLow As Integer  ' newRowは新しい行、LastLowは最終行を示す
Dim folderPath As String  ' フォルダのパス

Sub RenameFiles01()  ' ファイル名の取得用サブルーチン
    Dim fd As FileDialog  ' ファイルダイアログオブジェクト
    Dim fileName As String  ' ファイル名を格納する変数
    Set ws = ThisWorkbook.Sheets("Sheet1")  ' "Sheet1"を作業シートとして設定
    newRow = 2  ' 新しい行を2行目から開始
    LastLow = ws.Cells(ws.Rows.Count, "B").End(xlUp).Row  ' B列の最終行を取得

    ' フォルダ選択ダイアログの設定
    Set fd = Application.FileDialog(msoFileDialogFolderPicker)
    If fd.Show = -1 Then  ' ダイアログが正常に表示された場合
        ws.Range("A2:E" & LastLow).ClearContents  ' A2:Eのセルをクリア
        
        folderPath = fd.SelectedItems(1)  ' 選択されたフォルダパスを取得
        fileName = Dir(folderPath & "\*.*")  ' フォルダ内の最初のファイル名を取得

        ' フォルダ内のファイル名とフルパスをExcelシートに表示
        Do While fileName <> ""
            ws.Cells(newRow, 1).Value = folderPath & "\" & fileName  ' フルパスをA列に
            ws.Cells(newRow, 2).Value = fileName  ' ファイル名をB列に
            fileName = Dir  ' 次のファイル名を取得
            newRow = newRow + 1  ' 行番号をインクリメント
        Loop
    End If
End Sub
'
'

Sub RenameFiles02()  ' ファイル名の変換用サブルーチン
    Dim i As Integer  ' ループカウンタ
    LastLow = ws.Cells(ws.Rows.Count, 2).End(xlUp).Row  ' B列の最終行を再計算
    Set ws = ThisWorkbook.Sheets("Sheet1")  ' "Sheet1"を再度設定
    For i = 2 To LastLow  ' 2行目から最終行までループ
        ' 3, 4, 5列が空でない場合に処理を実行
        If Not IsEmpty(ws.Cells(i, 3).Value) And Not IsEmpty(ws.Cells(i, 4).Value) And Not IsEmpty(ws.Cells(i, 5).Value) Then
            Dim oldFilePath As String  ' 旧ファイルパス
            Dim newFilePath As String  ' 新ファイルパス
            Dim fileExtension As String  ' ファイル拡張子
            Dim lastDot As Integer  ' 最後のドットの位置
            Dim lastBackslash As Integer  ' 最後のバックスラッシュの位置

            oldFilePath = ws.Cells(i, 1).Value  ' A列から旧ファイルパスを取得
            lastBackslash = InStrRev(oldFilePath, "\")  ' 最後のバックスラッシュの位置を取得
            folderPath = Left(oldFilePath, lastBackslash - 1)  ' フォルダパスを抽出
            lastDot = InStrRev(oldFilePath, ".")  ' 最後のドットの位置を取得
            fileExtension = Mid(oldFilePath, lastDot)  ' ファイル拡張子を取得

            ' セルのフォーマットをテキストに設定し、日付形式で値を設定
            ws.Cells(i, 3).NumberFormat = "@"
            ws.Cells(i, 3).Value = Format(ws.Cells(i, 3).Value, "yyyy-mm-dd")
            
            ' 新しいファイルパスを生成
            newFilePath = folderPath & "\" & ws.Cells(i, 3).Value & "_" & ws.Cells(i, 4).Value & "_" & ws.Cells(i, 5).Value & fileExtension
                
            ' ファイル名変更処理
            If Len(newFilePath) <= 255 Then  ' ファイル名が256文字を超えないようにチェック
                On Error Resume Next  ' エラー発生時の処理を次の行に移動
                Name oldFilePath As newFilePath  ' ファイル名を変更
                If Err.Number <> 0 Then  ' エラーが発生した場合
                    MsgBox "エラー発生: " & Err.Description & " (行: " & i & ")"  ' エラーメッセージを表示
                End If
                On Error GoTo 0  ' エラーハンドリングを元に戻す
            End If
        End If
    Next i
    
    MsgBox "ファイル名を変更しました!"
End Sub
'
'

 

 

●実行前~実行後 ※ RenameFiles01実行後、選択したフォルダ内のすべてのファイルのフルパスとファイル名がExcelシートに表示される。
RenameFiles02実行後、C列、D列、E列に基づいてファイル名が変更され、変更に成功したファイルとエラーが発生したファイルの情報がExcelシートに反映される。
(画面クリックして拡大)

 

 

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

 

AKIRA