「フォルダ内にある複数のレポートファイル名に、一括で今日の日付を付け加えたい」といった、ファイル名の一括変更は、ファイル整理作業で頻繁に発生します。
FileSystemObject (FSO)を使えば、ファイルやフォルダの名前をVBAで簡単に変更できます。この記事では、FileオブジェクトやFolderオブジェクトの.Nameプロパティを使い、名前を変更する基本的な方法と、その際の注意点を解説します。
【準備】参照設定
FSOを快適に利用するため、VBAエディタでツール > 参照設定を開き、**「Microsoft Scripting Runtime」**にチェックを入れておくことを推奨します。
1. フォルダ内の全ファイル名を一括で変更する
まず、指定したフォルダ内にある全てのファイル名に、日付を追加する実用的なコードです。
完成したVBAコード
'参照設定: Microsoft Scripting Runtime
Sub RenameAllFilesInFolder()
    ' 変数を宣言します
    Dim fso As New FileSystemObject
    Dim targetFolder As Folder
    Dim fileObj As File
    Dim folderPath As String
    
    '--- 名前を変更したいファイルが入っているフォルダのパス ---
    folderPath = ThisWorkbook.Path & "\Reports\"
    ' フォルダが存在しない場合は処理を中断
    If Not fso.FolderExists(folderPath) Then
        MsgBox "対象フォルダが見つかりません。", vbCritical
        Exit Sub
    End If
    
    '--- 1. 対象フォルダのオブジェクトを取得 ---
    Set targetFolder = fso.GetFolder(folderPath)
    '--- 2. フォルダ内の全ファイルをループ処理 ---
    For Each fileObj In targetFolder.Files
        '--- 3. 新しいファイル名を組み立てて、.Nameプロパティに代入 ---
        fileObj.Name = fso.GetBaseName(fileObj.Path) & "_" & Format(Date, "yyyymmdd") & "." & fso.GetExtensionName(fileObj.Path)
    Next fileObj
    
    MsgBox "フォルダ内の全ファイル名の変更が完了しました。"
    
    ' オブジェクトを解放
    Set fileObj = Nothing
    Set targetFolder = Nothing
    Set fso = Nothing
End Sub
2. フォルダ名を変更する
ファイルだけでなく、フォルダ自体の名前も同じように変更できます。
完成したVBAコード
Sub RenameSingleFolder()
    Dim fso As New FileSystemObject
    Dim folderObj As Folder
    Dim originalFolderPath As String
    
    originalFolderPath = ThisWorkbook.Path & "\OldFolderName"
    
    If fso.FolderExists(originalFolderPath) Then
        Set folderObj = fso.GetFolder(originalFolderPath)
        
        ' .Nameプロパティに新しい名前を代入するだけ
        folderObj.Name = "NewFolderName"
        
        MsgBox "フォルダ名を変更しました。"
    Else
        MsgBox "対象フォルダが見つかりません。"
    End If
End Sub
コードのポイント解説
.Name プロパティへの代入
FSOでファイルやフォルダの名前を変更する核心は、非常にシンプルです。 対象オブジェクト.Name = "新しい名前"
FileオブジェクトやFolderオブジェクトの.Nameプロパティは読み取りだけでなく、書き込みも可能です。このプロパティに新しい名前の文字列を代入するだけで、実際のファイル名・フォルダ名が変更されます。
新しいファイル名の組み立て
fileObj.Name = fso.GetBaseName(fileObj.Path) & "_" & ... & "." & fso.GetExtensionName(fileObj.Path)
ファイル名に日付などを追加する際、元のファイル名から拡張子を分離する必要があります。FSOの.GetBaseName(拡張子なしのファイル名を取得)と.GetExtensionName(拡張子のみを取得)メソッドを使うと、この処理を確実に行えます。
【重要】名前変更時の注意点
ファイル名・フォルダ名の変更は、以下の条件で実行時エラーとなります。
- ファイルが開かれている: 名前を変更しようとしているファイルが、Excelやその他のアプリケーションで開かれている場合、「Permission denied (アクセスが拒否されました)」エラーが発生します。
- 名前の重複: 変更しようとしている新しい名前が、同じフォルダ内に既に存在している場合、エラーが発生します。事前にfso.FileExistsでチェックするのが安全です。
- 不正な文字: ファイル名として使えない文字(¥ / : * ? " < > |)を新しい名前に含めると、エラーになります。
まとめ
FSOを使った名前の変更は、.Nameプロパティを理解すれば非常に簡単です。
- fso.GetFileまたは- fso.GetFolderで、名前を変更したい対象のオブジェクトを取得する。
- そのオブジェクトの**.Nameプロパティに、新しい名前の文字列を代入**する。
フォルダ内のファイルを一括でリネームする処理は、ファイル整理などで非常に役立ちます。エラー条件にだけ注意して、ぜひ活用してみてください。
【AI×就労支援】Neuro Dive(ニューロダイブ)で先端ITを学び、スペシャリストとしての就職を目指しませんか?
最後に宣伝をさせてください。
「AIやデータサイエンスを仕事にしたい」 「でも、独学には限界が…」
そんな方に知ってほしいのが、日本初の”先端IT特化型”就労移行支援『Neuro Dive』です。
IT職種への就職率80%超、職場定着率95%超という実績は、信頼の証。「学びたい」を「仕事」に繋げるプロフェッショナルです。
ご興味があれば、ぜひ公式サイトをチェックしてみてください。


 
			 
			 
			 
			 
			 
			 
			