フォルダ名の一括変更
課題・悩み「特定のフォルダ内のすべてのフォルダ名を一括取得したい」
解決策「選択したフォルダ内のすべてのフォルダ名を一括取得してExcelに出力するVBAマクロ」を解説
「今あるフォルダに連番をつけたい」
既存のフォルダの名前のルールを変更するときなど、フォルダを一括変更したいときに、1つ1つのフォルダの名前を変更していくのは効率が悪いです。
そこで、Excelを使ってフォルダ名を一括変更するVBAマクロファイルを作成しました。
【選択したフォルダ内のすべてのフォルダ名を一括取得してExcelに出力するVBAマクロ】を図解で解説しています。
VBAマクロファイルを配布中。
以下のボタンよりダウンロードしてください。
フォルダ名の一括変更
フォルダ内のファイル名を一括取得・変更するVBAマクロファイルの使い方
フォルダ内のファイル名を一括取得・変更するVBAマクロファイルの使い方を解説します。
【フォルダ内のファイル名を一括取得・変更するVBAマクロ】の処理は、①フォルダ名の取得と②フォルダ名の変更の大きく2つにわかれます。
フォルダ内のファイル名を一括取得・変更するVBAマクロファイルの使い方
- ①フォルダ名の取得
- ②フォルダ名の変更
①フォルダ名の取得
【フォルダ名の取得】ボタンのクリック
【フォルダ名の取得】のボタンをクリックします。
①フォルダ名の取得
- 【フォルダ名の取得】ボタンのクリック
- 一括変更したいフォルダを選択
- フォルダ名の一覧の取得完了
一括変更したいフォルダを選択
ダイアログでフォルダ名を取得したいフォルダを選択します。
フォルダ名の一覧の取得完了
B列にフォルダ名の一覧を取得できました。
②フォルダ名の変更
変更したいフォルダ名の入力
C列に変更したいフォルダ名を入力します。
②フォルダ名の変更
- 変更したいフォルダ名の入力
- 【フォルダ名の変更】ボタンのクリック
- フォルダ名の一括変更の完了
【フォルダ名の変更】ボタンのクリック
【フォルダ名の変更】のボタンをクリックします。
フォルダ名の一括変更の完了
フォルダ名の変更が完了しました。
フォルダ内のファイル名を一括取得・変更するVBAマクロのコードのQ&A
- フォルダ内のフォルダ名を効率的に変更する方法は?
-
フォルダ内のフォルダ名を効率的に変更する方法は、①コマンドプロンプトを用いる方法とVBAマクロなどのプログラミングを用いる方法の2種類あります。 VBAを用いてフォルダ名を一括変更する方法と一括変更できるファイルは#フォルダ内のファイル名を一括取得・変更するVBAマクロファイルの使い方で解説・ダウンロードできます。
- VBAを使って大量のフォルダ名を一括変更する方法は?
-
VBAを使って大量のフォルダ名を一括で変更する方法は、NameステートメントやMoveFolderメソッドを使う方法が挙げられます。 フォルダ名を一括で変更するVBAマクロのコードは、#フォルダ内のファイル名を一括取得・変更するVBAマクロファイルの使い方で解説しています。 また、ボタンをクリックするだけでフォルダ名を一括変更できるExcel配布もダウンロードできます。
フォルダ名を一括取得するVBAコードの解説
このコードは、ユーザーが選択したフォルダ内のすべてのサブフォルダ名を取得してExcelの特定のシートに出力するものです。
エクセルのSheet1のB3セルから下にサブフォルダ名が出力され、A1セルには選択したフォルダのパスが記載されます。
エラーハンドリングも実装されており、何か問題が発生した場合にはエラーメッセージが表示されます。
Option Explicit
Sub GetFolderNames()
Dim fldr As FileDialog
Dim strPath As String
Dim folder As Object
Dim subfolder As Object
Dim fso As Object
Dim ws As Worksheet
On Error GoTo ErrorHandler ' エラーハンドリングの設定
' ファイルダイアログの作成
Set fldr = Application.FileDialog(msoFileDialogFolderPicker)
' ダイアログの表示
If fldr.Show <> -1 Then Exit Sub
strPath = fldr.SelectedItems(1)
' 選択されたシートのB3から下のデータを削除
Set ws = ThisWorkbook.Sheets("Sheet1")
ws.Range("B3:B" & ws.Rows.Count).Clear
' FileSystemObjectの作成
Set fso = CreateObject("Scripting.FileSystemObject")
Set folder = fso.GetFolder(strPath)
' 選択されたフォルダ内のすべてのサブフォルダ名を取得
Dim row As Long: row = 3 ' 出力開始行
For Each subfolder In folder.Subfolders
ws.Cells(row, 2).Value = subfolder.Name ' B列にフォルダ名を出力
row = row + 1
Next subfolder
' ダイアログで選択したフォルダのパスをA1に出力
ws.Cells(1, 1).Value = strPath
MsgBox "完了しました" ' 処理が完了したらメッセージを表示
Exit Sub ' 正常終了
ErrorHandler:
MsgBox "エラーが発生しました" ' エラー時のメッセージ表示
End Sub
フォルダ名を一括取得するVBAコードの解説
- コードの変更箇所
コードの変更箇所
出力シートの指定
出力先のシート名が異なる場合、シート名を変更する必要があります
Set ws = ThisWorkbook.Sheets("Sheet1")
コードの変更箇所
- 出力シートの指定
- 出力セルの開始位置
- 出力先の列の指定
出力セルの開始位置
サブフォルダ名の出力開始位置を変更したい場合、開始行の値を変更します
row = 3
出力先の列の指定
サブフォルダ名の出力先列を変更する場合、列番号を変更します
ws.Cells(row, 2).Value = subfolder.Name
注意点
データが非常に大量の場合、サブフォルダ名の取得とExcelへの出力に時間がかかる可能性があります。
エラーハンドリングは一般的なエラーを捉えるためのもので、特定のエラーに対する詳細な処理は実装されていません。
環境設定
このコードはExcelのVBA (Visual Basic for Applications) で実行するもので、対象となるExcelファイルにマクロを有効にする必要があります。
セキュリティの設定によっては、マクロの実行が制限されている場合があるので、設定を確認して必要に応じて変更してください。
各処理
各処理
- フォルダ選択ダイアログの表示
- 選択したシートのクリア
フォルダ選択ダイアログの表示
ユーザーがフォルダを選択するためのダイアログを表示する
' ファイルダイアログの作成
Set fldr = Application.FileDialog(msoFileDialogFolderPicker)
' ダイアログの表示
If fldr.Show <> -1 Then Exit Sub
strPath = fldr.SelectedItems(1)
選択したシートのクリア
選択されたシートのB3から下のデータを削除する
' 選択されたシートのB3から下のデータを削除
Set ws = ThisWorkbook.Sheets("Sheet1")
ws.Range("B3:B" & ws.Rows.Count).Clear
サブフォルダ名の取得
選択されたフォルダ内のサブフォルダ名を取得し、Excelに出力する
' FileSystemObjectの作成
Set fso = CreateObject("Scripting.FileSystemObject")
Set folder = fso.GetFolder(strPath)
選択したフォルダパスの出力
選択したフォルダのパスをA1セルに出力する
' ダイアログで選択したフォルダのパスをA1に出力
ws.Cells(1, 1).Value = strPath
完了メッセージの表示
処理が完了したらメッセージボックスで通知する
MsgBox "完了しました" ' 処理が完了したらメッセージを表示
エラーハンドリング
エラーが発生した場合、エラーメッセージを表示する
ErrorHandler:
MsgBox "エラーが発生しました" ' エラー時のメッセージ表示
フォルダ名を一括変更するVBAマクロのコード
Option Explicit
Sub フォルダ名の変更()
On Error GoTo エラーハンドラ
Dim ws As Worksheet
Dim basePath As String
Dim row As Long
' Sheet1を作業シートとして設定
Set ws = ThisWorkbook.Sheets("Sheet1")
' A1セルから基本となるパスを取得
basePath = ws.Cells(1, 1).Value
' B5セルから始めて、空白のセルが見つかるまでループ
row = 5
Do While ws.Cells(row, 2).Value <> ""
Dim oldFolderName As String, newFolderName As String
oldFolderName = basePath & "\" & ws.Cells(row, 2).Value
newFolderName = basePath & "\" & ws.Cells(row, 3).Value
' 古いフォルダ名が存在する場合、新しい名前に変更
If Dir(oldFolderName, vbDirectory) <> "" Then
Name oldFolderName As newFolderName
End If
' 次の行へ移動
row = row + 1
Loop
' 処理が完了したらメッセージを表示
MsgBox "完了しました", vbInformation
Exit Sub
エラーハンドラ:
' エラーが発生した場合の処理
MsgBox "エラーが発生しました: " & Err.Description, vbExclamation
End Sub
フォルダ名を一括変更するVBAマクロのコード
- コードの変更箇所
- 注意点
コードの変更箇所
コードの変更箇所
- 作業シートの指定
- 基本パスのセル位置
作業シートの指定
作業するシートの名前が「Sheet1」でない場合、シート名に合わせて変更する必要があります。
Set ws = ThisWorkbook.Sheets("Sheet1")
基本パスのセル位置
基本パスがA1セルにない場合、該当するセルに変更する必要があります。
basePath = ws.Cells(1, 1).Value
旧フォルダ名の開始位置
旧フォルダ名がB5セルにない場合、該当するセルに変更する必要があります。
Do While ws.Cells(row, 2).Value <> ""
新フォルダ名の開始位置
新しいフォルダ名がC5セルにない場合、該当するセルに変更する必要があります。
newFolderName = basePath & "\" & ws.Cells(row, 3).Value
注意点
データが大量にある場合、フォルダ名の変更処理に時間がかかる可能性があります。
フォルダ名の変更に失敗すると、マクロはエラーを報告しますが、失敗した理由に応じて別途調査が必要です(例:アクセス権限の不足)。
環境設定
ExcelのVBAエディタでこのマクロを実行するためには、マクロの設定が有効になっている必要があります。
フォルダの名前を変更するために、対象となるフォルダへの適切なアクセス権限が必要です。
各コードの解説
各コードの解説
- エラーハンドリング
- 作業シートの設定
エラーハンドリング
エラーが発生した際に、エラーの詳細をメッセージボックスで表示します。
On Error GoTo エラーハンドラ
作業シートの設定
Sheet1を作業シートとして設定します。
' Sheet1を作業シートとして設定
Set ws = ThisWorkbook.Sheets("Sheet1")
基本パスの取得
A1セルから基本パスを取得します。
' A1セルから基本となるパスを取得
basePath = ws.Cells(1, 1).Value
フォルダ名の変更
B5セルから既存のフォルダ名を取得し、C5セルから新しい名前を取得して変更します。
' B5セルから始めて、空白のセルが見つかるまでループ
row = 5
Do While ws.Cells(row, 2).Value <> ""
Dim oldFolderName As String, newFolderName As String
oldFolderName = basePath & "\" & ws.Cells(row, 2).Value
newFolderName = basePath & "\" & ws.Cells(row, 3).Value
' 古いフォルダ名が存在する場合、新しい名前に変更
If Dir(oldFolderName, vbDirectory) <> "" Then
Name oldFolderName As newFolderName
End If
完了メッセージの表示
処理が完了したら「完了しました」というメッセージを表示します。
' 処理が完了したらメッセージを表示
MsgBox "完了しました", vbInformation
コメント