パソコン作業を効率化する中で、フォルダ名の変更作業は地味ながら時間がかかるものです。特に数十個、数百個といったフォルダ名を一つずつ変更するのは大変です。そんなときに役立つのが、Excel VBAによる自動処理です。
この記事では、Excelのシートに記載した情報をもとに、複数のフォルダを一括でリネームする方法を解説します。実際に動くVBAコードを紹介しながら、初心者でも分かりやすいよう手順を詳しく説明します。
Excel VBAは、ファイルやフォルダに対して直接操作を行える機能を備えています。Windowsのファイルシステムにアクセスし、フォルダの名前を変更するには、Name
ステートメントを使用します。たとえば、以下のような構文です。
Name "C:\旧フォルダ名" As "C:\新フォルダ名"
このコードは、指定されたパスのフォルダ名を別の名前に変更します。ただし、既に同じ名前のフォルダがあるとエラーになるので注意が必要です。
フォルダ名の変更を自動で行うためには、どのフォルダをどんな名前に変更するのか、一覧表を作っておくと便利です。以下のようにExcelのシートに情報を入力してください。
A列:旧フォルダ名 | B列:新フォルダ名 |
---|---|
C:\Users\Example\Folder1 | C:\Users\Example\Project1 |
C:\Users\Example\Folder2 | C:\Users\Example\Project2 |
フォルダの絶対パスで指定するのが安全です。
それでは、実際にVBAでフォルダをリネームするコードを紹介します。
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
手作業でのフォルダリネームは時間と労力がかかりますが、Excel VBAを使えば短時間で一括処理が可能になります。今回ご紹介したマクロは、Excel初心者でも使いやすく実用的なものです。
VBAでの作業はミスが減り、再現性も高いため、業務効率化に大きく貢献します。今後もVBAを活用し、日々の業務改善を進めていきましょう。