フォルダ内のファイル名の一括変更
「決まったルールでフォルダ内のファイル名を変更したい」
でも、いちいち1つ1つのファイルを変更するのは面倒。
そんな面倒な作業も、そんな面倒な作業も、ExcelのVBAマクロを使えば、自動で処理できます。
【フォルダ内のファイル名を一括で変更】するExcel VBAマクロのコードを解説しています。
ボタンで【フォルダ内のファイル名を一括で変更】ができる、Excelシートを無料配布。
フォルダ内のファイル名の一括変更
【フォルダ内のファイル名を一括で変更】するVBAマクロの内容
フォルダ内のファイル名を一括で変更できるExcel VBAマクロブックには、以下の2つのコードを記載しています。
【フォルダ内のファイル名を一括で変更】するVBAマクロの内容
- フォルダ内のファイル名を取得するExcelVBAマクロのコード
- Excelのセルのデータを用いてフォルダ内のシート名を変更する VBAマクロのコード
フォルダ内のファイル名を取得するExcelVBAマクロのコード
以下のコードを実行すると、特定のフォルダ内にあるすべてのファイルのファイル名を取得して、Excelに一覧として出力します。
ボタンを押すとダイアログが表示されるので、ファイル名を一括表示したいフォルダを選択してください。
Sub GetFileNames()
Dim FolderPath As String
Dim Filename As String
Dim i As Integer
Dim FileBaseName As String
Dim FileExtension As String
' フォルダ選択ダイアログを表示
With Application.FileDialog(msoFileDialogFolderPicker)
If .Show = -1 Then ' ユーザーがフォルダを選択した場合
FolderPath = .SelectedItems(1)
Else ' ユーザーがキャンセルした場合
Exit Sub
End If
End With
i = 2 'B列とC列の開始行を2行目に設定
Filename = Dir(FolderPath & "\*.*") 'フォルダ内の最初のファイル名を取得
'フォルダ内の全ファイルを処理
Do While Filename <> ""
'ファイル名と拡張子を分割
FileBaseName = Left(Filename, InStrRev(Filename, ".") - 1)
FileExtension = Right(Filename, Len(Filename) - InStrRev(Filename, "."))
'ファイル名をB列に、拡張子をC列に出力
ThisWorkbook.ActiveSheet.Cells(i, 2).Value = FileBaseName
ThisWorkbook.ActiveSheet.Cells(i, 3).Value = FileExtension
i = i + 1 '次の行へ
Filename = Dir '次のファイル名を取得
Loop
End Sub
Excelのセルのデータを用いてフォルダ内のシート名を変更する VBAマクロのコード
次に以下のコードを実行すると、Excelに入力したフォルダ名に変更します。
Sub RenameFiles()
Dim FolderPath As String
Dim oldFilename As String
Dim newFilename As String
Dim i As Integer
Dim FSO As Object
' フォルダ選択ダイアログを表示
With Application.FileDialog(msoFileDialogFolderPicker)
If .Show = -1 Then ' ユーザーがフォルダを選択した場合
FolderPath = .SelectedItems(1)
Else ' ユーザーがキャンセルした場合
Exit Sub
End If
End With
Set FSO = CreateObject("Scripting.FileSystemObject")
i = 2 'B列、C列、D列の開始行を2行目に設定
Do While ThisWorkbook.ActiveSheet.Cells(i, 2).Value <> ""
oldFilename = FolderPath & "\" & ThisWorkbook.ActiveSheet.Cells(i, 2).Value & "." & ThisWorkbook.ActiveSheet.Cells(i, 3).Value
newFilename = FolderPath & "\" & ThisWorkbook.ActiveSheet.Cells(i, 4).Value & "." & ThisWorkbook.ActiveSheet.Cells(i, 3).Value
If FSO.FileExists(oldFilename) Then
FSO.MoveFile oldFilename, newFilename
End If
i = i + 1 '次の行へ
Loop
Set FSO = Nothing
End Sub
フォルダ内のファイル名の一括変更
【フォルダ内のファイル名を一括で変更】するExcelマクロブックの使い方
配布している【フォルダ内のファイル名を一括で変更】するExcelマクロブックの使い方を説明します。
【フォルダ内のファイル名を一括で変更】するExcelマクロブックの使い方
- フォルダ名の取得
- 変更したいファイル名を入力
- ファイル名の一括変更
フォルダ名の取得
【ファイル名一覧取得】のボタンを押すと、ダイアログが出てくるので、名前を変更したいファイルが保存してあるフォルダを選択します。
マクロを実行すると、フォルダ内のファイル名がB列に表示されます。
変更したいファイル名を入力
対応するD列に、変更したいファイル名を入力してください。
ファイル名の一括変更
【ファイル名の変更】を押すと、ファイル名を一括で変更できます。
フォルダ内のファイル名の一括変更
フォルダ内のファイル名を取得するExcelVBAマクロのコードの解説
フォルダ内のファイル名を取得するExcelVBAマクロのコードの解説
- エラーハンドリングの開始
- 変数の定義
- フォルダ選択ダイアログの表示
- フォルダパスの出力
- ファイル名の取得
- フォルダ内の全ファイルを処理
- 完了のダイアログを表示
- エラーハンドリングをスキップ
- エラーハンドリング
Sub GetFileNames()
On Error GoTo ErrorHandler ' エラーハンドリングの開始
Dim FolderPath As String
Dim Filename As String
Dim i As Integer
Dim FileBaseName As String
Dim FileExtension As String
' フォルダ選択ダイアログを表示
With Application.FileDialog(msoFileDialogFolderPicker)
If .Show = -1 Then ' ユーザーがフォルダを選択した場合
FolderPath = .SelectedItems(1)
Else ' ユーザーがキャンセルした場合
Exit Sub
End If
End With
' ユーザーが選択したフォルダのパスをThisWorkbookのSheet1のA1に出力
ThisWorkbook.Sheets("Sheet1").Range("A1").Value = FolderPath
i = 2 'B列とC列の開始行を2行目に設定
Filename = Dir(FolderPath & "\*.*") 'フォルダ内の最初のファイル名を取得
'フォルダ内の全ファイルを処理
Do While Filename <> ""
'ファイル名と拡張子を分割
FileBaseName = Left(Filename, InStrRev(Filename, ".") - 1)
FileExtension = Right(Filename, Len(Filename) - InStrRev(Filename, "."))
'ファイル名をB列に、拡張子をC列に出力
ThisWorkbook.ActiveSheet.Cells(i, 2).Value = FileBaseName
ThisWorkbook.ActiveSheet.Cells(i, 3).Value = FileExtension
i = i + 1 '次の行へ
Filename = Dir '次のファイル名を取得
Loop
MsgBox "操作が正常に完了しました!", vbInformation ' 完了のダイアログを表示
Exit Sub ' エラーハンドリングをスキップ
ErrorHandler: ' エラーハンドリング
MsgBox "エラー " & Err.Number & ": " & Err.Description, vbCritical
End Sub
エラーハンドリングの開始
予期せぬエラーが発生した場合に、エラーメッセージを表示するためのエラーハンドラの開始を宣言します。
On Error GoTo ErrorHandler
変数の定義
必要な変数を宣言します。フォルダパス、ファイル名、カウンタ、ファイルの基本名、ファイルの拡張子を格納するための変数です。
Dim FolderPath As String...Dim FileExtension As String
フォルダ選択ダイアログの表示
ユーザーにフォルダ選択ダイアログを表示します。ユーザーがフォルダを選択した場合、そのパスをFolderPathに保存します。ユーザーがキャンセルした場合、サブプロシージャを終了します。
With Application.FileDialog(msoFileDialogFolderPicker)...End With
フォルダパスの出力
ユーザーが選択したフォルダのパスをThisWorkbookのSheet1のA1に出力します。
ThisWorkbook.Sheets("Sheet1").Range("A1").Value = FolderPath
ファイル名の取得
フォルダ内の最初のファイル名を取得します。
Filename = Dir(FolderPath & "\*.*")
フォルダ内の全ファイルを処理
フォルダ内の全ファイルに対してループ処理を行います。ファイル名と拡張子を分割し、それぞれをB列とC列に出力します。
Do While Filename <> ""...Loop
完了のダイアログを表示
全ファイルの処理が完了したら、メッセージボックスを表示します。
MsgBox "操作が正常に完了しました!", vbInformation
エラーハンドリングをスキップ
メインの処理が正常に完了したら、エラーハンドリング部分をスキップします。
Exit Sub
エラーハンドリング
エラーが発生した場合の処理を行います。エラーメッセージを表示します。
ErrorHandler:...MsgBox "エラー " & Err.Number & ": " & Err.Description, vbCritical
フォルダ内のファイル名の一括変更
Excelのセルのデータを用いてフォルダ内のシート名を変更する VBAマクロのコードの解説
Excelのセルのデータを用いてフォルダ内のシート名を変更する VBAマクロのコードの解説
- サブプロシージャの開始
- エラーハンドリングの開始
- 変数の宣言
- FolderPathの取得
- FileSystemObjectの生成
- ループカウンタの初期化
- ループの開始
- 古いファイル名と新しいファイル名の設定
- ファイル名の変更
- ループカウンタの更新
- ループの終了
- 完了のメッセージボックスの表示
- FileSystemObjectの解放
- サブプロシージャの終了
- エラーハンドリングの終了
Sub RenameFiles()
On Error GoTo ErrorHandler ' エラーハンドリングの開始
Dim FolderPath As String
Dim oldFilename As String
Dim newFilename As String
Dim i As Integer
Dim FSO As Object
' FolderPathをThisWorkBookのSheet1のA1セルのデータを参照
FolderPath = ThisWorkbook.Sheets("Sheet1").Range("A1").Value
Set FSO = CreateObject("Scripting.FileSystemObject")
i = 2 'B列、C列、D列の開始行を2行目に設定
Do While ThisWorkbook.ActiveSheet.Cells(i, 2).Value <> ""
oldFilename = FolderPath & "\" & ThisWorkbook.ActiveSheet.Cells(i, 2).Value & "." & ThisWorkbook.ActiveSheet.Cells(i, 3).Value
newFilename = FolderPath & "\" & ThisWorkbook.ActiveSheet.Cells(i, 4).Value & "." & ThisWorkbook.ActiveSheet.Cells(i, 3).Value
' If the new filename or the value in D column does not exist, skip this file
If Not FSO.FileExists(newFilename) And ThisWorkbook.ActiveSheet.Cells(i, 4).Value <> "" Then
If FSO.FileExists(oldFilename) Then
FSO.MoveFile oldFilename, newFilename
End If
End If
i = i + 1 '次の行へ
Loop
MsgBox "操作が正常に完了しました!", vbInformation ' 完了のダイアログを表示
Set FSO = Nothing
Exit Sub ' エラーハンドリングをスキップ
ErrorHandler: ' エラーハンドリング
MsgBox "エラー " & Err.Number & ": " & Err.Description, vbCritical
End Sub
サブプロシージャの開始
サブプロシージャRenameFilesの開始を宣言します。このサブプロシージャは、Excelのファイル名を変更するためのものです。
Sub RenameFiles()
エラーハンドリングの開始
VBAでは、エラーハンドリングはOn Errorステートメントを使用して行います。これはプロシージャが途中でエラーを引き起こす可能性があるためです。
On Error GoTo ErrorHandler
変数の宣言
ファイルパス、古いファイル名、新しいファイル名、ループ用の変数i、そしてFileSystemObjectのためのFSOを宣言します。
Dim FolderPath As String, Dim oldFilename As String, Dim newFilename As String, Dim i As Integer, Dim FSO As Object
FolderPathの取得
FolderPathをExcelのThisWorkBookのSheet1のA1セルの値として取得します。
FolderPath = ThisWorkbook.Sheets("Sheet1").Range("A1").Value
FileSystemObjectの生成
FileSystemObjectは、ファイルやフォルダーにアクセスするためのオブジェクトで、これを生成します。
Set FSO = CreateObject("Scripting.FileSystemObject")
ループカウンタの初期化
ループ用の変数iを初期化します。この変数は、後のDo Whileループで使用します。
i = 2
ループの開始
Do Whileループを開始します。このループは、Excelのシート内で、B列にデータが存在するすべての行を通過します。
Do While ThisWorkbook.ActiveSheet.Cells(i, 2).Value <> ""
古いファイル名と新しいファイル名の設定
古いファイル名と新しいファイル名をExcelのシートから取得します。
oldFilename = FolderPath & "\" & ThisWorkbook.ActiveSheet.Cells(i, 2).Value & "." & ThisWorkbook.ActiveSheet.Cells(i, 3).Value, newFilename = FolderPath & "\" & ThisWorkbook.ActiveSheet.Cells(i, 4).Value & "." & ThisWorkbook.ActiveSheet.Cells(i, 3).Value
ファイル名の変更
新しいファイル名が存在しない、またはD列の値が空でない場合、古いファイル名を新しいファイル名に変更します。
If Not FSO.FileExists(newFilename) And ThisWorkbook.ActiveSheet.Cells(i, 4).Value <> "" Then, If FSO.FileExists(oldFilename) Then, FSO.MoveFile oldFilename, newFilename, End If, End If
ループカウンタの更新
ループ用の変数iを更新します。
i = i + 1
ループの終了
Do Whileループを終了します。
Loop
完了のメッセージボックスの表示
ファイルの名前がすべて変更された後、メッセージボックスを表示して操作が完了したことを通知します。
MsgBox "操作が正常に完了しました!", vbInformation
FileSystemObjectの解放
FileSystemObjectのリソースを解放します。
Set FSO = Nothing
サブプロシージャの終了
正常に処理が完了した場合、サブプロシージャを終了します。
Exit Sub
エラーハンドリングの終了
エラーが発生した場合、エラーメッセージを表示し、サブプロシージャを終了します。
ErrorHandler:, MsgBox "エラー " & Err.Number & ": " & Err.Description, vbCritical, End Sub
フォルダ内のファイル名の一括変更
まとめ:面倒な作業はVBAマクロで時短
【フォルダ内のファイル名を一括で変更】するExcel VBAマクロのコードの解説でした。
Excelのマクロなら数十分や数時間かかる作業も数秒や数分で終わります。
コメント