VBA(Visual Basic for Applications)を使用して、Excelの特定の列に基づいてデータを抽出し、新しいファイルを自動で作成する方法を学びます。この記事では、会社名ごとにデータを抽出し、指定したフォルダに保存するマクロを作成する方法を解説します。
問題の概要
ExcelのA列に会社名が記載されており、その会社名ごとにA列からS列までのデータをコピーして、新しいファイルを作成する方法を学びます。新しいファイルの名前は「会社名_今日の日付」という形式にし、指定の場所に格納することが目標です。
以下の手順をVBAマクロで実現します。
必要なVBAコードの作成
このマクロは、各会社名ごとにデータをコピーし、新しいファイルを作成するという処理を行います。以下はそのVBAコードの一例です。
Sub ExportDataByCompany()
Dim ws As Worksheet
Dim lastRow As Long
Dim companyName As String
Dim newWorkbook As Workbook
Dim newSheet As Worksheet
Dim todayDate As String
Dim savePath As String
' シートの設定
Set ws = ThisWorkbook.Sheets("Sheet1") ' データがあるシート名を指定
' 最後の行を取得
lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
' 今日の日付を取得
todayDate = Format(Date, "yyyymmdd")
' 各会社名ごとに処理
For i = 2 To lastRow
companyName = ws.Cells(i, 1).Value ' A列の会社名を取得
' 新しいワークブックを作成
Set newWorkbook = Workbooks.Add
Set newSheet = newWorkbook.Sheets(1)
' 会社名ごとにA列からS列までをコピー
ws.Range(ws.Cells(i, 1), ws.Cells(i, 19)).Copy Destination:=newSheet.Range("A1")
' 新しいファイルを保存
savePath = "C:\Users\YourUsername\Documents\" & companyName & "_" & todayDate & ".xlsx"
newWorkbook.SaveAs savePath
newWorkbook.Close False
Next i
MsgBox "処理が完了しました!"
End Sub
このコードは、以下の手順で動作します。
- 指定されたシートからA列の会社名を1つずつ取得
- 各会社ごとに新しいワークブックを作成
- A列からS列までのデータをコピーして新しいワークブックに貼り付け
- 新しいファイルを「会社名_今日の日付.xlsx」という名前で保存
- ファイルを保存後、次の会社へ処理を繰り返す
VBAコードの動作確認
VBAコードを実行する前に、以下の準備をしておく必要があります。
- Excelファイルの会社名がA列にリストされていることを確認
- コード内のシート名や保存先のパスを正しく設定
- VBAマクロが実行できるように、マクロの設定を有効にする
コードを実行後、指定した保存先に「会社名_今日の日付.xlsx」の形式で新しいファイルが作成されることを確認してください。
エラー対処方法
もしVBAマクロの実行中にエラーが発生した場合、以下の点を確認してください。
- 保存先のパス: ファイルを保存するディレクトリが正しく指定されているか確認。特に、Windowsのユーザー名やパスが正しいか確認しましょう。
- シート名: データが入っているシートの名前が正しいか確認。
- コピー範囲: コピーする範囲が正しく指定されているか確認(この例ではA列からS列まで)。
まとめ
このVBAマクロを使用することで、会社名ごとにデータを自動で抽出し、新しいファイルを作成する作業を効率化できます。適切にコードを設定し、ファイル保存先やシート名を確認することで、正しく動作させることができます。定期的な作業に役立つ自動化ツールとして、VBAを活用することができます。


コメント