Excel VBAで同じフォルダ内の複数ブック名を一括変更する方法|フォルダ名が変わっても動作するマクロ

Excel

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コードを作成することがポイントです。

コメント

タイトルとURLをコピーしました