更新日:、 作成日:

VBA フォルダ名の取得または変更する

はじめに

Excel VBA マクロでフォルダ名の取得または変更する方法を紹介します。

GetFileName 関数を使って、指定したパスのフォルダ名を取得できます。

サブフォルダの名前の変更もできます。

ファイル名を取得または変更するには「ファイル名の取得または変更する」をご覧ください。

FileSystemObject について

ここでは VBA の標準の関数より便利な FileSystemObject を使った方法を紹介しています。基本的な使い方については「FileSystemObject ファイル操作の基礎」をご覧ください。

コードを見やすくするため FileSystemObject を参照設定しています。また、エラー処理は行っていません。

フォルダの取得または変更する

指定したパスのフォルダ名の取得

Dim fso As FileSystemObject
Set fso = New FileSystemObject ' インスタンス化

Dim s As String

s = fso.GetFileName("D:\TipsFolder.hoge") ' フォルダ名と拡張子
Debug.Print(s) ' TipsFolder.hoge

s = fso.GetBaseName("D:\TipsFolder.hoge") ' フォルダ名のみ
Debug.Print(s) ' TipsFolder

' 後始末
Set fso = Nothing

フォルダには拡張子というものはありませんが、関数によって動作が違うので名前に拡張子を入れています。

fso.GetFileName 関数で拡張子を含むフォルダ名を取得します。正確なフォルダ名を取得するためには、この関数を使用します。

fso.GetBaseName 関数でフォルダ名のみを取得します。フォルダ名に含まれる関数が取り除かれるので、フォルダ名を取得する関数としては使えません。

いずれの関数も存在しないフォルダやファイルに対して使用できます。ドライブ名は取得できません。

s = fso.GetDriveName("D:\TipsFolder") ' ドライブ名
Debug.Print(s) ' D:

fso.GetDriveName 関数で、そのパスのドライブ名を取得します。

フォルダ名の取得または変更

Dim fso As FileSystemObject
Set fso = New FileSystemObject

Dim fl As Folder
Set fl = fso.GetFolder("D:\TipsFolder") ' フォルダの取得

Dim s As String
s = fl.Name              ' フォルダ名の取得 (TipsFolder)
s = fl.Path              ' パスの取得 (D:\TipsFolder)

fl.Name = "Tipsフォルダ" ' フォルダ名の変更

' 後始末
Set fso = Nothing

fso.GetFolder 関数で指定したパスの Folder オブジェクトを取得します。フォルダが存在しないときはエラーが発生します。

fl.Name プロパティから、フォルダ名を取得または変更できます。既に存在しているフォルダ名に変更するとエラーが発生します。

fl.Path プロパティから、フォルダのパスを取得します。

サブフォルダの名前の取得または変更

Dim fso As FileSystemObject
Set fso = New FileSystemObject

Dim pfl As Folder
Set pfl = fso.GetFolder("D:\") ' 親フォルダを取得

Dim folderName As String
Dim fl As Folder
For Each fl In pfl.SubFolders ' サブフォルダの一覧を取得
    folderName = fl.Name              ' フォルダ名の取得 (TipsFolder)
    If folderName = "TipsFolder" Then ' フォルダ名を変更したいフォルダ
        fl.Name = "Tipsフォルダ"      ' フォルダ名の変更
    End If
Next

' 後始末
Set fso = Nothing

fso.GetFolder 関数で指定したパスの Folder オブジェクトを取得します。フォルダが存在しないときはエラーが発生します。

pfl.SubFolders プロパティから、そのフォルダ内にある Folder オブジェクトの一覧を取得できます。

fl.Name プロパティから、フォルダ名を取得または変更できます。