ファイル名変更するマクロ

ファイル名一覧

まずは、ファイル一覧を作成するマクロです。

'********************************************************
'* マクロ名: ファイル一覧
'* 概要    : 指定したフォルダ内のファイル名一覧を、指定のセル範囲に出力する
'*
'* 前提:
'*   - 「Microsoft Scripting Runtime」の参照設定が必要(AllFileName関数内でFileSystemObject使用)
'*   - シート上に「フォルダ名」という名前付きセル範囲が存在すること(そこに対象フォルダパスを入力)
'*
'* 処理内容:
'*   - A列の5行目以降をクリア
'*   - 指定フォルダ内のファイル名を取得
'*   - 取得したファイル名をA列5行目以降に順番に出力
'********************************************************
Sub ファイル一覧()

    ' 出力範囲クリア(A列5行目以降のデータを削除)
    ' 最終行を取得し、5行目~最終行のA列をクリア
    Range(Cells(5, 1), Cells(Cells(Rows.Count, 1).End(xlUp).Row, 1)).ClearContents

    ' ファイル名を格納する配列を宣言
    Dim Files() As String

    ' 指定フォルダ内のファイル名を取得
    ' 「フォルダ名」という名前のセル範囲からフォルダパスを取得し、AllFileName関数に渡す
    ' AllFileName関数の戻り値は、ファイル名の配列
    ' 参照url:https://blogvba.com/allfilename/
    Files = AllFileName(Range("フォルダ名").Value)

    ' ファイル名をセルに書き出す
    Dim i As Long
    ' 配列の1番目から順に処理(A列5行目から出力)
    For i = 1 To UBound(Files)
        Cells(i + 4, 1).Value = Files(i)
    Next i

End Sub

このマクロは、以下のシートのシートモジュールに入れています。

以下の画面で「ファイル名一覧」をクリックすると、マクロが実行され、B1セルに入力されているフォルダ内のファイル一覧が、A5セル以下に、記載されます。

「AllFileName関数」は、以下を参照してください。

ファイルリネーム

その後、以下の画面のように、B5セル以降に、変更後のファイル名を入れて、「ファイルリネーム」をクリックすると、ファイル名が変更されます。

変更後は、以下のようになり、ファイル名が変更されていることがわかります。

再度、「ファイル名一覧」をクリックすると、以下の画面になり、変更後のファイル名一覧が確認できます。

以下が実行されるファイル名変更のマクロです。このマクロも、シートモジュールに入れています。

'********************************************************
'* マクロ名: ファイルのリネーム
'* 概要    : 指定の一覧表に基づき、指定フォルダ内のファイル名を一括変更する
'*
'* 処理対象:
'*   - 「フォルダ名」という名前のセル範囲に対象フォルダのパスを入力
'*   - A列に「現在のファイル名」、B列に「新しいファイル名(拡張子なし)」を入力
'*   - A4セルを起点にした表形式で、5行目以降のデータを対象とする
'*
'* 注意点:
'*   - 新しいファイル名には拡張子を含めず、既存ファイルと同じ拡張子でリネーム
'*   - ファイルが存在しない場合やエラー処理は別途実装が必要
'*   - FileRenameSameExtension関数が必要(別途実装)
'********************************************************
Sub ファイルのリネーム()

    ' データ格納用の変数
    Dim Target As Range                 ' 対象範囲オブジェクト
    Dim TargetValue() As Variant        ' 2次元配列でデータを一括取得

    ' 表の見出しを除いたデータ範囲を取得(A4セルを基準にCurrentRegion)
    ' CurrentRegion:連続するデータ範囲全体
    With Range("A4").CurrentRegion
        Set Target = .Resize(.Rows.Count - 1).Offset(1) ' 見出し行を除外
    End With

    ' 対象データを2次元配列に格納(高速処理)
    TargetValue = Target.Value

    ' 配列の1行目から最終行までループ
    Dim i As Long
    For i = LBound(TargetValue) To UBound(TargetValue)

        ' A列(旧ファイル名)、B列(新ファイル名)が両方とも空でない場合のみ処理
        If TargetValue(i, 1) <> "" And TargetValue(i, 2) <> "" Then

            ' フォルダパス取得(名前定義「フォルダ名」から)
            Dim FilePath As String
            FilePath = Range("フォルダ名").Value & "\" & TargetValue(i, 1)

            ' 旧ファイル名、新ファイル名(拡張子なし)を取得
            Dim myFileName As String
            myFileName = TargetValue(i, 1)

            Dim myFileRename As String
            myFileRename = TargetValue(i, 2)

            ' ファイル名変更(FileRenameSameExtension関数を呼び出し)
            ' 引数:
            '   myFileName     :旧ファイル名
            '   myFileRename   :新ファイル名(拡張子除く)
            '   Range("フォルダ名"):フォルダのパス
            Call FileRenameSameExtension(myFileName, myFileRename, Range("フォルダ名").Value)
            '* 参照url:https://blogvba.com/filerenamesameextension/

        End If
    Next i

End Sub

「FileRenameSameExtension関数」は、以下を参照してください。

Follow me!