VBAでフォルダ内のファイル名を一括変更するには、Dir でファイルを1つずつ取得して、Name で新しい名前に変更する、という処理を繰り返します。連番や日付をファイル名に自動でつけることもできます。
この記事では、次の内容を順番に解説します。
- ファイル名を一括変更する基本のコード
- Nameとは何か・InStrRevとは何か
- 日付をファイル名に入れる応用
フォルダ内のファイル名を一括変更するには?
次のコードを実行すると、フォルダを選ぶ画面が表示され、選んだフォルダ内のファイルを「Report_1.xlsx」「Report_2.xlsx」のように連番つきのファイル名に一括変更します。
Sub RenameFilesInFolder()
Dim folderPath As String
Dim fileName As String
Dim newFileName As String
Dim i As Long
' フォルダを選ぶ画面を表示する
With Application.FileDialog(msoFileDialogFolderPicker)
.Title = "フォルダを選択してください"
If .Show <> -1 Then
MsgBox "キャンセルされました。"
Exit Sub
End If
folderPath = .SelectedItems(1)
End With
' パスの末尾に¥がなければ追加する
If Right(folderPath, 1) <> "¥" Then
folderPath = folderPath & "¥"
End If
' フォルダ内のファイルを1つずつ取得する
fileName = Dir(folderPath & "*.*")
i = 1
Do While fileName <> ""
' 新しいファイル名を作る(例:Report_1.xlsx)
newFileName = "Report_" & i & Mid(fileName, InStrRev(fileName, "."))
' ファイル名を変更する
Name folderPath & fileName As folderPath & newFileName
i = i + 1
fileName = Dir()
Loop
MsgBox "ファイル名の変更が完了しました。"
End Sub
コードの流れ
- フォルダを選ぶ画面(FileDialog)を表示して、対象フォルダのパスを取得します。
Dirでフォルダ内のファイルを1つずつ取り出します。- 新しいファイル名を「Report_連番.拡張子」の形で作ります。
Nameで元のファイル名を新しいファイル名に変更します。- ファイルがなくなるまで繰り返します。
Nameとは?
Name はファイルの名前を変える命令です。次のように書きます。
Name "変更前のファイルパス" As "変更後のファイルパス"
ファイル名だけでなく、パスごと変えるとファイルを別のフォルダに移動することもできます。
InStrRevとは?
InStrRev(文字列, 探したい文字) は、文字列の中から指定した文字を後ろから探して、その位置を返す関数です。
ファイル名の拡張子を取り出すために使っています。たとえば "sample.xlsx" の場合、. は後ろから数えると7文字目にあるので 7 が返ります。
' InStrRevで拡張子の位置を調べる
InStrRev("sample.xlsx", ".") ' → 7
' Midで7文字目から末尾まで取り出す(= ".xlsx")
Mid("sample.xlsx", 7) ' → ".xlsx"
この2つを組み合わせることで、ファイル名が変わっても拡張子だけをそのまま引き継げます。
ファイル名に日付を入れるには?
連番の代わりに日付を入れたい場合は、新しいファイル名を作る部分を次のように書き換えます。
' 例:20250901_1.xlsx のようなファイル名にする
newFileName = Format(Date, "yyyymmdd") & "_" & i & Mid(fileName, InStrRev(fileName, "."))
実行した日の日付が自動で入るので、毎日同じマクロを使い回せます。
まとめ
ファイル名の一括変更は、Dir でファイルを取得して Name で名前を変える、という流れが基本です。
- 基本の流れ:FileDialogでフォルダを選択 → Dirでファイルを取得 → Nameで名前を変更。
- Name:ファイル名を変える命令。パスごと変えるとファイルの移動もできる。
- InStrRev:後ろから文字を検索する関数。拡張子を取り出すときに使う。
- 日付を入れる:
Format(Date, "yyyymmdd")と組み合わせると日付つきのファイル名にできる。
よくある質問
変更前に元のファイル名を確認したい場合は?
変更前に MsgBox fileName & " → " & newFileName を追加すると、変更前後のファイル名を1つずつ確認しながら進めることができます。件数が多い場合は処理が止まるので、まずは少ないファイルで試してみましょう。
特定の拡張子のファイルだけを変更したい場合は?
Dir(folderPath & "*.xlsx") のように拡張子を指定すると、その拡張子のファイルだけが対象になります。*.* にするとすべてのファイルが対象になります。
ファイルを開いた状態で実行するとどうなる?
開いているファイルの名前は変更できず、エラーになります。変更対象のファイルはすべて閉じた状態で実行してください。
変更後に元の名前に戻すことはできる?
VBAで一括変更した後に元に戻す機能はありません。万が一のためにマクロ実行前にフォルダをバックアップしておくことをおすすめします。
Excelのシートに書いた名前リストを使ってファイル名を変えることはできる?
できます。シートのA列に変更後のファイル名を入れておいて、ループの中で Cells(i, 1).Value からファイル名を読み込む形にすれば、リスト通りにファイル名を変えることができます。
動画で学びたい方へ
「記事を読んでも、実際に自分で書けるか不安…」という方には、動画で基礎からじっくり学べる講座がおすすめです。
VBAが初めての方を前提に、つまずきやすいポイントを先回りして解説しています。サンプル動画は無料でご覧いただけます。



