手作業のファイル名変更は大変・・・!
日々の業務で、複数のファイル名を一つひとつ手作業で変更していくのは、とても手間がかかる作業です。
たとえば、日付を入れたり、連番をつけたり、名前を統一したり……。
こうした作業はVBAを使うことで一括で自動化できます。
実装するメリット
- 毎回同じような名前変更作業を自動化できる
- 人的ミスを減らし、スムーズな運用ができる
- フォルダ構造や拡張子の変更にも柔軟に対応できる
連番を付けてファイル名を一括変更
- 対象フォルダを選択する
- フォルダ内のファイルを一覧取得する
- 一括でファイル名を変更する
Sub RenameFilesInFolder()
Dim folderPath As String
Dim fileName As String
Dim newFileName As String
Dim i As Long
' フォルダ選択ダイアログを表示する
With Application.FileDialog(msoFileDialogFolderPicker)
.Title = "フォルダを選択してください"
If .Show <> -1 Then
' キャンセルされた場合は処理を中止
MsgBox "キャンセルされました。"
Exit Sub
End If
' 選択されたフォルダのパスを取得
folderPath = .SelectedItems(1)
End With
' フォルダパスの末尾に「¥」がなければ追加する
If Right(folderPath, 1) <> "¥" Then
folderPath = folderPath & "¥"
End If
' 最初のファイル名を取得
fileName = Dir(folderPath & "*.*")
i = 1 ' 連番の初期値
' フォルダ内のすべてのファイルに対して処理を行う
Do While fileName <> ""
' 新しいファイル名を作成(例:Report_1.xlsx)
newFileName = "Report_" & i & Mid(fileName, InStrRev(fileName, "."))
' ファイル名を変更(リネーム)
Name folderPath & fileName As folderPath & newFileName
' 次のファイルへ
i = i + 1
fileName = Dir()
Loop
MsgBox "ファイル名の変更が完了しました。"
End Sub
コードの解説
FileDialog
を使って対象フォルダを選ばせています。Dir
関数でファイル名を1つずつ取得します。Name
ステートメントで新しい名前に変更しています。- 元のファイルの拡張子は
Mid
+InStrRev
でそのまま活用します。
注意点
- フォルダ内のすべてのファイルが対象になります(サブフォルダは対象外)。
- ファイル名が被ると上書きエラーになります。必要ならファイル存在確認を入れてください。
- ファイルを開いていると変更に失敗します。
NameとInstrRev
Name ステートメントとは?
ファイル名を変更するときに使うVBAの命令です。
Name "元のファイルパス" As "変更後のファイルパス"
ファイル名の変更や、フォルダのパスも変更すれば、フォルダの変更や、ファイル名の変更をすることができます。
InStrRev 関数とは?
文字列の中から、指定した文字(ここでは "."
)を後ろから検索して、その位置を返します。
InStrRev(fileName, ".")
この例では、ファイル名の末尾の拡張子を取得するために使っています。
たとえば "sample.txt"
の場合、 "."
は7文字目にあるので、InStrRev
は 7
を返します。
こう書き換えるとさらに柔軟に
ファイル名を "Report_"
だけでなく、日付や任意のキーワードに変更したい場合は、次のようにカスタマイズができます。
newFileName = Format(Date, "yyyymmdd") & "_" & i & Mid(fileName, InStrRev(fileName, "."))
このようにすれば、20240523_1.xlsx
のような命名が可能になります。
まとめ
VBAを使えば、地味でミスの起こりやすいファイル名変更の作業も、数秒で一括処理が可能になります。
- フォルダ選択 → 一覧取得 → 名前変更 の流れを押さえる
Dir
やName
の使い方をマスターすれば応用が効く- 実際の業務でよくある作業をVBAに置き換えるきっかけになる
自分の業務に合わせたファイル名付けルールに書き換えて、VBAの便利さを実感してみましょう。
コメント