Excel VBAを使って複数のブック名を一括変更したい場合、固定パスを指定するとフォルダ名が変わった際にマクロが動かなくなることがあります。この記事では、総括表ブックを基準にして、同じフォルダ内にある複数のデータファイルの名前を001~006のように変更する方法を解説します。
Excel VBAでブック名を変更するときの基本的な考え方
VBAでファイル名を変更する場合は、対象ファイルが保存されているフォルダの場所を取得し、そのフォルダ内のブックを操作する方法が便利です。
今回のようにフォルダ名がAからBへ変更される可能性がある場合は、Cドライブ直下などの固定パスをコードに書くのではなく、マクロを実行する総括表ブック自身の保存場所を取得します。
例えば、総括表ファイルが保存されているフォルダを基準にすれば、フォルダ名が変更されても同じ場所にあるデータファイルを正しく参照できます。
総括表のセル情報を利用してブック名を変更するVBAサンプル
以下のように、総括表に記載された変更前のファイル名と変更後のファイル名を読み込み、同一フォルダ内のブック名を変更できます。
※総括表のA列に変更前の名前、B列に変更後の名前が入力されている例です。
Sub ブック名一括変更()
Dim folderPath As String
Dim oldName As String
Dim newName As String
Dim i As Long
folderPath = ThisWorkbook.Path & "\"
i = 2
Do While Cells(i, 1).Value <> ""
oldName = Cells(i, 1).Value
newName = Cells(i, 2).Value
If Dir(folderPath & oldName) <> "" Then
Name folderPath & oldName As folderPath & newName
End If
i = i + 1
Loop
MsgBox "ファイル名変更が完了しました"
End Sub
このマクロでは、ThisWorkbook.Pathを利用しているため、総括表ブックが保存されているフォルダを自動取得します。そのため、フォルダ名が変更されてもコード修正は不要です。
CONCATENATE関数で作成した名前をVBAで利用する場合の注意点
総括表側でCONCATENATE関数やCONCAT関数を使って001~006などの新しい名前を作成している場合、そのセルの値をVBAから取得することは可能です。
ただし、ファイル名として利用する場合は、セルに表示されている文字列が正しく生成されているか確認してください。例えば、001が数値の1として扱われると、ファイル名変更時に001ではなく1になる場合があります。
必要に応じてセルの表示形式を文字列に設定したり、VBA側でFormat関数を使用して桁数を指定すると安全です。
複数ファイルを連番に変更する場合の実用例
例えば、同じフォルダ内に以下のようなファイルがある場合を考えます。
| 変更前 | 変更後 |
|---|---|
| 売上データ.xlsx | 001.xlsx |
| 在庫データ.xlsx | 002.xlsx |
| 顧客データ.xlsx | 003.xlsx |
総括表に変更前と変更後の名前を一覧化しておけば、ファイル数が増えても一覧を追加するだけで対応できます。
毎日更新されるデータファイルや、月次処理で大量のExcelファイルを整理する作業では、この方法を利用すると手作業による名前変更ミスを防げます。
ファイル名変更マクロを実行するときの注意点
VBAのNameステートメントでファイル名を変更する場合、同じ名前のファイルがすでに存在するとエラーになります。
また、対象ファイルが開かれている状態では名前変更できないため、マクロ実行前に対象となるデータファイルを閉じておく必要があります。
重要なファイルを扱う場合は、実行前にフォルダをコピーしてバックアップを作成しておくと安心です。
まとめ|ThisWorkbook.Pathを使えばフォルダ名変更にも対応できる
Excel VBAで複数ブックの名前を一括変更する場合は、固定されたフォルダパスを指定するのではなく、ThisWorkbook.Pathを利用して現在の保存場所を取得する方法がおすすめです。
総括表に変更前と変更後のファイル名を管理しておけば、001~006のような連番への変更も簡単に自動化できます。
フォルダ名が変わる運用環境でも安定して動作させるためには、ファイルの場所を柔軟に取得するVBAコードを作成することがポイントです。


コメント