ヘルプの森~Excel・Access・Office全般ヘルプデスクサイト

No.016

フォルダー内のファイル名を変更する 《Do~Loop・Dir・Name~As》

2003/2007/2010/2013/2016/2019

フォルダー内にたくさんのファイルがあり、まとめてファイル名を変更したい、連番をつけてファイル名の変更を一括で行いたい、といったお問い合わせです。
ファイル名の変更を手作業で行うには、大量にファイルがあると結構大変な労力となるものですよね。

今回は、汎用的に使用できるよう、VBAで簡単なサンプルを作成しました。
ブックにファイル名を設定し実行、ファイルの種類は特に問いません。

サンプルファイル

先にですが、サンプルファイルは以下のリンクよりダウンロードできます。

サンプルVBAファイル ダウンロード

では、サンプルファイルの設定と手順を、ざっくりご案内します。

2つのボタンは2つのプロセスです。

  1. セルB1 にファイル名を変更するファイルがあるフォルダーを指定
     →[フォルダー内ファイル取得]ボタンをクリック
     →セルB6以下にフォルダー内のファイルの一覧を取得
  2. 取得したファイルのファイル名変更設定をセル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 変更するフルパスファイル名

となります。

どちらのファイル名もフルパスで指定し、パスを変えるとファイルの移動となります。

関連ヘルプ

ブック内のすべてのワークシートで同じ処理を行う 《For Each~Next》
ブックを開くとき、閉じるときにマクロを自動実行したい 《イベント プロシージャ》
データを快速で検索するには 《Find》
アプリケーションを起動し動作させる 《Shell・SendKeys・Wait》
エラーの種類、そしてエラー処理の設置方法について 《On Error GoTo》
InputBox のテキスト ボックス入力時に日本語入力をオンにする 《SendKeys》
Excelのデータをテキスト ファイルに書き出す(出力する) 《Open・Print・Close》
ExcelからOutlookでメールを作成・送信する基本のVBA 《CreateObject関数》
Excelのメールアドレス データを使用し、Outlookのメールを自動送信する 《CreateObject関数》
ソートしたグループごとのデータを別ブックに分割するサンプルVBA
右クリック、印刷、上書き保存などブックに規制をかける 《イベント プロシージャ Cancel=True》
フォルダー内のすべてブックを開いて同じ処理を行う 《Do~Loop・Dir》
フォルダー内のすべての画像ファイルをペイントで開きサイズ変更
フォルダー内のフォルダーとファイルの一覧をセルに書き出す1 《Dir》
フォルダー内のフォルダーとファイルの一覧をセルに書き出す2 《FileSystemObject》
ColorプロパティとRGB関数について、Color値からRGB、RGBからColor値を求める方法 《Color・RGB関数》
twitter hatena line pocket