No.016
フォルダー内のファイル名を変更する 《Do~Loop・Dir・Name~As》
2003/2007/2010/2013/2016/2019
フォルダー内にたくさんのファイルがあり、まとめてファイル名を変更したい、連番をつけてファイル名の変更を一括で行いたい、といったお問い合わせです。
ファイル名の変更を手作業で行うには、大量にファイルがあると結構大変な労力となるものですよね。
今回は、汎用的に使用できるよう、VBAで簡単なサンプルを作成しました。
ブックにファイル名を設定し実行、ファイルの種類は特に問いません。
先にですが、サンプルファイルは以下のリンクよりダウンロードできます。
では、サンプルファイルの設定と手順を、ざっくりご案内します。
2つのボタンは2つのプロセスです。
- セルB1 にファイル名を変更するファイルがあるフォルダーを指定
→[フォルダー内ファイル取得]ボタンをクリック
→セルB6以下にフォルダー内のファイルの一覧を取得 - 取得したファイルのファイル名変更設定をセルC6:F6以下に設定
→[ファイル名変更]ボタンをクリック
セルC列~E列に指定する内容は、サンプルのブックにも説明がありますが、次のとおりです。
- C列[変更]…ファイル名を変更しないファイルは「●」をクリアし空白に
- D列、E列[変更ファイル名]…D列、E列の内容を続けたファイル名を設定
連番などを設定しやすいよう、ファイル名は2つのセルを用意しています。
セル1つで足りる場合は、どちらか1つのセルは空白にしてください。
では、それぞれのボタンのVBAを見ていきます。
<フォルダー内ファイル取得>
Sub Sample_ichiran()
Dim strFolder As String
Dim strFlName As String
Dim intR As Integer
strFolder = Range("B1") & "¥"
intR = 6
Range(Cells(6, 2), Cells(1048576, 6)).ClearContents
strFlName = Dir(strFolder & "*")
Do
Cells(intR, 2) = strFlName
Cells(intR, 3) = "●"
Cells(intR, 6) = Right(strFlName, Len(strFlName) - InStr(strFlName, ".") + 1)
intR = intR + 1
strFlName = Dir
Loop While strFlName <> ""
MsgBox "フォルダー内ファイルの一覧を取得しました"
End Sub
このプロシージャでは、Dir関数を使って、順々にすべてのファイルを取得し、一覧に記載していきます。
Dir関数については、次のヘルプ「フォルダー内のすべてブックを開いて同じ処理を行う 《Do~Loop・Dir》」、「フォルダー内のフォルダーとファイルの一覧をセルに書き出す1 《Dir》」をご参照ください。
<ファイル名変更>
Sub Sample_ChangeName()
Dim strFolder As String
Dim R_1 As Integer
strFolder = Range("B1") & "¥"
R_1 = 6
Do While Cells(R_1, 2) <> ""
If Cells(R_1, 3) <> "" Then
Name strFolder & Cells(R_1, 2) As strFolder & Cells(R_1, "D") & Cells(R_1, "E") & Cells(R_1, "F")
End If
R_1 = R_1 + 1
Loop
MsgBox "ファイル名変更 完了!"
End Sub
先に取得したファイルの一覧を、Do~Loopの構文ですべて処理していきます。
ポイントとなるのは、ファイル名を変更するNameステートメントです。
Nameステートメントの構造を簡単に書くと、
Name 元のフルパスファイル名 As 変更するフルパスファイル名
となります。
どちらのファイル名もフルパスで指定し、パスを変えるとファイルの移動となります。