非プログラマーでもできる!業務の自動化

【 Excel VBA配布】フォルダ内のファイル名を一括置換で変更できる方法を解説

当ページのリンクの一部に広告が含まれています。

「決まったルールでフォルダ内のファイル名を変更したい」

でも、いちいち1つ1つのファイルを変更するのは面倒。

そんな面倒な作業も、そんな面倒な作業も、ExcelのVBAマクロを使えば、自動で処理できます。

この記事では

【フォルダ内のファイル名を一括で変更】するExcel VBAマクロのコードを解説しています。

ボタンで【フォルダ内のファイル名を一括で変更】ができる、Excelシートを無料配布。

目次

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

フォルダ内のファイル名を一括で変更できるExcel VBAマクロブックには、以下の2つのコードを記載しています。

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

  • フォルダ内のファイル名を取得するExcelVBAマクロのコード
  • Excelのセルのデータを用いてフォルダ内のシート名を変更する VBAマクロのコード

フォルダ内のファイル名を取得するExcelVBAマクロのコード

以下のコードを実行すると、特定のフォルダ内にあるすべてのファイルのファイル名を取得して、Excelに一覧として出力します。

ボタンを押すとダイアログが表示されるので、ファイル名を一括表示したいフォルダを選択してください。

Sub GetFileNames()
    Dim FolderPath As String
    Dim Filename As String
    Dim i As Integer
    Dim FileBaseName As String
    Dim FileExtension As String
    ' フォルダ選択ダイアログを表示
    With Application.FileDialog(msoFileDialogFolderPicker)
        If .Show = -1 Then ' ユーザーがフォルダを選択した場合
            FolderPath = .SelectedItems(1)
        Else ' ユーザーがキャンセルした場合
            Exit Sub
        End If
    End With
    i = 2 'B列とC列の開始行を2行目に設定
    Filename = Dir(FolderPath & "\*.*") 'フォルダ内の最初のファイル名を取得
    'フォルダ内の全ファイルを処理
    Do While Filename <> ""
        'ファイル名と拡張子を分割
        FileBaseName = Left(Filename, InStrRev(Filename, ".") - 1)
        FileExtension = Right(Filename, Len(Filename) - InStrRev(Filename, "."))
        
        'ファイル名をB列に、拡張子をC列に出力
        ThisWorkbook.ActiveSheet.Cells(i, 2).Value = FileBaseName
        ThisWorkbook.ActiveSheet.Cells(i, 3).Value = FileExtension
        i = i + 1 '次の行へ
        Filename = Dir '次のファイル名を取得
    Loop
End Sub

Excelのセルのデータを用いてフォルダ内のシート名を変更する VBAマクロのコード

次に以下のコードを実行すると、Excelに入力したフォルダ名に変更します。

Sub RenameFiles()
    Dim FolderPath As String
    Dim oldFilename As String
    Dim newFilename As String
    Dim i As Integer
    Dim FSO As Object
    ' フォルダ選択ダイアログを表示
    With Application.FileDialog(msoFileDialogFolderPicker)
        If .Show = -1 Then ' ユーザーがフォルダを選択した場合
            FolderPath = .SelectedItems(1)
        Else ' ユーザーがキャンセルした場合
            Exit Sub
        End If
    End With
    Set FSO = CreateObject("Scripting.FileSystemObject")
    i = 2 'B列、C列、D列の開始行を2行目に設定
    
    Do While ThisWorkbook.ActiveSheet.Cells(i, 2).Value <> ""
        oldFilename = FolderPath & "\" & ThisWorkbook.ActiveSheet.Cells(i, 2).Value & "." & ThisWorkbook.ActiveSheet.Cells(i, 3).Value
        newFilename = FolderPath & "\" & ThisWorkbook.ActiveSheet.Cells(i, 4).Value & "." & ThisWorkbook.ActiveSheet.Cells(i, 3).Value
        If FSO.FileExists(oldFilename) Then
            FSO.MoveFile oldFilename, newFilename
        End If
        
        i = i + 1 '次の行へ
    Loop
    Set FSO = Nothing
End Sub

【フォルダ内のファイル名を一括で変更】するExcelマクロブックの使い方

配布している【フォルダ内のファイル名を一括で変更】するExcelマクロブックの使い方を説明します。

【フォルダ内のファイル名を一括で変更】するExcelマクロブックの使い方

  • フォルダ名の取得
  • 変更したいファイル名を入力
  • ファイル名の一括変更

フォルダ名の取得

【ファイル名一覧取得】のボタンを押すと、ダイアログが出てくるので、名前を変更したいファイルが保存してあるフォルダを選択します。

マクロを実行すると、フォルダ内のファイル名がB列に表示されます。

変更したいファイル名を入力

対応するD列に、変更したいファイル名を入力してください。

ファイル名の一括変更

【ファイル名の変更】を押すと、ファイル名を一括で変更できます。

フォルダ内のファイル名を取得するExcelVBAマクロのコードの解説

フォルダ内のファイル名を取得するExcelVBAマクロのコードの解説

  • エラーハンドリングの開始
  • 変数の定義
  • フォルダ選択ダイアログの表示
  • フォルダパスの出力
  • ファイル名の取得
  • フォルダ内の全ファイルを処理
  • 完了のダイアログを表示
  • エラーハンドリングをスキップ
  • エラーハンドリング
Sub GetFileNames()
    On Error GoTo ErrorHandler ' エラーハンドリングの開始
    Dim FolderPath As String
    Dim Filename As String
    Dim i As Integer
    Dim FileBaseName As String
    Dim FileExtension As String
    ' フォルダ選択ダイアログを表示
    With Application.FileDialog(msoFileDialogFolderPicker)
        If .Show = -1 Then ' ユーザーがフォルダを選択した場合
            FolderPath = .SelectedItems(1)
        Else ' ユーザーがキャンセルした場合
            Exit Sub
        End If
    End With
    ' ユーザーが選択したフォルダのパスをThisWorkbookのSheet1のA1に出力
    ThisWorkbook.Sheets("Sheet1").Range("A1").Value = FolderPath
    i = 2 'B列とC列の開始行を2行目に設定
    Filename = Dir(FolderPath & "\*.*") 'フォルダ内の最初のファイル名を取得
    'フォルダ内の全ファイルを処理
    Do While Filename <> ""
        'ファイル名と拡張子を分割
        FileBaseName = Left(Filename, InStrRev(Filename, ".") - 1)
        FileExtension = Right(Filename, Len(Filename) - InStrRev(Filename, "."))
        
        'ファイル名をB列に、拡張子をC列に出力
        ThisWorkbook.ActiveSheet.Cells(i, 2).Value = FileBaseName
        ThisWorkbook.ActiveSheet.Cells(i, 3).Value = FileExtension
        i = i + 1 '次の行へ
        Filename = Dir '次のファイル名を取得
    Loop
    MsgBox "操作が正常に完了しました!", vbInformation ' 完了のダイアログを表示
    Exit Sub ' エラーハンドリングをスキップ
ErrorHandler: ' エラーハンドリング
    MsgBox "エラー " & Err.Number & ": " & Err.Description, vbCritical
End Sub

エラーハンドリングの開始

予期せぬエラーが発生した場合に、エラーメッセージを表示するためのエラーハンドラの開始を宣言します。

On Error GoTo ErrorHandler

変数の定義

必要な変数を宣言します。フォルダパス、ファイル名、カウンタ、ファイルの基本名、ファイルの拡張子を格納するための変数です。

Dim FolderPath As String...Dim FileExtension As String

フォルダ選択ダイアログの表示

ユーザーにフォルダ選択ダイアログを表示します。ユーザーがフォルダを選択した場合、そのパスをFolderPathに保存します。ユーザーがキャンセルした場合、サブプロシージャを終了します。

With Application.FileDialog(msoFileDialogFolderPicker)...End With

フォルダパスの出力

ユーザーが選択したフォルダのパスをThisWorkbookのSheet1のA1に出力します。

ThisWorkbook.Sheets("Sheet1").Range("A1").Value = FolderPath

ファイル名の取得

フォルダ内の最初のファイル名を取得します。

Filename = Dir(FolderPath & "\*.*")

フォルダ内の全ファイルを処理

フォルダ内の全ファイルに対してループ処理を行います。ファイル名と拡張子を分割し、それぞれをB列とC列に出力します。

Do While Filename <> ""...Loop

完了のダイアログを表示

全ファイルの処理が完了したら、メッセージボックスを表示します。

MsgBox "操作が正常に完了しました!", vbInformation

エラーハンドリングをスキップ

メインの処理が正常に完了したら、エラーハンドリング部分をスキップします。

Exit Sub

エラーハンドリング

エラーが発生した場合の処理を行います。エラーメッセージを表示します。

ErrorHandler:...MsgBox "エラー " & Err.Number & ": " & Err.Description, vbCritical

Excelのセルのデータを用いてフォルダ内のシート名を変更する VBAマクロのコードの解説

Excelのセルのデータを用いてフォルダ内のシート名を変更する VBAマクロのコードの解説

  • サブプロシージャの開始
  • エラーハンドリングの開始
  • 変数の宣言
  • FolderPathの取得
  • FileSystemObjectの生成
  • ループカウンタの初期化
  • ループの開始
  • 古いファイル名と新しいファイル名の設定
  • ファイル名の変更
  • ループカウンタの更新
  • ループの終了
  • 完了のメッセージボックスの表示
  • FileSystemObjectの解放
  • サブプロシージャの終了
  • エラーハンドリングの終了
Sub RenameFiles()
    On Error GoTo ErrorHandler ' エラーハンドリングの開始
    Dim FolderPath As String
    Dim oldFilename As String
    Dim newFilename As String
    Dim i As Integer
    Dim FSO As Object
    ' FolderPathをThisWorkBookのSheet1のA1セルのデータを参照
    FolderPath = ThisWorkbook.Sheets("Sheet1").Range("A1").Value
    Set FSO = CreateObject("Scripting.FileSystemObject")
    i = 2 'B列、C列、D列の開始行を2行目に設定
    
    Do While ThisWorkbook.ActiveSheet.Cells(i, 2).Value <> ""
        oldFilename = FolderPath & "\" & ThisWorkbook.ActiveSheet.Cells(i, 2).Value & "." & ThisWorkbook.ActiveSheet.Cells(i, 3).Value
        newFilename = FolderPath & "\" & ThisWorkbook.ActiveSheet.Cells(i, 4).Value & "." & ThisWorkbook.ActiveSheet.Cells(i, 3).Value
        ' If the new filename or the value in D column does not exist, skip this file
        If Not FSO.FileExists(newFilename) And ThisWorkbook.ActiveSheet.Cells(i, 4).Value <> "" Then
            If FSO.FileExists(oldFilename) Then
                FSO.MoveFile oldFilename, newFilename
            End If
        End If
        
        i = i + 1 '次の行へ
    Loop
    MsgBox "操作が正常に完了しました!", vbInformation ' 完了のダイアログを表示
    Set FSO = Nothing
    Exit Sub ' エラーハンドリングをスキップ
ErrorHandler: ' エラーハンドリング
    MsgBox "エラー " & Err.Number & ": " & Err.Description, vbCritical
End Sub

サブプロシージャの開始

サブプロシージャRenameFilesの開始を宣言します。このサブプロシージャは、Excelのファイル名を変更するためのものです。

Sub RenameFiles()

エラーハンドリングの開始

VBAでは、エラーハンドリングはOn Errorステートメントを使用して行います。これはプロシージャが途中でエラーを引き起こす可能性があるためです。

On Error GoTo ErrorHandler

変数の宣言

ファイルパス、古いファイル名、新しいファイル名、ループ用の変数i、そしてFileSystemObjectのためのFSOを宣言します。

Dim FolderPath As String, Dim oldFilename As String, Dim newFilename As String, Dim i As Integer, Dim FSO As Object

FolderPathの取得

FolderPathをExcelのThisWorkBookのSheet1のA1セルの値として取得します。

FolderPath = ThisWorkbook.Sheets("Sheet1").Range("A1").Value

FileSystemObjectの生成

FileSystemObjectは、ファイルやフォルダーにアクセスするためのオブジェクトで、これを生成します。

Set FSO = CreateObject("Scripting.FileSystemObject")

ループカウンタの初期化

ループ用の変数iを初期化します。この変数は、後のDo Whileループで使用します。

i = 2

ループの開始

Do Whileループを開始します。このループは、Excelのシート内で、B列にデータが存在するすべての行を通過します。

Do While ThisWorkbook.ActiveSheet.Cells(i, 2).Value <> ""

古いファイル名と新しいファイル名の設定

古いファイル名と新しいファイル名をExcelのシートから取得します。

oldFilename = FolderPath & "\" & ThisWorkbook.ActiveSheet.Cells(i, 2).Value & "." & ThisWorkbook.ActiveSheet.Cells(i, 3).Value, newFilename = FolderPath & "\" & ThisWorkbook.ActiveSheet.Cells(i, 4).Value & "." & ThisWorkbook.ActiveSheet.Cells(i, 3).Value

ファイル名の変更

新しいファイル名が存在しない、またはD列の値が空でない場合、古いファイル名を新しいファイル名に変更します。

If Not FSO.FileExists(newFilename) And ThisWorkbook.ActiveSheet.Cells(i, 4).Value <> "" Then, If FSO.FileExists(oldFilename) Then, FSO.MoveFile oldFilename, newFilename, End If, End If

ループカウンタの更新

ループ用の変数iを更新します。

i = i + 1

ループの終了

Do Whileループを終了します。

Loop

完了のメッセージボックスの表示

ファイルの名前がすべて変更された後、メッセージボックスを表示して操作が完了したことを通知します。

MsgBox "操作が正常に完了しました!", vbInformation

FileSystemObjectの解放

FileSystemObjectのリソースを解放します。

Set FSO = Nothing

サブプロシージャの終了

正常に処理が完了した場合、サブプロシージャを終了します。

Exit Sub

エラーハンドリングの終了

エラーが発生した場合、エラーメッセージを表示し、サブプロシージャを終了します。

ErrorHandler:, MsgBox "エラー " & Err.Number & ": " & Err.Description, vbCritical, End Sub

まとめ:面倒な作業はVBAマクロで時短

【フォルダ内のファイル名を一括で変更】するExcel VBAマクロのコードの解説でした。

Excelのマクロなら数十分や数時間かかる作業も数秒や数分で終わります。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

目次