【ExcelVBA・マクロ】エクセルでフォルダ内のファイル名を一括変更するVBAコード

ExcelVBA

業務などで大量のファイル名を変更する場面はありませんか?
そんなときに便利なのが、ExcelVBAで一括リネームできるマクロです。

今回はエクセルでフォルダ内のファイル名を一括変更することができるマクロの作り方を紹介します。

始める前に

今回使用しているExcelデータは、以前の記事でご紹介した「エクセルにフォルダ内のファイル名を一括取得するマクロ」をもとに作成したものです。
そのため、記事をご覧いただいていない方にとっては、内容が少し分かりにくい部分があるかもしれません。

今回の内容をよりスムーズにご理解いただくためにも、ぜひ以下の記事をご一読いただければと思います。

【ExcelVBA・マクロ】エクセルにフォルダ内のファイル名を一括取得するマクロ
日々の業務で、フォルダ内のファイル名を手作業で書き写す作業は意外と多いですよね。 今回は、指定したフォルダ内にあるファイル名を一括でExcelシートに一覧表示するVBAコードをご紹介します。 業務効率化におすすめです!!

エクセルでフォルダ内のファイル名を一括変更するマクロ

エクセルデータの作成ができたら、さっそくファイル名を一括変更していきましょう。

以前作成した「ファイル名取得」のエクセルファイルを開いてください。

シート準備

シートのB列の1行目に「変更後ファイル名」と入力。

その下の行にA列に入力されているファイル名から変更したいファイル名を入力(拡張子まで入力してください)

これでシートの準備は終了です。続いてコマンドボタンを作成していきましょう。

コマンドボタンの作成

「開発」タブから「挿入」をクリックしてActiveXコントロール内の「コマンドボタン」をクリック

適切な位置にボタンを配置

ボタンを右クリックして「プロパティ」をクリック

オブジェクト名を「changeName」Captionを「ファイル名変更」に変更してプロパティを閉じる

これでコマンドボタンの作成は終了です。いよいよVBAコードを作成しましょう。

VBAコード

さきほど作成したコマンドボタンを右クリックして「コードの表示」をクリック

表示されているエディターの「Private Sub changeName_Click()」内にコードを入力

※同画面内にファイル名取得用のコードが既に表示されていますが、こちらは編集しないでください。

ファイル名変更のVBAコード

Private Sub changeName_Click()
    
    Dim fd As FileDialog
    Dim fs As Object
    Dim path As String
    Dim i As Long
    Dim lastRow As Long
    Dim oldName As String
    Dim newName As String
    Dim oldExt As String
    Dim newExt As String
    Dim fso As Object
    Dim renamedCount As Long
    Dim skippedCount As Long

    
    ' フォルダ選択ダイアログ(再度選ばせる)
    Set fd = Application.FileDialog(msoFileDialogFolderPicker)
    With fd
        .Title = "変更を適用するフォルダを選択してください"
        If .Show <> -1 Then Exit Sub
        path = .SelectedItems(1)
        If Right(path, 1) <> "\" Then path = path & "\"
    End With

    Set fso = CreateObject("Scripting.FileSystemObject")
    lastRow = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row

    renamedCount = 0
    skippedCount = 0
    
    
    With ActiveSheet
    
        For i = 2 To lastRow
            oldName = Trim(.Cells(i, 1))
            newName = Trim(.Cells(i, 2))
    
            If oldName = "" Or newName = "" Then GoTo SkipLine
    
            oldExt = LCase(fso.GetExtensionName(oldName))
            newExt = LCase(fso.GetExtensionName(newName))
    
            ' 拡張子が一致していない場合はスキップ
            If oldExt <> newExt Then
                .Cells(i, 3).Value = "拡張子不一致"
                skippedCount = skippedCount + 1
                GoTo SkipLine
            End If
    
            If fso.FileExists(path & oldName) Then
                Name path & oldName As path & newName
                .Cells(i, 3).Value = "変更済"
                renamedCount = renamedCount + 1
            Else
                .Cells(i, 3).Value = "ファイルなし"
                skippedCount = skippedCount + 1
            End If
    
SkipLine:
        Next i
    
        MsgBox "ファイル名の変更が完了しました。" & vbCrLf & _
               "変更されたファイル: " & renamedCount & " 件" & vbCrLf & _
               "スキップされたファイル: " & skippedCount & " 件", vbInformation
           
    End With
End Sub

これでコードの入力を終了です。エディターを閉じて実際にマクロを実行してみましょう。

マクロ実行

「ファイル名変更」ボタンをクリックしてください

ファイルが保存されているフォルダを選択してOKをクリックしてください。

※下記画像は例です。実際にはご自身のパソコンにあるフォルダを選択してください。

マクロが実行されました。

フォルダ内のファイル名が変更されています。

まとめ

いかがでしたでしょうか。手動でフォルダ内の大量のファイル名を変更しようとすると、かなりの時間がかかってしまいますが、今回のマクロを使用すれば一瞬ですべてのファイル名を変更することができ、業務効率することができます。

よければ試してみてください!!

コメント

タイトルとURLをコピーしました