Excelで複数のデータファイルを管理していると、ファイル名を一定のルールで変更したい場面があります。特に総括用のExcelブックに変更前と変更後の名前を一覧化している場合、VBAマクロを使えば複数ファイルを一括でリネームできます。この記事では、フォルダ内にある複数のExcelブックを、別ブックを開かずに指定した名前へ変更する方法を具体的に解説します。
Excel VBAでファイル名を一括変更する基本的な考え方
今回のようなケースでは、1つの総括表ブックに変更前のファイル名と変更後のファイル名を記録し、その一覧をVBAで読み取ってファイル名を変更する方法が適しています。
例えば、総括表のL11~L16セルに変更前のファイル名、M11~M16セルに変更後のファイル名を入力しておきます。VBAではこの2つのセル範囲を順番に読み込み、「現在の名前のファイルを新しい名前へ変更する」という処理を繰り返します。
この方法なら、データファイル側を1つずつ開いて名前を変更する必要がなく、7個や数十個のファイルでも一括処理できます。
ファイル名変更に使うVBAマクロのサンプル
以下のマクロでは、総括表ブックと同じフォルダ内にあるExcelファイルを対象に、L列の名前からM列の名前へ変更します。
マクロを総括表ブックの標準モジュールへ貼り付けて使用します。
Sub Excelファイル名一括変更()
Dim folderPath As String
Dim oldName As String
Dim newName As String
Dim i As Long
folderPath = ThisWorkbook.Path & "\"
For i = 11 To 16
oldName = Cells(i, "L").Value
newName = Cells(i, "M").Value
If oldName <> "" And newName <> "" Then
Name folderPath & oldName As folderPath & newName
End If
Next i
MsgBox "ファイル名の変更が完了しました"
End Sub
マクロを実行する前に確認するポイント
ファイル名変更マクロは実行すると元に戻す操作ができないため、最初はコピーしたフォルダでテストすることをおすすめします。
また、セルに入力する名前には拡張子を含める必要があります。例えば元のファイルが「売上データ.xlsx」の場合、L列には「売上データ.xlsx」、M列には「001.xlsx」のように入力します。
もし拡張子を表示していない場合は、Windowsのエクスプローラー設定で「ファイル名拡張子を表示する」を有効にして確認すると間違いを防げます。
CONCATENATE関数で作成した名前でも利用できるのか
M11~M16セルの新しいファイル名がCONCATENATE関数などで作成されている場合でも、基本的にはそのまま利用できます。
VBAが取得するのはセルに表示されている計算結果なので、例えば「001.xlsx」という文字列が表示されていれば、その値を使ってファイル名を変更できます。
ただし、関数結果に余計な空白や記号が含まれている場合はエラーになることがあります。その場合はTRIM関数などで不要なスペースを削除しておくと安全です。
ファイル名変更時によくあるエラーと対処方法
「ファイルが見つかりません」というエラーが出る場合は、L列に入力した名前と実際のファイル名が一致しているか確認してください。
例えば、実際のファイル名が「2.xlsx」なのに、セルには「2」とだけ入力されている場合、VBAは対象ファイルを見つけられません。
また、変更後の名前と同じファイルがすでに存在する場合もエラーになります。実行前に新しい名前のファイルがないか確認しておくことが重要です。
ファイル数が増えた場合の応用方法
今回の例では11行目から16行目までの6ファイルを処理していますが、ファイル数が増える場合はFor文の範囲を変更するだけで対応できます。
例えば、100個のファイルを変更する場合は「For i = 11 To 110」のように変更できます。
さらに高度な方法として、最終行を自動取得するようにすれば、ファイル数が毎回変わる管理表でも利用できる柔軟なマクロにできます。
まとめ
Excel VBAを使えば、総括表に入力した変更前・変更後のファイル名一覧をもとに、複数のExcelブックを自動でリネームできます。
今回のようにL列に元の名前、M列に新しい名前を準備しておけば、データファイルを1つずつ開く必要はありません。作業前には必ずバックアップを取り、少ないファイル数でテストしてから本番環境で実行すると安全です。
VBAによるファイル名変更は、定型的な事務作業の時間短縮に非常に役立つ方法です。


コメント