マクロでフォルダ名を変更する方法
マクロでファイル名を変更するためにはVBAのコード作成することになりますが、この処理を実行する方法は1つではなく複数存在します。こちらの記事では、当ブログで以前紹介した「ファイル名の変更するマクロ」と同じくファイルシステムオブジェクト(FileSystemObject)を使って、フォルダの名前を変更する方法を紹介していきます。
ファイル名を変更するマクロは以下のリンクから記事をご覧ください。
マクロでフォルダ名を変更するファイルシステムオブジェクトについて
ファイルシステムオブジェクト(FileSystemObject)は外部ライブラリであり、フォルダの作成や削除、移動やコピー、名前の変更などの処理ができるオブジェクトです。
ファイルシステムオブジェクト(FileSystemObject)は、ファイルやフォルダを操作するためのメソッドやプロパティが準備されています。これらについて詳しく解説した記事は以下のリンクをクリックしてください。
マクロでフォルダ名を変更するサンプルコード
フォルダ名を変更するマクロで使えるVBAコードをいくつかの目的別に紹介します。目下の作業で利用できそうなものがあれば参考にしてください。
解説文の中のファイルシステムオブジェクト(FileSystemObject)のメソッドやプロパティの部分にはマーカーをつけています。
フォルダ名を変更する
1つのフォルダの名前を変更するサンプルコードです。こちらはVBAコード内に指定したフォルダ名に変更します。
1つのフォルダを事前に指定した名前に変えるマクロだよ。
サンプルコード
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」に変更します。
ポイントとなるコードの解説
Set SampleFolder = FSO.GetFolder(“C:\Users\XXXXXX\Desktop\テスト”)
ファイルシステムオブジェクト(FileSystemObject)のGetFolderメソッドを使って変数の「SampleFolder」に対象となるフォルダオブジェクトを代入しています。
SampleFile.NAME = “Test”
ファイルシステムオブジェクト(FileSystemObject)のNAMEプロパティを使って変数の「SampleFolder」に代入したフォルダの「テスト」を「Test」に設定します。
フォルダならGetFolderメソッド、ファイルならGetFileメソッドにするんだね。
入力ボックスで指定したフォルダ名に変更する
1つのフォルダの名前を変更するサンプルコードです。こちらは入力ボックスに記入した任意のフォルダ名に変更します。
入力ボックスに指定したファイル名にしたいならこっちだね。
サンプルコード
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」フォルダに変更します。
ポイントとなるコードの解説
NewName = Application.InputBox(“新しいフォルダ名を入力してください。”, “ファイル名を入力”, Type:=1 + 2)
変更したい名前を入力ボックスを表示して、ユーザーから受けとった文字列を変数の「NewName」に代入します。Application.InputBoxではType引数を指定することで入力内容の制限ができます。Type:=1+2は数値と文字列の入力に制限しています。詳しくは以下の記事をご確認ください。
\InputBoxメソッドについてはこちらをクリック/
選択したフォルダのサブフォルダ名をまとめて変更する
指定したフォルダに入っているフォルダの名前をまとめて変更(リネーム)するサンプルコードです。
ネット上でよく見かけるものはエクセルのワークシートなどに事前に既存の名前と新しい名前を入力しておくものが多いですが、こちらのマクロは入力ボックスでユーザーが入力した名前に変更していくものです。
サンプルコード
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
'FileExistsメソッドを利用して新しいフォルダ名が既に存在するかを判定する
If FSO.FolderExists(SampleFolderPath & "\" & NewName) Then
'フォルダ名が重複している場合はメッセージを表示してマクロを終了する
MsgBox "フォルダ名が重複しています。" & vbCrLf & " マクロを終了します。", vbCritical, "フォルダ名の重複"
Exit Sub
Else
'フォルダ名をインプットボックスに入力した文字列に変更する。
SampleFolder.NAME = NewName
'入力ボックスに入力した新しいファイル名をリセット
NewName = ""
End If
Next SampleFolder
End Sub
Application.FileDialog(msoFileDialogFolderPicker)
アプリケーションオブジェクトのFileDialogでユーザーにフォルダの選択を許可する値(msoFileDialogFolderPicker)を指定しています。
FileDialogのメンバーで続けて処理をおこなうため、Withステートメントを使って同じコードの記入を省略しています。
If .Show = False Then
Application.FileDialog(msoFileDialogFolderPicker).Showでフォルダを選択するダイアログ(下の画像)を表示します。
Withステートメントがあるため、.Showを書くことで同じ動作をします。
また、表示したダイアログでユーザーがキャンセルをクリックしたときの戻り値を想定して、Falseが渡された場合はフォルダを選択する旨のメッセージを表示し、マクロを終了する対処をしています。
SampleFolderPath = .SelectedItems(1)
こちらもWithステートメントの中に書きこみます。FileDialog.SelectedItemsプロパティはFileDialogオブジェクトのメンバーであり、フォルダを選択するダイアログでユーザーが選択したフォルダのパスをコレクションとして取得します。
このSelectedItemsプロパティを使って、選択したフォルダのパスを変数の「SampleFolderPath」に代入します。
ダイアログで指定したフォルダのパスが取得できるよ。
Set SampleFolder = FSO.GetFolder(SampleFolderPath)
SelectedItemsプロパティで取得したフォルダパスを元に、今度はファイルシステムオブジェクト(FileSystemObject)のGetFolderメソッドを使ってFolderオブジェクトを取得しています。
取得したFolderオブジェクトは変数の「SampleFolder」に代入しています。
Dim NewName As Variant
変数「NewName」を宣言しています。ここで文字列(String)型ではなく、バリアント型にしているのはフォルダ名の入力ダイアログにて「キャンセル」が選択された戻り値を想定しているためです。
For Each SampleFolder In SampleFolder.SubFolders ~ Next SampleFolder
ForEachを使ったくり返し文です。変数「SampleFolder」のFolderオブジェクトのSubFoldersプロパティを使って「SampleFolder」の中に入っているフォルダの数だけ処理をくり返します。
Do ~ Loop Until NewName <> “” And NewName <> False
DoLoopを使ったくり返し文です。くり返す処理は新しいフォルダ名の入力をユーザーに促すダイアログ表示しますが、ユーザーが入力された値が空文字””である場合や、キャンセルがクリックされたときはその先に進めないようにしています。
ここで何も入力せずOKされたり、キャンセルされたりしたときの対処だよ。
If FSO.FolderExists(SampleFolderPath & “\” & NewName) Then
If文を使った条件判定式です。具体的にはユーザーが入力した新しいフォルダの名前が同じフォルダ内に存在しないかをFolderExistsメソッドで判定しています。ユーザーから入力されたフォルダ名が既に存在する場合は警告メッセージを表示してマクロを終了します。
SampleFolder.NAME = NewName
ファイルシステムオブジェクト(FileSystemObject)のNAMEプロパティで新しい名前に変更します。
選択したフォルダの中のフォルダの数だけ名前の変更ができるよ。
サブフォルダ名をまとめて変更するマクロのフローチャート
選択したフォルダのサブフォルダ名をまとめて変更するマクロの処理のながれをフローチャートです。コードではわ条件分岐やくり返し処理のながれがわかりにくい場合はこちらを参考にしてください。
ひし形の部分で分岐する処理をしているよ。
コダマのもりブログはにほんブログ村に登録しています。
ブログの記事が役に立ったと感じて頂けたら、フォローお願いいたします。
コメント