【VBA】ファイル名を一括変更(リネーム)する方法(コピペOK)

この記事でできること

フォルダ内のファイル名を1つずつ右クリックで変更していませんか? VBAを使えば、Excelでリネーム表(旧名→新名)を作って実行するだけで、数十件のファイル名を一括変更できます。この記事では、ドライラン(事前確認)モード付きのコードをコピペで提供します。

  • 対象:ファイル名を手作業でリネームしている人、VBAが初めての人
  • 所要時間:コピペ → 実行まで約10分(目安。リネーム表の作成時間を含む)

完成イメージ(Before / After)

Excelのリネーム表

A(旧ファイル名) B(新ファイル名)
1 旧ファイル名 新ファイル名
2 報告書_draft.xlsx 202601_売上報告.xlsx
3 報告書_draft2.xlsx 202602_売上報告.xlsx
4 data.csv 202601_在庫データ.csv

Before(実行前のフォルダ)


報告書_draft.xlsx
報告書_draft2.xlsx
data.csv

After(実行後のフォルダ)


202601_売上報告.xlsx
202602_売上報告.xlsx
202601_在庫データ.csv

実行前の準備

バックアップを取る(必須)

ファイル名の変更は元に戻せない操作です。 必ず対象フォルダを丸ごとコピーしてバックアップを取ってください。

手順:

  1. エクスプローラーで対象フォルダを右クリック
  2. 「コピー」→ 同じ場所に「貼り付け」
  3. 「対象フォルダ – コピー」というバックアップが作られる

Excelをマクロ有効ブック(.xlsm)で保存する

  1. Excelを開く(新規でも既存でもOK)
  2. 「ファイル」→「名前を付けて保存」
  3. ファイルの種類を 「Excel マクロ有効ブック (*.xlsm)」 に変更して保存

Windowsの拡張子を表示する

リネーム表には拡張子(.xlsx .csv など)を含めて記載する必要がある。Windowsの初期設定では拡張子が非表示のため、以下の手順で表示する。

  1. エクスプローラーを開く
  2. 上部メニューの「表示」タブをクリック
  3. ファイル名拡張子」にチェックを入れる

これでファイル名の末尾に .xlsx .csv などが表示されるようになる。


手順

ステップ1:リネーム表を作る

Sheet1 に以下のように入力する。

  • A1:旧ファイル名(ヘッダー)
  • B1:新ファイル名(ヘッダー)
  • A2以降:現在のファイル名(拡張子を含む
  • B2以降:変更後のファイル名(拡張子を含む

旧ファイル名の入力を楽にする方法: 「【VBA】フォルダ内のファイル一覧をExcelに自動出力する方法」のコードでA列にファイル名を出力し、それをリネーム表のA列に使うと手入力が不要になる。

リネーム表のチェックポイント:

  • 旧・新どちらも 拡張子を含めて 記載する(例:報告書.xlsx
  • 新ファイル名に使用禁止文字(\ / : * ? " < > |)を含めない
  • 新ファイル名が重複していないか確認する(B列で =COUNTIF(B:B,B2) を使うと重複チェックできる。2以上なら重複あり)

ステップ2:VBEを開いてコードを貼り付ける

  1. Alt + F11 でVBE(コードを書く画面)を開く
  2. メニュー「挿入」→「標準モジュール
  3. 下の「コード(最小版)」をコピーしてコードウィンドウに貼り付ける

一般的にはAlt + F11で開けるが、企業のセキュリティ設定でVBAが無効化されている場合は、IT部門に確認すること。

ステップ3:フォルダパスを書き換える

コード内の folderPath = "C:\Users\(ユーザー名)\Desktop\対象フォルダ\" を、自分の対象フォルダのパスに書き換える。

パスの末尾に \ を忘れないこと。

ステップ4:マクロを実行する

  1. Alt + F8 を押す
  2. 「RenameFiles」を選択して「実行」
  3. 確認ダイアログが表示されるので「はい」を押す

ステップ5:結果を確認する

  1. C列に「成功」「失敗:理由」が記録されているので確認する
  2. フォルダを開き、ファイル名が変更されていることを確認する
  3. 1つファイルを開いて、中身が壊れていないことを確認する

コード(最小版)— リネーム表どおりに一括変更

Sheet1のリネーム表(A列:旧名、B列:新名)に従ってファイル名を変更する。結果はC列に記録される。


Sub RenameFiles()

    Dim folderPath As String
    Dim oldName As String
    Dim newName As String
    Dim row As Long
    Dim ws As Worksheet
    Dim successCount As Long
    Dim failCount As Long

    ' ★ ここを自分のフォルダパスに書き換える(末尾の \ を忘れずに)
    folderPath = "C:\Users\(ユーザー名)\Desktop\対象フォルダ\"

    Set ws = Worksheets("Sheet1")

    ' 確認ダイアログ
    If MsgBox("リネーム表の内容でファイル名を変更します。" & vbCrLf & _
              "対象フォルダ:" & folderPath & vbCrLf & vbCrLf & _
              "この操作は元に戻せません。" & vbCrLf & _
              "バックアップは取りましたか?" & vbCrLf & vbCrLf & _
              "実行しますか?", vbYesNo + vbExclamation) = vbNo Then
        Exit Sub
    End If

    row = 2  ' ヘッダー行(1行目)をスキップ

    Do While ws.Cells(row, 1).Value <> ""

        oldName = ws.Cells(row, 1).Value
        newName = ws.Cells(row, 2).Value

        ' 新ファイル名が空ならスキップ
        If newName = "" Then
            ws.Cells(row, 3).Value = "スキップ(新ファイル名が空)"
            row = row + 1
            ' ↓ 次の行に進む(GoTo の飛び先)
            GoTo NextRow
        End If

        ' リネーム実行(エラーが出ても次のファイルに進む)
        On Error Resume Next
        Name folderPath & oldName As folderPath & newName
        If Err.Number = 0 Then
            ws.Cells(row, 3).Value = "成功"
            successCount = successCount + 1
        Else
            ws.Cells(row, 3).Value = "失敗:" & Err.Description
            failCount = failCount + 1
            Err.Clear
        End If
        On Error GoTo 0

NextRow:
        row = row + 1
    Loop

    MsgBox "完了しました。" & vbCrLf & _
           "成功:" & successCount & " 件" & vbCrLf & _
           "失敗:" & failCount & " 件" & vbCrLf & vbCrLf & _
           "C列に詳細を記録しました。", vbInformation

End Sub

シート名について: コード内の "Sheet1" はシート名(タブに表示される名前)。シート名を変更している場合は書き換えること。


コード(実務版)— ドライラン+ログ出力付き

実務では「本当にこのリネームで合っているか」を事前確認したい場面が多い。以下のコードはドライラン(確認のみ・変更なし)モードを搭載している。


Sub RenameFilesWithDryRun()

    Dim folderPath As String
    Dim oldName As String
    Dim newName As String
    Dim row As Long
    Dim ws As Worksheet
    Dim isDryRun As Boolean
    Dim successCount As Long
    Dim failCount As Long
    Dim skipCount As Long

    ' ★ ここを自分のフォルダパスに書き換える(末尾の \ を忘れずに)
    folderPath = "C:\Users\(ユーザー名)\Desktop\対象フォルダ\"

    Set ws = Worksheets("Sheet1")

    ' ドライラン or 本実行を選択
    Select Case MsgBox("ドライラン(確認のみ・変更なし)で実行しますか?" & vbCrLf & vbCrLf & _
                       "「はい」→ ドライラン(ファイルは変更されません)" & vbCrLf & _
                       "「いいえ」→ 本実行(ファイル名が変更されます)" & vbCrLf & _
                       "「キャンセル」→ 中止", _
                       vbYesNoCancel + vbQuestion)
        Case vbYes
            isDryRun = True
        Case vbNo
            isDryRun = False
            ' 本実行の最終確認
            If MsgBox("本当にファイル名を変更しますか?" & vbCrLf & _
                      "この操作は元に戻せません。" & vbCrLf & _
                      "バックアップは取りましたか?", _
                      vbYesNo + vbExclamation) = vbNo Then
                Exit Sub
            End If
        Case vbCancel
            Exit Sub
    End Select

    ' C列(結果列)をクリア
    ws.Range("C:C").Clear

    ' ヘッダー
    If isDryRun Then
        ws.Cells(1, 3).Value = "ドライラン結果"
    Else
        ws.Cells(1, 3).Value = "実行結果"
    End If

    row = 2

    Do While ws.Cells(row, 1).Value <> ""

        oldName = ws.Cells(row, 1).Value
        newName = ws.Cells(row, 2).Value

        ' 新ファイル名が空ならスキップ
        If newName = "" Then
            ws.Cells(row, 3).Value = "スキップ:新ファイル名が空"
            skipCount = skipCount + 1
            row = row + 1
            ' ↓ 次の行に進む(GoTo の飛び先)
            GoTo NextRow2
        End If

        ' 旧ファイルが存在するか確認
        If Dir(folderPath & oldName) = "" Then
            ws.Cells(row, 3).Value = "NG:旧ファイルが見つからない"
            failCount = failCount + 1
            row = row + 1
            GoTo NextRow2
        End If

        ' 新ファイル名が既に存在するか確認(旧名と同じ場合は除く)
        If oldName <> newName And Dir(folderPath & newName) <> "" Then
            ws.Cells(row, 3).Value = "NG:新ファイル名が既に存在する"
            failCount = failCount + 1
            row = row + 1
            GoTo NextRow2
        End If

        If isDryRun Then
            ' ドライラン:チェックのみ
            ws.Cells(row, 3).Value = "OK:変更可能"
            successCount = successCount + 1
        Else
            ' 本実行:リネーム
            On Error Resume Next
            Name folderPath & oldName As folderPath & newName
            If Err.Number = 0 Then
                ws.Cells(row, 3).Value = "成功"
                successCount = successCount + 1
            Else
                ws.Cells(row, 3).Value = "失敗:" & Err.Description
                failCount = failCount + 1
                Err.Clear
            End If
            On Error GoTo 0
        End If

NextRow2:
        row = row + 1
    Loop

    ' 結果サマリー
    Dim mode As String
    If isDryRun Then mode = "【ドライラン】" Else mode = "【本実行】"

    MsgBox mode & " 完了しました。" & vbCrLf & _
           "成功/OK:" & successCount & " 件" & vbCrLf & _
           "失敗/NG:" & failCount & " 件" & vbCrLf & _
           "スキップ:" & skipCount & " 件" & vbCrLf & vbCrLf & _
           "C列に詳細を記録しました。", vbInformation

End Sub

使い方:

  1. まず「はい(ドライラン)」で実行 → C列に「OK:変更可能」「NG:理由」が表示される
  2. C列を確認し、全行OKならもう一度実行して「いいえ(本実行)」を選ぶ
  3. 本実行後、C列に「成功」「失敗:理由」が記録される

注意: ドライランと本実行は続けて行うこと。間に時間が空くとファイルの移動・削除で結果が変わる可能性がある。


よくある落とし穴5選

# 症状 原因 対策
1 「失敗:ファイルが見つかりません」 リネーム表の旧ファイル名がフォルダ内に存在しない。拡張子の抜け、スペルミスが多い エクスプローラーからファイル名をコピーして貼り付ける。拡張子まで含めること
2 「失敗:既に同名のファイルが存在します」 新ファイル名がフォルダ内の別ファイルと重複 B列で =COUNTIF(B:B,B2) を使って重複チェックする
3 「失敗:書き込みできません」 対象ファイルが他のアプリで開かれている 対象ファイルをすべて閉じてから実行する
4 拡張子が消えた / 変わった 旧ファイル名には拡張子を含めたが、新ファイル名で拡張子を書き忘れた。またはWindowsの設定で拡張子が非表示になっているため、そもそも拡張子を認識していなかった 旧・新どちらも拡張子まで含めて記載する。拡張子が見えない場合は「実行前の準備」の手順でWindowsの設定を変更する
5 一部だけリネームされて困る 途中のファイルでエラーが発生した。最小版でもエラーハンドリングで次のファイルに進むが、エラー原因は事前確認で防げる 実務版のドライランで事前にNGを検出してから本実行する

FAQ

Q1: 元のファイル名に戻したい

リネームは元に戻す機能がない。バックアップから復元するか、リネーム表のA列とB列を入れ替えて再実行する方法がある。だからこそ実行前のバックアップが必須。

Q2: ファイル名に連番を付けたい(例:001_, 002_…)

B列に連番付きのファイル名を入力する。Excelの数式で自動生成も可能。例:=TEXT(ROW()-1,"000") & "_" & A2(この数式は旧ファイル名の先頭に連番を付けるもので、拡張子もそのまま維持される)

Q3: サブフォルダ内のファイルもリネームしたい

この記事のコードは1階層のみ対象。サブフォルダも対象にするには再帰処理が必要。

Q4: 特定の文字列を一括置換したい(例:「旧」→「新」)

VBAの Replace 関数を使えばリネーム表を手作業で作らずに一括置換できる。ただしこの記事の範囲外。

Q5: ファイル数が多い(100件以上)が大丈夫か?

数千件程度なら問題ない。リネーム表の作成が大変な場合は、「【VBA】フォルダ内のファイル一覧をExcelに自動出力する方法」のコードでA列にファイル名を出力し、B列の新ファイル名をExcelの数式で生成すると効率的。


まとめ

この記事で、Excelのリネーム表を使ったファイル名の一括変更ができるようになった。

  • 最小版:リネーム表どおりにリネーム。結果はC列に記録される
  • 実務版:ドライラン(事前確認)→ 本実行の2ステップで安心

関連記事: リネーム表の旧ファイル名をExcelに自動出力したい場合は「【VBA】フォルダ内のファイル一覧をExcelに自動出力する方法」を参照。


もっとカスタマイズしたい場合

「連番の付与ルールを自動化したい」「日付の付け替えをしたい」「特定の文字列を一括置換したい」など、業務に合わせたカスタマイズが必要な場合は、ココナラで相談できます。

相談時に以下の情報があるとスムーズです:

  • Excel のバージョン / OS
  • リネームのルール(例:先頭に日付を付ける、特定文字を置換する)
  • ファイルの数(目安)
  • サブフォルダの有無

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です