フォルダ内のフォルダ名の変更
課題・悩み「Excel VBAでフォルダ名を一括で変更する方法を知りたい」
解決策「Excel VBAを使ってフォルダ名を一括で変更する方法」を解説
Excel VBAを使ってフォルダ名を変更する方法を解説します。
このマクロは、特定のフォルダ内にあるサブフォルダの名前を変更します。
【Excel VBAを使ってフォルダ名を一括で変更する方法】を図解で解説しています。
VBAマクロファイルを配布中。
以下のボタンよりダウンロードしてください。
フォルダ内のフォルダ名の変更
フォルダ内のフォルダ名を変更するVBAマクロのコード
このVBAマクロは、ExcelのSheet1にあるB1セルに入力されているパスのフォルダ内で、B6セル以下のセルに記載されたフォルダ名をC6セル以下のセルに記載された新しいフォルダ名に変更します。
C列が空白の場合や、C列の値がB列の値と同じ場合、そのフォルダ名の変更処理をスキップします。
Option Explicit
Sub ListSubFolders()
Dim fldr As FileDialog
Dim folderPath As String
Dim folder As Object
Dim subFolder As Object
Dim i As Long
' フォルダ選択ダイアログを表示
Set fldr = Application.FileDialog(msoFileDialogFolderPicker)
fldr.Title = "フォルダを選択してください"
If fldr.Show <> -1 Then Exit Sub
folderPath = fldr.SelectedItems(1)
' 選択したフォルダのパスをB1セルに出力
With ThisWorkbook.Sheets("Sheet1")
.Range("B1").Value = folderPath
End With
' B6セルを初期位置に設定
i = 6
With ThisWorkbook.Sheets("Sheet1")
' B6セルから下のデータをすべて削除
.Range("B6:B" & .Cells(.Rows.Count, "B").End(xlUp).Row).ClearContents
' 選択したフォルダ内のサブフォルダを取得
Set folder = CreateObject("Scripting.FileSystemObject").GetFolder(folderPath)
For Each subFolder In folder.SubFolders
.Cells(i, 2).Value = subFolder.Name ' 列番号を4から2に変更
i = i + 1
Next subFolder
End With
End Sub
処理ごとの解説
基本パスの取得
B1セルの値を基本パスとして取得します。
basePath = ws.Range("B1").Value
フォルダ名変更処理のループ
B6セル以下のフォルダ名とC6セル以下の新フォルダ名を取得し、処理を繰り返します。
Do While ws.Range("B" & i).Value <> ""
フォルダ名のチェックと変更
Cセルが空欄、またはBセルとCセルが同じ場合はスキップし、それ以外の場合はフォルダ名を変更します。
If newFolderName = "" Or newFolderName = oldFolderName Then i = i + 1 GoTo NextIteration
フォルダの存在を確認し、存在する場合は名前を変更します。
If Dir(oldFolderPath, vbDirectory) <> "" Then Name oldFolderPath As newFolderPath
完了メッセージの表示
すべてのフォルダ名変更処理が完了したことを通知します。
MsgBox "フォルダの名前変更が完了しました。", vbInformation
注意点
データが大量にある場合は処理に時間がかかります。
VBAマクロで実行した操作は元に戻せません。
実行前にデータのバックアップを取ってください。
処理中にエラーが発生する可能性があるため、適切なエラーハンドリングを検討してください。
必要な環境設定
このマクロを実行するには、ExcelのVBAエディタにアクセスし、コードを標準モジュールに貼り付けてください。
ExcelのVBAプロジェクトで「Microsoft Scripting Runtime」ライブラリの参照を設定する必要があります。
設定方法は、VBAエディタで「ツール」→「参照設定」を選択し、リストから「Microsoft Scripting Runtime」をチェックします。
コードの変更箇所
このコードを利用する際に変更する必要がある箇所は、基本パスが入力されているセル、フォルダ名が入力されているセルの開始位置、およびシート名です。
基本パスが入力されているセル
基本パスが入力されているセルのアドレスを変更します。
basePath = ws.Range("B1").Value
フォルダ名が入力されているセルの開始位置
フォルダ名が入力されているセルの開始位置(B6、C6)を変更します。
i = 6
シート名
利用するシート名が異なる場合は、シート名を変更します。
Set ws = ThisWorkbook.Sheets("Sheet1")
コードの変更例
例えば、基本パスがSheet1のA2セルに入力されている場合や、フォルダ名がB10とC10から始まる場合、またシート名がDataSheetの場合は、次のように変更します。
Set ws = ThisWorkbook.Sheets("DataSheet")
basePath = ws.Range("A2").Value
i = 10
基本パスが入力されているセル
A2セルから基本パスを取得します。
basePath = ws.Range("A2").Value
フォルダ名が入力されているセルの開始位置
B10とC10セルから始まります。
i = 10
シート名
DataSheetを利用します。
Set ws = ThisWorkbook.Sheets("DataSheet")
まとめ
Excel VBAを使ってフォルダ名を一括で変更する方法を解説しました。
このマクロを使えば、フォルダ名を効率的かつ正確に変更することができます。
自分の環境に合わせて適切に設定し、活用してください。
コメント