Excel VBAでファイル名を一括変更する方法
Excel VBAを使用してファイル名を一括変更するマクロの設定と使用方法について解説します。このマクロは、指定された範囲に入力された変更前後のファイル名に基づいて、ファイル名を自動的に変更します。
準備1:現状のファイル名を取得する
この記事で紹介するファイル名の一括変更を実行する前に、対象ファイルのリストを作成してください。ファイル名取得のマクロは下記のページで紹介しています。
フォルダー内のファイル一覧を取得するマクロ
Excel VBAを使って指定ディレクトリのファイル一覧を取得する方法 この記事では、Excel VBAを使用して指定したディレクトリ内のファイル一覧を取得し、Excelシートに書き出す方法について紹介します。このマクロはサブディレクトリ内...
上記のマクロではディレクトリ名とファイル名が離れていますので「\」を区切り文字として連結しておきましょう。TEXTJOIN関数を用いれば以下のような式で連結が可能です。
=TEXTJOIN("\",TRUE,A1:B1)
準備2:変更後のファイル名を設定する
元のパス付ファイル名と、変更後のファイル名を対にして入力しておきましょう。セット後はマクロを登録します。
VBAマクロを「標準モジュール」へセットする手順
- Excelを開き、Alt + F11キーを押してVBAエディタを開きます。
- VBAエディタが開いたら、メニューから「挿入」→「標準モジュール」を選択します。
- 新しいモジュールが挿入されたら、以下のコードをコピーして貼り付けます。
Sub BatchRenameFiles() Dim ws As Worksheet Dim rngBefore As Range, rngAfter As Range Dim fileCount As Long, i As Long Dim oldFileName As String, newFileName As String Dim oldFilePath As String, newFilePath As String Dim oldDir As String, newDir As String Dim successCount As Long ' ワークシートを設定 Set ws = ThisWorkbook.Sheets(1) ' 必要に応じてシート番号や名前を変更してください ' 変更前のファイル名が入力されている範囲を選択 On Error Resume Next Set rngBefore = Application.InputBox("変更前のファイル名が入力されている範囲を選択してください", Type:=8) On Error GoTo 0 ' 変更前のファイル名の範囲が選択されなかった場合、処理をキャンセル If rngBefore Is Nothing Then MsgBox "変更前のファイル名の範囲が選択されませんでした。処理をキャンセルします。", vbExclamation Exit Sub End If ' 変更後のファイル名が入力されている範囲を選択 On Error Resume Next Set rngAfter = Application.InputBox("変更後のファイル名が入力されている範囲を選択してください", Type:=8) On Error GoTo 0 ' 変更後のファイル名の範囲が選択されなかった場合、処理をキャンセル If rngAfter Is Nothing Then MsgBox "変更後のファイル名の範囲が選択されませんでした。処理をキャンセルします。", vbExclamation Exit Sub End If ' 変更前後の範囲のサイズを比較し、ファイル名変更処理 fileCount = Application.Min(rngBefore.Cells.Count, rngAfter.Cells.Count) successCount = 0 For i = 1 To fileCount oldFileName = rngBefore.Cells(i, 1).Value newFileName = rngAfter.Cells(i, 1).Value ' 新しいファイル名が無効または空白の場合はスキップ If Trim(newFileName) = "" Or InStr(newFileName, "/") > 0 Or InStr(newFileName, "\") > 0 Or InStr(newFileName, ":") > 0 Or InStr(newFileName, "*") > 0 Or InStr(newFileName, "?") > 0 Or InStr(newFileName, """") > 0 Or InStr(newFileName, "<") > 0 Or InStr(newFileName, ">") > 0 Or InStr(newFileName, "|") > 0 Then GoTo NextIteration End If ' 変更前と変更後のファイル名が同じ場合はスキップ If oldFileName = Left(oldFileName, InStrRev(oldFileName, "\") - 1) & "\" & newFileName Then GoTo NextIteration End If ' ファイルが存在するかチェック If Dir(oldFileName) <> "" Then ' 変更前のファイルパスからディレクトリを取得 oldDir = Left(oldFileName, InStrRev(oldFileName, "\")) ' 変更後のファイル名にディレクトリ名が含まれているか確認 If InStr(newFileName, "\") > 0 Then newFilePath = newFileName Else newFilePath = oldDir & newFileName End If ' 変更後のファイルパスからディレクトリを取得 newDir = Left(newFilePath, InStrRev(newFilePath, "\")) ' ディレクトリ名が異なる場合、処理を中断 If oldDir <> newDir Then MsgBox "変更前と変更後のディレクトリが異なります: " & vbCrLf & oldFileName & vbCrLf & newFilePath, vbCritical Exit Sub End If ' ファイル名を変更 On Error GoTo ErrorHandler Name oldFileName As newFilePath On Error GoTo 0 ' 成功した場合、カウントを増加 successCount = successCount + 1 End If NextIteration: Next i MsgBox successCount & " 件のファイル名を変更しました。", vbInformation Exit Sub ErrorHandler: MsgBox "エラーが発生しました: " & Err.Description, vbCritical Exit Sub End Sub
マクロセット後の使用方法
- VBAエディタを閉じて、Excelに戻ります。
- Excelの任意のセルに、変更前のファイル名と変更後のファイル名をフルパスで入力します。
- Excelのメニューから「開発」タブを選択し、「マクロ」ボタンをクリックします。もしくはAlt + F11キーを押してマクロ一覧を表示します。
- マクロ一覧から「BatchRenameFiles」を選択し、「実行」ボタンをクリックします。
- 表示されたダイアログボックスで、変更前のファイル名が入力されているセル範囲を選択し、「OK」をクリックします。
- 次に、変更後のファイル名が入力されているセル範囲を選択し、「OK」をクリックします。
- ファイル名の変更が実行され、成功した件数が表示されます。
これで、指定されたファイル名の一括変更が完了します。ファイル名が変更されていない場合は、エラーメッセージが表示されますので、適宜対応してください。
コメント