器用貧乏の独り言

器用貧乏なおっさんが気の向くままに。

【VBA】フォルダ内のファイル名を一括変更するExcelマクロ

「特定の規則に従って、大量のファイル名を一括変更したい!」

そう思ったことはありませんか?

私は、ドライブレコーダーの動画ファイルをPCに取り込んで整理する時に、そんな衝動に駆られました。

というのも、ドライブレコーダーの映像というのは、数分毎にファイルが区切られていることが多いです。

1日分・1週間分の映像をまとめて取り出すと、ファイル数はとんでもない数になります。

そしてやっかいなのが、「取り出したままだとファイル名が分かりづらい!」ことです。

機種や設定によってまちまちではありますが、人間目線からだと不必要な情報が多いです。

例えばこんなイメージです。
(あくまでもイメージです。)
20221109_TestFile_00000000_T0000001_01_XXXXXX.mp4

この例での命名ルールは、こんな感じです。

撮影年月日_TestFile_00000000_T0000001_カメラNo._XXXXXX.mp4

必要なのは、「2022年11月9日」の「No.1カメラの映像」という情報だけです。
※実際のファイル名には大抵「時分秒」も入っていますね。

今回は、01→フロントカメラ、02→バックカメラと仮定して、ファイル名の一括変更マクロを紹介します。

まず、テスト環境としてこんなフォルダを用意しました。


※動画ファイルを用意するのが面倒だったのでテキストファイルで代用しています。

次に、こんな感じのExcelを用意しました。

今回はテストフォルダをデスクトップに作りましたが、Excel側のフォルダパスと整合が取れていれば、どこに作ってもOKです。

そして今回の主役となるマクロのコードはこんな感じです。
※マクロはExcelのボタンに登録しておいてください。

Sub NameChange()
 
Dim path, fso, file, files
Dim record As Integer
Dim strTrim As String
Dim OldFile, NewFile As String
   'ファイル格納フォルダ
   path = Range("B2")
   record = 0
   Set fso = CreateObject("Scripting.FileSystemObject")
   Set files = fso.GetFolder(path).files
       'フォルダ内の全ファイルをループ
       For Each file In files
           If InStr(file.Name, "T0000001_01") >= 1 Then
               strTrim = Left(file.Name, 8)
               OldFile = path & "\" & file.Name
               NewFile = path & "\" & strTrim & "_フロントカメラ.txt"
               Name OldFile As NewFile 'ファイル名を変更します。
               record = record + 1
           ElseIf InStr(file.Name, "T0000001_02") >= 1 Then
               strTrim = Left(file.Name, 8)
               OldFile = path & "\" & file.Name
               NewFile = path & "\" & strTrim & "_バックカメラ.txt"
               Name OldFile As NewFile 'ファイル名を変更します。
               record = record + 1
           End If
       Next file
   MsgBox record & "件のファイル名を変更しました。"
 
End Sub


基本の構成は、For Eachでフォルダ内をループさせ、If InStrで01と02で処理を分岐させます。

分岐後は、それぞれのルール(01→フロント、02→バック)に従ってファイル名を変更します。

今回の肝となるのが、この部分です。

strTrim = Left(file.Name, 8)
OldFile = path & "\" & file.Name
NewFile = path & "\" & strTrim & "_フロントカメラ.txt"
Name OldFile As NewFile 'ファイル名を変更します。


ファイル名を変更するためのコードですね。

この工程の前に、01か02で処理を分岐させているので、「フロントカメラ」又は「バックカメラ」という文字列を差し込むのは、さほど難しくありません。
↑そのまま文字列変数NewFileに代入するだけですね。

ここでのポイントは1行目の「strTrim=Left(file.Name, 8)」です。

このコードの意味は、「元のファイル名の左から8文字を変数strTrimに代入する」となります。


ファイル名の一括変更を行う中で、撮影日時は残したいわけです。
※これが消えるといつの映像か分かりませんからね。

さて、実際に実行してみましょう。

Excelの「ファイル名_一括変更」ボタンをクリックします。
すると、こんなメッセージが出てきます。


テストフォルダの中身を確認すると・・・

無事変更されました!

私はドラレコ映像の整理をするために、このマクロを作りましたが、業務アプリから吐き出されるデータ(テキストやCSV等)を整理するのにも応用できそうです。

単調なファイル名変更作業に飽き飽きしている方がおられましたら、上記コードを参考に自動化に挑戦してみてはいかがでしょうか?