Windows11を使っていると、写真や資料など大量のファイル名を一括で整理したい場面は多いものです。例えば「20231001_旅行_001.jpg」から「旅行写真001.jpg」に統一したい、エクセルで管理しているリストに従ってファイル名を付け替えたい、といったケースです。手作業でひとつひとつ変更するのは時間がかかり、作業ミスの原因にもなります。そこで役立つのが、VBA(Visual Basic for Applications)を使った自動化です。エクセルと組み合わせることで、ルールに従った柔軟なファイル名変更が可能になります。本記事では、Windows11環境でVBAを活用してファイル名を一括変更する方法を、具体的なサンプルコードとともに解説します。初心者でも理解できるように、実践例を交えて詳しくご紹介します。
VBAでファイル名変更を行うメリット
Windows11には「ファイルエクスプローラー」から複数ファイルを選択して一括で名前変更する機能がありますが、「同じ名前+連番」程度の単純な処理しかできません。
一方、VBAを使うと以下のような柔軟なルールでファイル名を変更できます。
- 先頭に日付を追加する
- 任意のキーワードを挿入する
- 管理番号や社員番号と紐付けて変更する
- 拡張子を残して名前だけ変更する
- ファイル名に含まれる不要な文字列を削除する
これにより、大量のファイルを短時間で整理でき、業務効率が格段に向上します。
VBAでファイル名を変更する基本コード
まずは、シンプルなVBAコードの例を紹介します。この例では、指定フォルダ内のすべてのファイルに「Test_」という接頭辞をつけます。
Sub RenameFilesBasic()
Dim fso As Object
Dim folder As Object
Dim file As Object
Dim folderPath As String
' 対象フォルダのパスを指定
folderPath = "C:\Users\user\Documents\TestFolder"
Set fso = CreateObject("Scripting.FileSystemObject")
Set folder = fso.GetFolder(folderPath)
For Each file In folder.Files
file.Name = "Test_" & file.Name
Next file
End Sub
このコードを実行すると、対象フォルダ内のすべてのファイル名が「Test_」で始まるように変わります。
ファイル名を連番で付け替える方法
次に、ファイルを「Photo_001.jpg」「Photo_002.jpg」のように連番付きで変更する方法です。
Sub RenameFilesWithNumbers()
Dim fso As Object
Dim folder As Object
Dim file As Object
Dim folderPath As String
Dim i As Long
Dim ext As String
folderPath = "C:\Users\user\Documents\Photos"
Set fso = CreateObject("Scripting.FileSystemObject")
Set folder = fso.GetFolder(folderPath)
i = 1
For Each file In folder.Files
ext = fso.GetExtensionName(file.Name)
file.Name = "Photo_" & Format(i, "000") & "." & ext
i = i + 1
Next file
End Sub
このコードでは拡張子を保持したまま連番に変換されます。
ファイル名の一部を置換する方法
ファイル名に含まれる特定の文字列を別の文字に置き換えることも可能です。
Sub RenameFilesReplace()
Dim fso As Object
Dim folder As Object
Dim file As Object
Dim folderPath As String
Dim newName As String
folderPath = "C:\Users\user\Documents\Docs"
Set fso = CreateObject("Scripting.FileSystemObject")
Set folder = fso.GetFolder(folderPath)
For Each file In folder.Files
newName = Replace(file.Name, "旧", "新")
file.Name = newName
Next file
End Sub
この例では「旧」という文字が含まれている場合、それを「新」に置き換えます。
エクセルのリストに従って変更する方法
より実践的な方法として、エクセルのA列に「元ファイル名」、B列に「新ファイル名」を入力し、その対応表に従ってファイル名を変更するコードです。
Sub RenameFilesFromExcelList()
Dim fso As Object
Dim folderPath As String
Dim lastRow As Long
Dim i As Long
Dim oldName As String
Dim newName As String
folderPath = "C:\Users\user\Documents\ExcelRename"
Set fso = CreateObject("Scripting.FileSystemObject")
lastRow = Cells(Rows.Count, 1).End(xlUp).Row
For i = 2 To lastRow
oldName = folderPath & "\" & Cells(i, 1).Value
newName = folderPath & "\" & Cells(i, 2).Value
If fso.FileExists(oldName) Then
Name oldName As newName
End If
Next i
End Sub
この方法なら、管理リストを作って一括で確実にファイル名を変更できます。業務での利用にも向いています。
Windows11環境で実行する際の注意点
VBAでファイル名を変更する際には、いくつかの注意点があります。
- 管理者権限
システムフォルダや権限が制限された場所では実行できないことがあります。 - 重複ファイル名の回避
同じ名前に変更しようとするとエラーになるため、事前にチェックする工夫が必要です。 - 拡張子を保持すること
ファイル拡張子を誤って削除すると、ファイルが開けなくなる可能性があります。 - バックアップの重要性
大量のファイルを変更する前に、必ずバックアップを取ってから実行しましょう。
応用編:日付+ファイル名で管理する
実務では「日付+ファイル名」というルールで整理すると便利です。
Sub RenameFilesWithDate()
Dim fso As Object
Dim folder As Object
Dim file As Object
Dim folderPath As String
Dim ext As String
Dim today As String
folderPath = "C:\Users\user\Documents\Reports"
today = Format(Date, "yyyymmdd")
Set fso = CreateObject("Scripting.FileSystemObject")
Set folder = fso.GetFolder(folderPath)
For Each file In folder.Files
ext = fso.GetExtensionName(file.Name)
file.Name = today & "_" & file.Name
Next file
End Sub
例えば、20251002_Report.xlsx という形式で整理できます。
まとめ
Windows11環境では、VBAを活用することで「ルールに従ったファイル名変更」を効率的に実現できます。接頭辞や接尾辞の追加、連番処理、文字列の置換、さらにはエクセルのリストに従った変更など、用途に応じてカスタマイズが可能です。特に大量のファイルを扱う場合は、手作業での変更に比べて作業時間を大幅に削減でき、ヒューマンエラーも防げます。
実務や日常のファイル整理において、VBAによる自動化は非常に強力なツールになります。今回紹介したサンプルコードを参考に、自分の環境やルールに合わせてアレンジしてみてください。