更新日:、 作成日:

VBA ファイル名の取得または変更する

はじめに

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

GetFileName, GetBaseName, GetExtensionName 関数などを使って、指定したパスのファイル名や拡張子を取得できます。

File.Name プロパティから名前や拡張子の変更ができます。

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

FileSystemObject について

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

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

ファイルの取得または変更する

指定したファイルの名前を取得

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

Dim s As String

s = fso.GetFileName("D:\Tips.txt")      ' ファイル名と拡張子
Debug.Print(s) ' Tips.txt

s = fso.GetBaseName("D:\Tips.txt")      ' ファイル名のみ
Debug.Print(s) ' Tips

s = fso.GetExtensionName("D:\Tips.txt") ' 拡張子のみ
Debug.Print(s) ' txt

' 後始末
Set fso = Nothing

fso.GetFileName 関数で拡張子を含むファイル名を取得できます。フォルダを指定したときはフォルダ名を取得します。

fso.GetBaseName 関数でファイル名のみを取得できます。フォルダを指定したときはフォルダ名を取得します。

fso.GetExtensionName 関数で拡張子のみを取得できます。

いずれの関数も存在しないファイルやフォルダに対して使用できます。

ファイル名の取得または変更

Dim fso As FileSystemObject
Set fso = New FileSystemObject

Dim f As File
Set f = fso.GetFile("D:\Tips.txt") ' ファイルの取得

Dim s As String
s = f.Name              ' ファイル名の取得 (Tips.txt)

f.Name = "Tips変更.txt" ' ファイル名の変更

' 後始末
Set fso = Nothing

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

f.Name プロパティから、拡張子を含むファイル名を取得または変更できます。既に存在しているファイル名に変更するとエラーが発生します。

s = fso.GetBaseName(f.Path)      ' ファイル名のみ
s = fso.GetExtensionName(f.Path) ' 拡張子のみ

ファイル名や拡張子を取得したいときは f.Path プロパティで、そのファイルのパスを取得できます。

拡張子の変更

Dim fso As FileSystemObject
Set fso = New FileSystemObject

Dim filePath As String
filePath = "D:\Tips.txt" ' 変更するファイルのパス

Dim extension As String
extension = ".ini"       ' 新しい拡張子

Dim f As File
Set f = fso.GetFile(filePath) ' ファイルの取得

f.Name = fso.GetBaseName(f.Path) & extension ' 拡張子を変更
Debug.Print(f.Name) ' Tips.ini

' 後始末
Set fso = Nothing

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

fso.GetBaseName 関数でファイル名のみを取得し、それに新しい拡張子を結合したものを f.Name プロパティに設定して拡張子を変更できます。

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

Dim fso As FileSystemObject
Set fso = New FileSystemObject

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

Dim fileName As String
Dim f As File
For Each f In fl.Files ' フォルダ内のファイルを取得
    fileName = f.Name             ' ファイル名の取得 (Tips.txt)
    If fileName = "Tips.txt" Then ' ファイル名を変更したいファイル
        f.Name = "Tips変更.txt"   ' ファイル名の変更
    End If
Next

' 後始末
Set fso = Nothing

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

fl.Files プロパティから、そのフォルダの File オブジェクトの一覧を取得できます。

f.Name プロパティから、拡張子を含むファイル名を取得または変更できます。