非プログラマーでもできる!業務の自動化

【Excel VBA】フォルダ名を一括変更する方法

当ページのリンクの一部に広告が含まれています。

課題・悩み「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を使ってフォルダ名を一括で変更する方法を解説しました。

このマクロを使えば、フォルダ名を効率的かつ正確に変更することができます。

自分の環境に合わせて適切に設定し、活用してください。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

目次