データの分だけファイルを自動作成!マクロで簡単!ファイル生成方法!【Excelのレシピ】

エクセルで管理しているデータを、メンバーに配るためのエクセルに転記して渡す。そんな業務があります。

1行に1人分のデータが記入されていて、配るためのエクセルに少しずつそのデータをコピペして1人分完成のような作業です。

何百人と管理していると気が遠くなります。

こんな時はマクロを使いましょう。

今回はデータの分だけ、Excelファイルを作るようなマクロを紹介します。

やりたいこと

データの分だけエクセルファイルを作る。作ったエクセルファイルにはその人ごとのデータが入力されている。

ルートさん

逆にたくさんのファイルから1つのエクセルに集計したい時はこちら

やりたいことをくわしく

データのある「台帳」というシートがあり、「台帳」1行ごとに一人のデータが入力されているものとします。

別のシートにある「自己評価」に、「台帳」の1行分のデータを入力して、「配るエクセル」として1つのエクセルファイルを作ります。

つくりかた

1.「台帳」シートと「自己評価」シートがあるエクセルファイルを用意します。

2.「開発」タブの「Visual Basic」をクリックしてください。

3.画面が起動しますので「挿入」をクリックして、「標準モジュール」をクリックしてください。

4.白いウィンドウが現れます。

5.下記プログラムをコピーして貼り付けてください。

Sub file_create()

    Dim row As Long
    Dim i As Long
    Dim filename As String
    Dim folder As String
    Dim book As Workbook
    
    
    folder = ThisWorkbook.Path & "\保存フォルダ"
    If Dir(folder, vbDirectory) = "" Then
        MkDir folder
    End If
    
    row = ThisWorkbook.Worksheets("台帳").Cells(Rows.Count, 1).End(xlUp).row
    
    For i = 2 To row
        filename = ThisWorkbook.Worksheets("台帳").Cells(i, 1).Value & ThisWorkbook.Worksheets("台帳").Cells(i, 2).Value
        
        ThisWorkbook.Worksheets("自己評価").Copy
        
        Set book = ActiveWorkbook
        
        book.Worksheets("自己評価").Range("B2").Value = ThisWorkbook.Worksheets("台帳").Cells(i, 1).Value
        book.Worksheets("自己評価").Range("E2").Value = ThisWorkbook.Worksheets("台帳").Cells(i, 2).Value
        book.Worksheets("自己評価").Range("G2").Value = ThisWorkbook.Worksheets("台帳").Cells(i, 3).Value
        book.Worksheets("自己評価").Range("G3").Value = ThisWorkbook.Worksheets("台帳").Cells(i, 4).Value
        book.Worksheets("自己評価").Range("C19").Value = ThisWorkbook.Worksheets("台帳").Cells(i, 5).Value
        
        book.SaveAs filename:=folder & "\" & filename & ".xlsx", FileFormat:=xlOpenXMLWorkbook
        book.Close
    Next i
    
    
End Sub

6.実行する前に保存しておきましょう。※「xslm」形式で保存してください。

7.それでは、マクロを動かしてみましょう。動かしかたがわからないときは下のボタンをクリックして確かめてください。

改造ポイント

book.Worksheets("自己評価").Range("B2").Value = ThisWorkbook.Worksheets("台帳").Cells(i, 1).Value
book.Worksheets("自己評価").Range("E2").Value = ThisWorkbook.Worksheets("台帳").Cells(i, 2).Value
book.Worksheets("自己評価").Range("G2").Value = ThisWorkbook.Worksheets("台帳").Cells(i, 3).Value
book.Worksheets("自己評価").Range("G3").Value = ThisWorkbook.Worksheets("台帳").Cells(i, 4).Value
book.Worksheets("自己評価").Range("C19").Value = ThisWorkbook.Worksheets("台帳").Cells(i, 5).Value

上記部分が「台帳」から「自己評価」に転記している部分です。

1.右側の下記部分は台帳の「1列目」(社員番号)を意味しています。

ThisWorkbook.Worksheets("台帳").Cells(i, 1).Value

2.左側の下記部分は自己評価シートのセル番地「B2」を意味しています。

book.Worksheets("自己評価").Range("B2").Value

3.つまり、上記1.2.は台帳の社員番号を、自己評価シートの「B2」番地に転記した。ということになります。

4.今回は、「台帳」シートのデータがA列からE列までの少ないデータでした。もっと横に多く、行にデータがある場合は、上記改造ポイントの部分をコピペして、セルの番地を変えるだけで対応ができます。

変えるセル番地は下図の部分です。

さいごに

プログラムを作ることになれるにはよく触って、いろいろ動かしてみるのが一番です。

動かなくなってもよいように元のファイルをコピーしてから改造してみてください。

スポンサードリンク




スポンサードリンク