Categories: excel

Excel VBAで複数フォルダを一括リネームする方法|実用マクロ付き解説

パソコン作業を効率化する中で、フォルダ名の変更作業は地味ながら時間がかかるものです。特に数十個、数百個といったフォルダ名を一つずつ変更するのは大変です。そんなときに役立つのが、Excel VBAによる自動処理です。
この記事では、Excelのシートに記載した情報をもとに、複数のフォルダを一括でリネームする方法を解説します。実際に動くVBAコードを紹介しながら、初心者でも分かりやすいよう手順を詳しく説明します。


Excel VBAでフォルダをリネームする仕組みとは?

Excel VBAは、ファイルやフォルダに対して直接操作を行える機能を備えています。Windowsのファイルシステムにアクセスし、フォルダの名前を変更するには、Nameステートメントを使用します。たとえば、以下のような構文です。

Name "C:\旧フォルダ名" As "C:\新フォルダ名"

このコードは、指定されたパスのフォルダ名を別の名前に変更します。ただし、既に同じ名前のフォルダがあるとエラーになるので注意が必要です。


事前準備|Excelに変更前と変更後のフォルダ名を記載

フォルダ名の変更を自動で行うためには、どのフォルダをどんな名前に変更するのか、一覧表を作っておくと便利です。以下のようにExcelのシートに情報を入力してください。

A列:旧フォルダ名B列:新フォルダ名
C:\Users\Example\Folder1C:\Users\Example\Project1
C:\Users\Example\Folder2C:\Users\Example\Project2

フォルダの絶対パスで指定するのが安全です。


VBAコードの作成手順

それでは、実際にVBAでフォルダをリネームするコードを紹介します。

手順1:VBAエディタを開く

  1. Excelを開き、「開発」タブをクリック。
  2. 「Visual Basic」を選択し、VBAエディタを起動。
  3. 「挿入」→「標準モジュール」を選び、以下のコードを貼り付けます。
Sub RenameFolders()

Dim ws As Worksheet
Dim i As Long
Dim oldName As String
Dim newName As String

Set ws = ThisWorkbook.Sheets(1) ' シート1を参照

i = 2 ' 2行目から開始(1行目は見出しと想定)

Do While ws.Cells(i, 1).Value <> ""
oldName = ws.Cells(i, 1).Value
newName = ws.Cells(i, 2).Value

' フォルダが存在するか確認
If Dir(oldName, vbDirectory) <> "" Then
' 新しい名前のフォルダが既に存在しないか確認
If Dir(newName, vbDirectory) = "" Then
Name oldName As newName
Else
MsgBox "新しいフォルダ名が既に存在します:" & newName, vbExclamation
End If
Else
MsgBox "フォルダが存在しません:" & oldName, vbCritical
End If

i = i + 1
Loop

MsgBox "フォルダのリネーム処理が完了しました。", vbInformation

End Sub

エラーを防ぐためのチェックポイント

フォルダ名変更でエラーにならないよう、以下の点を確認しましょう。

  • フォルダのパスが正しいか?
    パスが間違っていると「存在しません」というエラーになります。
  • 新しいフォルダ名が既に存在しないか?
    既存のフォルダと同じ名前に変更しようとすると失敗します。
  • ファイルではなくフォルダであるか?
    ファイルに対してNameを使うときは、拡張子を含める必要があります。
  • フォルダが使用中ではないか?
    他のアプリケーションで開かれていると変更できない場合があります。

便利な応用例|接頭辞や接尾辞を自動追加

応用として、「すべてのフォルダに接頭辞 ‘完了_’ を付ける」などの一括処理も可能です。

vbaコピーする編集するSub AddPrefixToFolders()

    Dim ws As Worksheet
    Dim i As Long
    Dim oldName As String
    Dim newName As String
    Dim prefix As String

    prefix = "完了_"
    Set ws = ThisWorkbook.Sheets(1)
    i = 2

    Do While ws.Cells(i, 1).Value <> ""
        oldName = ws.Cells(i, 1).Value
        newName = Left(oldName, InStrRev(oldName, "\") - 1) & "\" & prefix & Mid(oldName, InStrRev(oldName, "\") + 1)

        If Dir(oldName, vbDirectory) <> "" And Dir(newName, vbDirectory) = "" Then
            Name oldName As newName
        End If

        i = i + 1
    Loop

    MsgBox "接頭辞の追加が完了しました。", vbInformation

End Sub

まとめ|VBAで作業時間を大幅に短縮しよう

手作業でのフォルダリネームは時間と労力がかかりますが、Excel VBAを使えば短時間で一括処理が可能になります。今回ご紹介したマクロは、Excel初心者でも使いやすく実用的なものです。
VBAでの作業はミスが減り、再現性も高いため、業務効率化に大きく貢献します。今後もVBAを活用し、日々の業務改善を進めていきましょう。

upandup

Web制作の記事を中心に、暮らし、ビジネスに役立つ情報を発信します。 アフィリエイトにも参加しています。よろしくお願いいたします。