【Excel VBA】FSOでファイル名やフォルダ名を変更(リネーム)する方法

「フォルダ内にある複数のレポートファイル名に、一括で今日の日付を付け加えたい」といった、ファイル名の一括変更は、ファイル整理作業で頻繁に発生します。

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プロパティを理解すれば非常に簡単です。

  1. fso.GetFileまたはfso.GetFolderで、名前を変更したい対象のオブジェクトを取得する。
  2. そのオブジェクトの**.Nameプロパティに、新しい名前の文字列を代入**する。

フォルダ内のファイルを一括でリネームする処理は、ファイル整理などで非常に役立ちます。エラー条件にだけ注意して、ぜひ活用してみてください。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次