【Excel VBA】FileSystemObjectを使いこなす!(実践編) 第一回目 フォルダ内のファイル名を一括変更する

VBAでの操作

こんにちは、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でファイル名(拡張子を除く)を取得して文字を追加しています。

この部分は好きに変更していただければと思います。

まとめ

今回はフォルダ内のファイル名をすべて変更するコードを紹介しました。

この方法を応用すればフォルダ名をすべて変更することも可能です。

一つ一つ手でファイル名を変更しなければならない場合などに使っていただければ幸いです。

コメント

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