検索

キーワード


【Excel VBA】フォルダー内のファイルのを名前を一括でリネーム(変更)する方法

  • 公開日:2021-04-05 16:28:50
  • 最終更新日:2021-04-05 14:33:57

はじめに

こんにちは。IMMRです。

例えば、下記のようにフォルダー内にデータが投稿されているとします。


図1 フォルダーの中のファイル

フォルダーの中のファイル


ファイルの名前は、「AABBCCDD」で1~30番号が付いています。

もし、ファイル名を「AABBCCDD」から「ABCDE」に変更したいとなった場合どうしますか。


1個、1個変更しては時間がかかってしまいます。

今回は、フォルダー内のファイルのを名前を一括でリネーム(変更)する方法について説明します。


1. ファイルの名前変更方法

ファイルの変更するには、Nameステートメントを使用します。

Nameステートメントは、下記のように「現在のファイル名」から「変更したいファイル名」に変更という形式で行います。

Name 「現在のファイル名」 As 「変更したいファイル名」


ファイル名は、「testdata.txt」という感じで、名前だけでなく、パスも入れる必要があります。例:C:\VBA\testdata.txt

パスの変更も出来ます。その場合は移動になります。例:Name 「C:\VBA\testdata.txt」As 「C:\VBA1\testdata.txt


2. フォルダー内のファイルを参照

上記の方法でファイルのを名前をリネーム(変更)することが出来ます。

これは1つのファイルに対しての作業です。

そのため、フォルダー(C:\VBA2)の中に、ファイル「aaa1」「aaa2」「aaa3」「aaa4」「aaa5」があるとして

そして「aaa」を「bbb」にリネーム(変更)するとすると

Name C:\VBA2\aaa1 As C:\VBA2\bbb1

Name C:\VBA2\aaa2 As C:\VBA2\bbb2

Name C:\VBA2\aaa3 As C:\VBA2\bbb3

Name C:\VBA2\aaa4 As C:\VBA2\bbb4

Name C:\VBA2\aaa5 As C:\VBA2\bbb5

となってしまい、量が多くなってしまいます。

100個とかあると大変です。


そんな時は、フォルダー内のファイル名をひとつずつ確認して、それに対してリネーム処理を行うことで

何回も記述する必要はなくなります。

下記、記事で紹介しておりますのでご参照下さい。

フォルダー内のファイル名を全て取得する方法


3. フォルダー内のファイルのを名前を一括でリネームする方法のサンプルコード

フォルダー内のファイルのを名前を一括でリネーム(変更)するサンプルコードを紹介します。


サンプルコード

Sub test28()

Dim i       As Integer
Dim FILE_PATH       As String
Dim FSO             As Object
Dim TARGET          As Files
Dim TEMP            As Object

Dim FILE_OLD As String
Dim FILE_NEW As String

FILE_PATH = "C:\VBA\データ"

Set FSO = New FileSystemObject
Set TARGET = FSO.GetFolder(FILE_PATH).Files

For Each TEMP In TARGET
    FILE_OLD = FILE_PATH & "\" & TEMP.Name
    FILE_NEW = Replace(FILE_OLD, "AABBCCDD", "ABCDE")
    Name FILE_OLD As FILE_NEW
Next
   
End Sub



ファイル名を取得したいフォルダーのパスは「C:\VBA\データ」なので、一度変数(FILE_PATH)に格納します。


For Each TEMP In TARGETでは

フォルダー内にあるファイルの情報を1つずつ変数(TEMP)に格納していきます。


FILE_OLD = FILE_PATH & "\" & TEMP.Nameでは、

先ほどの変数(FILE_PATH)に格納した「C:\VBA\データ」と1つ目のファイル名を合わせたものを「FILE_OLD 」に格納します。

つまり、現在のファイルのパスと名前が格納されることになります。

ファイル名が「AABBCCDD0001.txt」だとすると「C:\VBA\データ\AABBCCDD0001.txt」が格納されていることになります。


FILE_NEW = Replace(FILE_OLD, "AABBCCDD", "ABCDE")では、

FILE_OLD」の中の"AABBCCDD"を"ABCDE"に置換して、その結果をFILE_NEW 」に格納します。

つまり、

FILE_OLD 」がC:\VBA\データ\AABBCCDD0001.txt」だとすると

FILE_NEW 」にはC:\VBA\データ\ABCDE.txt」が格納されます。


Name FILE_OLD As FILE_NEWでは

FILE_OLD 」からFILE_NEW 」にリネームしています。

FILE_OLD 」がC:\VBA\データ\AABBCCDD0001.txt」で

FILE_NEW 」にはC:\VBA\データ\ABCDE.txt」だとすると

C:\VBA\データ\AABBCCDD0001.txt」からC:\VBA\データ\ABCDE.txt」に変更されます。


このような処理をフォルダー内のデータ一つずつ行っていくことになります。



ただ、置換で怖いのが指定した文字があった場合、ファイル名以外も変わってしまうことがあります。

例:「C:\VBA\DATAACTION\AA01.txt」というデータがあり、を"AA"から"BB"に置換します。

  そうなると「「C:\VBA\DATBBCTION\BB01.txt」」となってしまい変えたくなかったところも変わってします。

  そのような場合は、拡張子(.txt)等を付けて

「AA」を「BB」に置換ではなくて、

「\AA」を「\BB」にする等をして行う必要があります。


4. フォルダー内のファイルのを名前を一括でリネームする方法のサンプルコードでエラー

上記、サンプルコードを実行しても「ユーザ定義型は定義されていません」というエラーが発生した場合があります。

その場合は、VBAの詳細設定が必要です。


設定方法は、下記記事の「4.サンプルコードを実行してフォルダー内の全てのファイル名を取得する前に」をご参照下さい。

フォルダー内のファイル名を全て取得する方法



5 フォルダー内のファイルのを名前を一括でリネームする方法のサンプルコードの実行

フォルダー内のファイルのを名前を一括でリネーム(変更)していきます。

下記のようにフォルダーの中にファイルがあるとします。


図2 フォルダーの中のファイル(実行前)

フォルダーの中のファイル(実行前)


このファイル名を「AABBCCDD」から「ABCDE」に変更していきます。

それでは、上記サンプルプログラムを実行していきます。



図3 フォルダーの中のファイル(実行後)

フォルダーの中のファイル(実行後)


ファイル1つ1つがAABBCCDD」から「ABCDEになっています。

フォルダー内のファイルのを名前を一括でリネーム(変更)することが出来ました。


【著者】

Imamura

今まではExcel VBAの開発をしてきました。
開発を主にしたものや他の業務の効率化を目指して行ったものさまざまです。
現在は、他のプログラミング言語に挑戦して、スキルアップを目指しています。

よく読まれている記事