Excel 自動化

Excel VBA テンプレートファイルから複数ファイルを一瞬で作成する-FileCopy

1つのテンプレートファイルから、違うファイル名で沢山ファイルを作りたい時ってありません?

例えば、
スタッフの数だけ同じファイルを作りたい
支店や部署の数だけ同じファイルを作りたい
1月から12月まで同じファイルを作りたい
10年分同じファイルを作りたい
とか。

私はこういう場面、よくあるんです。

なので、
1.1つのテンプレートファイルから別名で複数のファイルを自動で作成する
2.複数のテンプレートファイルから別名で複数のファイルを自動で作成する
2つの方法をVBAで、「FileCopy」ステートメントでマクロを作っています。

結構、便利なので参考にしてください。

投稿者「みか」自己紹介

  • パソコンとデータベースが大好き
  • 自社でネットワーク・システム・機器管理、Webサイト構築
  • 自社向けのシステムをMicrosoft AccessやPHPで多数構築
  • Excelでの作業はVBAを使って効率化
  • ロックバンド「VARS」でベース担当
  • 「VARS」のWebサイト、ブログも構築
  • 「VARS」のライブを観に来てね!https://vasofatum.jp/live/

1つのテンプレートファイルから別名で複数のファイルを自動で作成する

1つのテンプレートファイルから別名で複数のファイルを自動で作成する方法です。

マクロは「ファイルコピー用.xlsm」というブックに書き込んでいます。

テンプレート.xlsx」というファイルから複数のファイルを同フォルダ内の「コピー先」というフォルダに作っていきます。

B1セルにテンプレートのファイル名を拡張子付きで入力します。

4行目から作成したいファイル名を入力します。拡張子は、テンプレートファイルから取得するので入力しません。

※A列は、ファイル名に番号を入れたかったので、番号を入力しています。ファイル名に変換するときは「1」→「001」「2」→「002」となるように変換しています。

↓コードはこちら。

Sub goFileCopy1()
    Dim wb As Workbook
    Dim ws As Worksheet
    Dim wbPath As String
    Dim wbCopyPath As String
    
    Dim fExtArr As Variant
    Dim fExt As String

    Dim fNameBefore As String
    Dim fNameAfter As String
    
    Dim LastRow As Long
    Dim i As Long
    
    'ブックとシートをset
    Set wb = ThisWorkbook
    Set ws = wb.Worksheets("Sheet1")
    
    'このブックのパス
    wbPath = wb.Path & "\"
    
    'コピー先フォルダパス
    wbCopyPath = wbPath & "コピー先\"
    'コピー先フォルダがあるかどうか
    If Dir(wbCopyPath, vbDirectory) = "" Then
        MkDir wbCopyPath
    End If

    'A3から下に向かって最終行を取得
    LastRow = ws.Range("A3").End(xlDown).Row
    
    'テンプレートファイルを指定
    fNameBefore = wbPath & ws.Range("B1").Value
    
    'テンプレートファイルから拡張子を取得
    fExtArr = Split(ws.Range("B1").Value, ".")
    fExt = "." & fExtArr(UBound(fExtArr))
    
    '最終行まで新ファイル名を生成し、ファイルをコピーする
    For i = 4 To LastRow
        fNameAfter = wbCopyPath & Format(ws.Cells(i, 1).Value, "000")
        fNameAfter = fNameAfter & ws.Cells(i, 2).Value & fExt
        FileCopy fNameBefore, fNameAfter
    Next i
    
    MsgBox "終了"
End Sub

マクロを実行すると、「コピー先」フォルダに新しいファイルが出来ました!

※マクロ実行時は、テンプレートファイルは閉じておきます。

複数のテンプレートファイルから別名で複数のファイルを自動で作成する

次は、複数のテンプレートファイルから別名で複数ファイルを自動で作成する方法です。

マクロは「ファイルコピー用.xlsm」というブックに書き込んでいて、同フォルダ内の「コピー先」というフォルダに新しいファイルを作っていきます。

A列にテンプレートのファイル名を拡張子付きで入力します。

B,C列に作成したいファイル名を入力します。拡張子は、テンプレートファイルから取得するので入力しません。

今回は、Wordファイルも入れてみました。

※B列は、ファイル名に番号を入れたかったので、番号を入力しています。ファイル名に変換するときは「1」→「001」「2」→「002」となるように変換しています。

↓コードはこちら。

Sub goFileCopy2()
    Dim wb As Workbook
    Dim ws As Worksheet
    Dim wbPath As String
    Dim wbCopyPath As String
    
    Dim fExtArr As Variant
    Dim fExt As String

    Dim fNameBefore As String
    Dim fNameAfter As String
    
    Dim LastRow As Long
    Dim i As Long
    
    'ブックとシートをset
    Set wb = ThisWorkbook
    Set ws = wb.Worksheets("Sheet2")
    
    'このブックのパス
    wbPath = wb.Path & "\"
    
    'コピー先フォルダパス
    wbCopyPath = wbPath & "コピー先\"
    'コピー先フォルダがあるかどうか
    If Dir(wbCopyPath, vbDirectory) = "" Then
        MkDir wbCopyPath
    End If

    'A1から下に向かって最終行を取得
    LastRow = ws.Range("A1").End(xlDown).Row
    
    '最終行までテンプレートファイル名を取得し、新ファイル名を生成し、ファイルをコピーする
    For i = 2 To LastRow
        'テンプレートファイルを指定
        fNameBefore = wbPath & ws.Cells(i, 1).Value

        'テンプレートファイルから拡張子を取得
        fExtArr = Split(fNameBefore, ".")
        fExt = "." & fExtArr(UBound(fExtArr))
        
        '新ファイル名を生成し、ファイルをコピーす'
        fNameAfter = wbCopyPath & Format(ws.Cells(i, 2).Value, "000")
        fNameAfter = fNameAfter & ws.Cells(i, 3).Value & fExt
        FileCopy fNameBefore, fNameAfter
    Next i
    
    MsgBox "終了"
End Sub

マクロを実行すると、「コピー先」フォルダに新しいファイルが出来ました!

※マクロ実行時は、テンプレートファイルは閉じておきます。

「FileCopy」ステートメント構文

FileCopy」ステートメントは、ファイルをコピーします。

FileCopy source, destination

source:必須。コピー元のファイル名を指定します。ディレクトリ、フォルダーおよびドライブを含めることができます。
destination:必須。コピー先のファイル名を指定します。ディレクトリ、フォルダーおよびドライブを含めることができます。

開いているファイルで「FileCopy」ステートメントを使用しようとすると、エラーが発生します。

サンプル
Publicドキュメントフォルダの「aaa.docx」のファイルを、Publicピクチャフォルダに「bbb.docx」にコピーするサンプルです。

Sub test()
    FileCopy "C:\Users\Public\Documents\aaa.docx", "C:\Users\Public\Pictures\bbb.docx"
End Sub

-Excel, 自動化
-, , , , , ,