エクセルで管理しているデータを、メンバーに配るためのエクセルに転記して渡す。そんな業務があります。
1行に1人分のデータが記入されていて、配るためのエクセルに少しずつそのデータをコピペして1人分完成のような作業です。
何百人と管理していると気が遠くなります。
こんな時はマクロを使いましょう。
今回はデータの分だけ、Excelファイルを作るようなマクロを紹介します。
やりたいこと
データの分だけエクセルファイルを作る。作ったエクセルファイルにはその人ごとのデータが入力されている。
やりたいことをくわしく
データのある「台帳」というシートがあり、「台帳」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列までの少ないデータでした。もっと横に多く、行にデータがある場合は、上記改造ポイントの部分をコピペして、セルの番地を変えるだけで対応ができます。
変えるセル番地は下図の部分です。
さいごに
プログラムを作ることになれるにはよく触って、いろいろ動かしてみるのが一番です。
動かなくなってもよいように元のファイルをコピーしてから改造してみてください。
逆にたくさんのファイルから1つのエクセルに集計したい時はこちら