【Excelマクロ】ファイル名を一括変更する

手作業のファイル名変更は大変・・・!

日々の業務で、複数のファイル名を一つひとつ手作業で変更していくのは、とても手間がかかる作業です。

たとえば、日付を入れたり、連番をつけたり、名前を統一したり……。

こうした作業はVBAを使うことで一括で自動化できます。

実装するメリット

  • 毎回同じような名前変更作業を自動化できる
  • 人的ミスを減らし、スムーズな運用ができる
  • フォルダ構造や拡張子の変更にも柔軟に対応できる

連番を付けてファイル名を一括変更

  1. 対象フォルダを選択する
  2. フォルダ内のファイルを一覧取得する
  3. 一括でファイル名を変更する
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

    ' 最初のファイル名を取得
    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つずつ取得します。
  • Name ステートメントで新しい名前に変更しています。
  • 元のファイルの拡張子は Mid + InStrRev でそのまま活用します。

注意点

  • フォルダ内のすべてのファイルが対象になります(サブフォルダは対象外)。
  • ファイル名が被ると上書きエラーになります。必要ならファイル存在確認を入れてください。
  • ファイルを開いていると変更に失敗します。

NameとInstrRev

Name ステートメントとは?

ファイル名を変更するときに使うVBAの命令です。

Name "元のファイルパス" As "変更後のファイルパス"

ファイル名の変更や、フォルダのパスも変更すれば、フォルダの変更や、ファイル名の変更をすることができます。

InStrRev 関数とは?

文字列の中から、指定した文字(ここでは ".")を後ろから検索して、その位置を返します。

InStrRev(fileName, ".")

この例では、ファイル名の末尾の拡張子を取得するために使っています。
たとえば "sample.txt" の場合、 "." は7文字目にあるので、InStrRev7 を返します。

こう書き換えるとさらに柔軟に

ファイル名を "Report_" だけでなく、日付や任意のキーワードに変更したい場合は、次のようにカスタマイズができます。

newFileName = Format(Date, "yyyymmdd") & "_" & i & Mid(fileName, InStrRev(fileName, "."))

このようにすれば、20240523_1.xlsx のような命名が可能になります。

まとめ

VBAを使えば、地味でミスの起こりやすいファイル名変更の作業も、数秒で一括処理が可能になります。

  • フォルダ選択 → 一覧取得 → 名前変更 の流れを押さえる
  • DirName の使い方をマスターすれば応用が効く
  • 実際の業務でよくある作業をVBAに置き換えるきっかけになる

自分の業務に合わせたファイル名付けルールに書き換えて、VBAの便利さを実感してみましょう。

コメント