「フォルダ内にある複数のレポートファイル名に、一括で今日の日付を付け加えたい」といった、ファイル名の一括変更は、ファイル整理作業で頻繁に発生します。
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
プロパティに、新しい名前の文字列を代入**する。
フォルダ内のファイルを一括でリネームする処理は、ファイル整理などで非常に役立ちます。エラー条件にだけ注意して、ぜひ活用してみてください。