※本ブログのページには広告主との提携による広告や宣伝、プロモーションが含まれます。当ブログを経由しての商品の購入や、サービス申し込みが発生すると、それらの提携企業からの成果報酬を受けとる場合があります。

VBA|フォルダ名を変更するマクロ(ファイルシステムオブジェクト)

VBA-フォルダ名を変更するマクロ記事のトップ画像

マクロでフォルダ名を変更する方法

マクロでファイル名を変更するためにVBAのコードを書いていきますが、この処理を実行する方法は1つではなくいくつかの方法が存在します。こちらの記事では、当ブログで以前紹介した「ファイル名の変更するマクロ」と同じくファイルシステムオブジェクト(FileSystemObject)を使って、フォルダの名前を変更する方法を紹介していきます。

ファイル名を変更するマクロは以下のリンクから記事をご覧ください。

マクロでフォルダ名を変更するファイルシステムオブジェクトについて

ファイルシステムオブジェクト(FileSystemObject)は外部ライブラリであり、フォルダの作成や削除、移動やコピー、名前の変更などの処理ができるオブジェクトです。

ファイルシステムオブジェクト(FileSystemObject)は、ファイルやフォルダを操作するためのメソッドや情報が確認できるプロパティが準備されています。これらについて詳しく解説した記事は以下のリンクをクリックしてください。

マクロでフォルダ名を変更するサンプルコード

フォルダ名を変更するマクロで使えるVBAコードをいくつかの目的別に紹介します。目下の作業で利用できそうなものがあれば参考にしてください。

解説文の中のファイルシステムオブジェクト(FileSystemObject)のメソッドやプロパティの部分にはリンクをつけています。

フォルダの名前を事前に指定したものに変更するマクロ

1つのフォルダの名前を変更するサンプルコードです。こちらはVBAコード内に指定したフォルダ名に変更します。

1つのフォルダを事前に指定した名前に変えるマクロだよ。

  
Option Explicit

Sub フォルダ名を変更するマクロ()

    'ファイルシステムオブジェクトを使うため準備
    '①事前バインディングの場合はVBEのツールより参照設定で「Microsoft Scripting Runtime」にチェックをしてください。
    Dim FSO As FileSystemObject
    Set FSO = New FileSystemObject

    '名前を変更したいフォルダをオブジェクトとして参照する変数を宣言する
    Dim SampleFolder As Object

    '名前を変更したいフォルダをオブジェクトとして取得する
    Set SampleFolder = FSO.GetFolder("C:\Users\XXXXXX\Desktop\テスト")

    '変更したいフォルダ名を右辺に記入する
    SampleFolder.NAME = "Test"

End Sub

こちらのマクロの実行結果は、「テスト」という名前のフォルダを「Test」に変更します。

11行目

名前を変更したいフォルダオブジェクトを代入するための変数としてSampleFolderを宣言しています。

14行目

GetFolderメソッドを利用して、SampleFolderにデスクトップにある”テスト”という名前のフォルダを代入します。

17行目

NAMEプロパティを使って、SampleFolderの名前”テスト”から”Test”に変更しています。

Testという名前に変更するマクロのVBAコードだね。

フォルダの名前を入力ボックスで指定したものに変更するマクロ

1つのフォルダの名前を変更するサンプルコードです。こちらは入力ボックスに記入した任意のフォルダ名に変更します。

入力ボックスに指定したファイル名にしたいならこっちだね。

  
Option Explicit

Sub 任意のフォルダ名に変更するマクロ()
    'ファイルシステムオブジェクトを使うため準備
    '①事前バインディングの場合はVBEのツールより参照設定で「Microsoft Scripting Runtime」にチェックをしてください。
    Dim FSO As FileSystemObject
    Set FSO = New FileSystemObject

    '名前を変更したいフォルダをオブジェクトとして参照する変数を宣言する
    Dim SampleFolder As Object

    '名前を変更したいフォルダをオブジェクトとして取得する
    Set SampleFolder = FSO.GetFolder("C:\Users\XXXXXX\Desktop\テスト")

    '変更したい名前を代入する変数を宣言する
    Dim NewName As String

    '宣言した変数に入力ボックスの文字列を代入する
    NewName = Application.InputBox("新しいフォルダ名を入力してください。", "ファイル名を入力", Type:=1 + 2)

    'フォルダ名をインプットボックスに入力した文字列に変更する
    SampleFolder.NAME = NewName

End Sub

このマクロでは、指定したフォルダの名前を入力ボックスに入力した名前に変更します。例えば、入力ボックスに「Test」と入力した場合は、「テスト」フォルダを「Test」フォルダに変更します。

16行目

新しい名前を受け取る変数としてNewNameを宣言しています。

19行目

Application.InputBoxメソッドによって、名前の入力ボックスを表示します。このボックスに入力された文字列を先に宣言した変数NewNameに代入します。

22行目

NAMEプロパティを使って、SampleFolderの名前”テスト”から変数NewNameに変更します。

こちらのVBAサンプルコードで使った、入力ボックスを表示するApplication.InputBoxメソッドは引数の指定で文字種を指定しています。Application.InputBoxメソッドについて詳しく解説している記事は以下のリンクよりご覧ください。

選択したフォルダのサブフォルダ名をまとめて変更するマクロ

指定したフォルダに入っているフォルダの名前をまとめて変更(リネーム)するマクロのVBAサンプルコードです。

ネット上でよく見かけるものは、エクセルのワークシートなどに事前に既存の名前と新しい名前をあらかじめ入力しておくものが多いですが、こちらのマクロは入力ボックスでユーザーが入力した名前に変更する点が特徴です。

  
Sub 選択したフォルダのサブフォルダの名前をまとめて変更するマクロ()
    'ファイルシステムオブジェクトを使うため準備
    '①事前バインディングの場合はVBEのツールより参照設定で「Microsoft Scripting Runtime」にチェックをしてください。
    Dim FSO As FileSystemObject
    Set FSO = New FileSystemObject

    'ダイアログで指定したパスを代入する変数を宣言する。
    Dim SampleFolderPath As String

    'アプリケーションオブジェクトのFileDialogプロパティを利用する。
    With Application.FileDialog(msoFileDialogFolderPicker)

    'FileDialogメンバーのShowメソッドをつかってフォルダ選択画面を表示する。
        If .Show = False Then
            MsgBox "フォルダを選択してください" & vbCrLf & "マクロを終了します。", vbCritical + vbOKOnly, "操作不正通知"
            Exit Sub
        Else
            'FileDialogメンバーのSelectedItemsプロパティで選択したフォルダのパスを変数に代入する。
            SampleFolderPath = .SelectedItems(1)
        End If
    End With

    '名前を変更したいフォルダをオブジェクトとして参照する変数を宣言する。
    Dim SampleFolder As Object

    '名前を変更したいフォルダをオブジェクトとして取得する。
    Set SampleFolder = FSO.GetFolder(SampleFolderPath)

    '変更したい名前を代入する変数を宣言する。
    Dim NewName As Variant

    'フォルダ配下のすべてファイルの数だけファイル名変更をくり返す。
    For Each SampleFolder In SampleFolder.SubFolders
        '宣言した変数に入力ボックスの文字列を代入する。入力ボックスが空白でなくなるまでくり返す。
        Do
            NewName = Application.InputBox _
            (SampleFolder.NAME & " の新しいフォルダ名を入力してください。", "フォルダ名を入力", Type:=1 + 2)
        Loop Until NewName <> "" And NewName <> False

        'FolderExistsメソッドを利用して新しいフォルダ名が既に存在するかを判定する
        If FSO.FolderExists(SampleFolderPath & "\" & NewName) Then
        
        'フォルダ名が重複している場合はメッセージを表示してマクロを終了する
            MsgBox "フォルダ名が重複しています。" & vbCrLf & " マクロを終了します。", vbCritical, "フォルダ名の重複"
            Exit Sub
        Else
            'フォルダ名をインプットボックスに入力した文字列に変更する。
            SampleFolder.NAME = NewName

            '入力ボックスに入力した新しいファイル名をリセット
            NewName = ""
        End If

    Next SampleFolder

End Sub

08行目

名前を変更するフォルダのパスを代入するための変数としてSampleFolderPathを宣言しています。

11行目

FileDialogプロパティでFileDialogオブジェクトを取得しています。ここでは、ユーザーにフォルダの選択をうながす画面を選択を許可する値(msoFileDialogFolderPicker)の条件で指定しています。
※以下のフォルダを選択するダイアログの画像を参照

フォルダを選択するダイアログの画像

14行目から20行目

FileDialogオブジェクトのShowメソッドでフォルダ選択画面を表示する処理をしています。フォルダを選択する画面でフォルダが選択されずにキャンセルされた値が返されると、メッセージを表示してマクロを終了します。ユーザーによってフォルダが正常に選択されたときは、選択されたフォルダのパスを変数SampleFolderPathに代入します。
(※FileDialog.SelectedItemsプロパティはフォルダ選択画面で選択されたフォルダのパスを取得できます。)

24行目

名前を変更したいフォルダを代入するための変数SampleFolderを宣言しています。

27行目

ファイルシステムオブジェクトのGetFolderメソッドを利用して変数SampleFolderSampleFolderPathのパスにあるフォルダを代入します。

30行目

変更したい名前を代入する変数NewNameを宣言しています。
こちらの変数であとの入力ボックスでユーザーからの入力された値を受け取ります。

33行目

フォルダ選択画面で選択されたフォルダの配下にあるフォルダすべてを対象にくり返し文をつかっています。SampleFolderのSubFoldersプロパティをつかうことで配下にあるすべてのフォルダが対象になります。

35行目から38行目

DoLoopのくり返し文で入力ボックスにフォルダの新しい名前が入力されなかったとき、入力画面でキャンセルが指定されたときは入力ボックスを表示し続ける処理をします。入力ボックスに入力された新しい名前は変数のNewNameで受け取っています。
(※入力なし、キャンセル操作でフォルダの名前がないといった状態が発生することを予防しています。)

新しい名前を入力するダイアログ(インプットボックス)

41行目

FolderExistsメソッドをつかって、新たに指定した名前がすでに存在しているファイル名と同じになっていないかを判定しています。

48行目

41行目の判定で指定された名前が重複していなかった場合は、NAMEプロパティをつかってフォルダの名前を書きかえます。

サブフォルダ名をまとめて変更するマクロのフローチャート

選択したフォルダのサブフォルダ名をまとめて変更するマクロの処理のながれをフローチャートです。コードでは条件分岐やくり返し処理のながれがわかりにくい場合はこちらを参考にしてください。

フローチャート

これで指定したフォルダの配下にあるフォルダの名前をまとめて変更できるよ。

コダマのもりブログはにほんブログ村に登録しています。
ブログの記事が役に立ったと感じて頂けたら、フォローお願いいたします。

コメント

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