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

【Excel VBA】ファイルコピーと名前の変更を自動化する方法

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

課題・悩み「テンプレートファイルをコピーして大量のファイルを作成する作業が面倒」

解決策「ファイルをコピーし、リネームするプロセスを効率化するVBAマクロ」を解説

本記事では、特定のフォルダからファイルをコピーし、新しい名前で保存する手順を詳しく説明します。

このマクロ入りExcelは、例えばテンプレートファイルから複数ファイルを作成したいときに便利です。

この記事では

【ファイルをコピーし、リネームするプロセスを効率化するVBAマクロ】を図解で解説しています。

VBAマクロファイルを配布中。

以下のボタンよりダウンロードしてください。

目次

特定のファイルをコピーして名前変更して新しいファイルとして保存するマクロ入りExcel

特定のファイルをコピーして名前変更して新しいファイルとして保存するマクロ入りexcelの使い方は以下の通りです。

コピーするファイルのパスの取得

【コピーするファイルのパス】のボタンを押すと、ダイアログが表示されるので、コピーしたいファイルを選択します。

選択したファイルのパスがC2セルに表示されます。

保存するフォルダパスの取得

【保存するフォルダのパス】のボタンを押すと、ダイアログが表示されるので、コピーしたファイルを保存するフォルダを選択します。

選択したフォルダのパスがC3に表示されます。

変更したい名前の入力

C4以下に変更したいファイル名を入力します。

ファイルの複製

【ファイルの複製】のボタンを押すと、C3のファイルがコピーされて、ファイル名がC4以下の文字列に変更されて、保存されます。

特定のファイルをコピーして名前変更して新しいファイルとして保存するVBAマクロのコード

このVBAマクロは、Excelの「Sheet1」に入力された情報を基にファイルをコピーして名前を変更します。

具体的には、セルC2に指定されたファイルをセルC3に指定されたフォルダに、セルC4以降の行に入力された新しい名前で保存します。

元のファイルの拡張子は保持されます。

C列の最後のデータがある行までこの処理を繰り返します。

Sub CopyFilesAndRename()
    Dim ws As Worksheet          ' ワークシートを格納する変数
    Dim lastRow As Long          ' C列の最後のデータがある行を格納する変数
    Dim srcPath As String        ' コピー元ファイルのパスを格納する変数
    Dim destFolder As String     ' 保存先フォルダのパスを格納する変数
    Dim destFileName As String   ' 新しいファイル名を格納する変数
    Dim destPath As String       ' 完全な保存先パスを格納する変数
    Dim fileExtension As String  ' ファイル拡張子を格納する変数
    
    ' ワークシートを設定
    Set ws = ThisWorkbook.Sheets("Sheet1")
    
    ' ソースファイルのパスをC2から取得
    srcPath = ws.Cells(2, "C").Value
    ' 保存先フォルダのパスをC3から取得
    destFolder = ws.Cells(3, "C").Value
    
    ' ソースファイルの拡張子を取得
    fileExtension = GetFileExtension(srcPath)
    
    ' C列の最後のデータがある行を見つける
    lastRow = ws.Cells(ws.Rows.Count, "C").End(xlUp).Row
    
    ' C列の4行目から各行をループ処理
    Dim i As Long
    For i = 4 To lastRow
        ' 新しい保存先ファイル名を取得
        destFileName = ws.Cells(i, "C").Value
        
        ' 新しいファイル名が空でないことを確認
        If destFileName <> "" Then
            ' 完全な保存先パスを作成
            destPath = CreateDestPath(destFolder, destFileName, fileExtension)
            
            ' ファイルをコピー
            CopyFileWithHandler srcPath, destPath
        End If
    Next i
End Sub

Function GetFileExtension(filePath As String) As String
    ' ファイルパスから拡張子を取得
    GetFileExtension = Mid(filePath, InStrRev(filePath, "."))
End Function

Function CreateDestPath(folder As String, fileName As String, extension As String) As String
    ' フォルダ、ファイル名、拡張子を結合して完全なパスを作成
    CreateDestPath = folder & "\" & fileName & extension
End Function

Sub CopyFileWithHandler(src As String, dest As String)
    On Error GoTo ErrorHandler
    FileCopy src, dest
    On Error GoTo 0
    Exit Sub
    
ErrorHandler:
    MsgBox "次の場所からファイルをコピー中にエラーが発生しました: " & src & " から " & dest & ": " & Err.Description
    On Error GoTo 0
End Sub

注意点

処理に時間がかかる可能性

データが大量にある場合、この処理には時間がかかることがあります。

操作の不可逆性

VBAマクロで実行された操作は元に戻せません。

必ず事前にデータのバックアップを取ってください。

必要な環境設定

ファイルのパスやフォルダのパスが正しく設定されていることを確認してください。

また、Excelのセキュリティ設定でマクロが有効になっていることを確認してください。

処理ごとの解説

ワークシートの設定

「Sheet1」を作業シートとして設定します。

Set ws = ThisWorkbook.Sheets("Sheet1")

ソースパスの取得

コピー元のファイルのパスをセルC2から取得します。

srcPath = ws.Cells(2, "C").Value

保存先フォルダの取得

保存先のフォルダのパスをセルC3から取得します。

destFolder = ws.Cells(3, "C").Value

ファイル拡張子の取得

ソースファイルの拡張子を取得します。

fileExtension = GetFileExtension(srcPath)

最後の行の特定

C列の最後のデータがある行を特定します。

lastRow = ws.Cells(ws.Rows.Count, "C").End(xlUp).Row

ループ処理の開始

C列の4行目から最後の行までループを開始します。

For i = 4 To lastRow

新しいファイル名の取得

新しいファイル名をC列の各行から取得します。

destFileName = ws.Cells(i, "C").Value

完全な保存先パスの作成

保存先フォルダ、ファイル名、拡張子を結合して保存先のパスを作成します。

destPath = CreateDestPath(destFolder, destFileName, fileExtension)

ファイルのコピー

ファイルを指定された保存先パスにコピーします。

エラーハンドリングを含みます。

CopyFileWithHandler srcPath, destPath

必要な環境設定

マクロの有効化

Excelの「オプション」から「セキュリティセンター」を開き、「マクロの設定」で「すべてのマクロを有効にする」を選択します。

ファイルパスの確認

セルC2にコピー元のファイルの完全なパスを入力します。

セルC3に保存先フォルダのパスを入力します。

セルC4以降に新しいファイル名を入力します(拡張子は不要)。

環境に応じて変更する必要がある箇所の解説

下記の表では、ユーザーの環境に合わせて変更する必要がある箇所について解説します。

各セクションには概要、解説、変更点のコードを示します。

ワークシート名

ワークシートの名前が「Sheet1」でない場合、実際のワークシート名に変更する必要があります。

Set ws = ThisWorkbook.Sheets("YourSheetName")

ソースファイルのパス

コピー元ファイルのパスがセルC2に正しく設定されていることを確認します。

ユーザーは自分の環境に合ったパスを入力する必要があります。

srcPath = ws.Cells(2, "C").Value

保存先フォルダのパス

保存先フォルダのパスがセルC3に正しく設定されていることを確認します。

ユーザーは自分の環境に合ったパスを入力する必要があります。

destFolder = ws.Cells(3, "C").Value

新しいファイル名

新しいファイル名がセルC4以降に正しく入力されていることを確認します。

ユーザーは自分の環境に合ったファイル名を入力する必要があります。

destFileName = ws.Cells(i, "C").Value

まとめ

この記事では、Excel VBAを使用してファイルをコピーし、リネームする方法を解説しました。

このマクロを使うことで、手作業を大幅に省略でき、業務効率が向上します。

適切な環境設定と注意点を確認しながら、ぜひ活用してみてください。

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

コメント

コメントする

目次