こんにちは、blueです。
前回はFileSystemObject(FSO)のメソッドについて説明しました。
前回の記事はこちら
今回からは実際に実務で使えるコードについて説明していきたいと思います。
今回はフォルダ内のファイル名をすべて変更する方法を紹介します。
今回のコード
以下のように指定したフォルダ内の(拡張子を含まない)ファイル名のすべての末尾に”ver1″をつけます。
コード
実際のコードは以下になります。
Private Sub FileNameChange1()
'フォルダを選択する(FileDialog)
'フォルダ名とフォルダオブジェクトを取得する(objFld)
'フォルダ内のファイルに対して名前を変更する(objFile.Name)
Dim FD As FileDialog
Dim FolderName As String
Dim FSO As Scripting.FileSystemObject
Dim objFolder As Scripting.Folder
Dim objFile As Scripting.File
'フォルダを選択する(FileDialog)
'フォルダ名とフォルダオブジェクトを取得する(objFolder)
Set FD = Application.FileDialog(msoFileDialogFolderPicker)
If FD.Show = True Then
FolderName = FD.SelectedItems(1)
Set FSO = New Scripting.FileSystemObject
Set objFolder = FSO.getFolder(FolderName)
Else
Exit Sub
End If
'フォルダ内のファイルに対して名前を変更する(objFile.Name)
For Each objFile In objFolder.Files
objFile.Name = FSO.GetBaseName(objFile.Name) & "ver1.xlsx"
Next objFile
Set FSO = Nothing
End Sub
コードの詳細は以降で詳しく説明します。
コードの説明
オブジェクトの宣言
Dim FD As FileDialog
Dim FolderName As String
Dim FSO As Scripting.FileSystemObject
Dim objFolder As Scripting.Folder
Dim objFile As Scripting.File
今回はフォルダを選択(FileDialog)して、フォルダ名を取得(FldName)します。
さらにFSOにてフォルダオブジェクトを取得(FSO,objFld)し、ファイルオブジェクト(objFile)の名前を変更します。
フォルダ名の取得とオブジェクトの取得
'フォルダを選択する(FileDialog)
'フォルダ名とフォルダオブジェクトを取得する(objFld)
Set FD = Application.FileDialog(msoFileDialogFolderPicker)
If FD.Show = True Then
FolderName = FD.SelectedItems(1)
Set FSO = New Scripting.FileSystemObject
Set objFolder = FSO.getFolder(FolderName)
Else
Exit Sub
End If
Application.FileDialog(msoFileDialogFolderPicker)で「フォルダを選択」ダイアログを立ち上げてフォルダ名を取得しています。
コードの詳しい説明はこちら
またFSOオブジェクトを取得したのちにフォルダオブジェクトを取得しています。
コードの詳しい説明はこちら
フォルダオブジェクト内のファイルオブジェクトの名前を変更
'フォルダ内のファイルに対して名前を変更する(objFile.Name)
For Each objFile In objFolder.Files
objFile.Name = FSO.GetBaseName(objFile.Name) & "ver1.xlsx"
Next objFile
フォルダオブジェクト内のすべてのファイルオブジェクトを操作するのにFor Eachステートメントを使用しています。
この中でもFilesプロパティが有用でフォルダ内のすべてのファイルオブジェクトを取得しています。
ちなみにSubFoldersプロパティを使えばフォルダ内のすべてのフォルダオブジェクトも取得できます。
コードの詳しい説明はこちら
その後For~Each Next内でファイルオブジェクトの名前を変更しています。
なおファイル名(拡張子含む)の先頭につけるのであれば”ver1″ & objFile.Nameで問題ないです。
ただし今回は拡張子の手前に文字を追加することになっています。
Fileオブジェクトには拡張子とファイル名(拡張子を除く)を分ける手段がないので、FSO.GetBaseNameでファイル名(拡張子を除く)を取得して文字を追加しています。
この部分は好きに変更していただければと思います。
まとめ
今回はフォルダ内のファイル名をすべて変更するコードを紹介しました。
この方法を応用すればフォルダ名をすべて変更することも可能です。
一つ一つ手でファイル名を変更しなければならない場合などに使っていただければ幸いです。
コメント