ExcelVBA~Excelデータを加工してPDF出力~

1. 概要

エクセルVBAを使用して、商品在庫データを仕入先ごとに自動分類し、テンプレートに転記してPDF形式で保存する方法を解説します。


2. 必要な準備

2.1 データシートの作成

以下の形式で、仕入先と在庫データを含むエクセルシートを用意します。シート名を「サンプルデータ」と設定してください。

商品ID商品名在庫数量単価金額(計算式)仕入先
101商品A50100050,000A株式会社
102商品B30150045,000A株式会社
103商品C20200040,000B株式会社
104商品D60120072,000A株式会社
105商品E40180072,000B株式会社

2.2 テンプレートシートの作成

以下のようなテンプレートシートを作成し、「テンプレート」という名前を付けてください。

項目内容例
会社名XXXX株式会社
住所東京都新宿区XXXX
電話番号03-XXXX-XXXX
担当者名山田 太郎
作成日自動的に今日の日付を設定

3. 実行方法

3.1 VBAコードの準備

以下のコードをVBAモジュールに貼り付けます。

vbaコードをコピーするSub 仕入先別現在庫データ保存()
    Dim wsData As Worksheet
    Dim wsTemplate As Worksheet
    Dim lastRow As Long
    Dim dict As Object
    Dim savePath As String
    Dim i As Long
    Dim key As Variant

    ' シートの設定
    Set wsData = ThisWorkbook.Sheets("サンプルデータ") ' データシート名
    Set wsTemplate = ThisWorkbook.Sheets("テンプレート") ' テンプレートシート名

    ' 最終行を取得
    lastRow = wsData.Cells(wsData.Rows.Count, 1).End(xlUp).Row

    ' Scripting.Dictionaryを作成して仕入先ごとに分類
    Set dict = CreateObject("Scripting.Dictionary")
    For i = 2 To lastRow
        If Not dict.exists(wsData.Cells(i, 6).Value) Then
            dict.Add wsData.Cells(i, 6).Value, wsData.Cells(i, 6).Value
        End If
    Next i

    ' 保存先フォルダの設定
    savePath = "フォルダパスを指定してください"
    If Dir(savePath, vbDirectory) = "" Then MkDir savePath

    ' 仕入先ごとにデータをテンプレートに転記し、PDFとして保存
    For Each key In dict.Keys
        ' テンプレートシートをコピー
        wsTemplate.Copy After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count)
        With ActiveSheet
            .Name = key ' シート名を仕入先名に変更

            ' ヘッダー情報の更新
            .Range("B3").Value = "仕入先: " & key ' 仕入先を挿入
            .Range("B6").Value = Date ' 作成日を挿入

            ' データ転記
            Dim row As Long
            row = 10 ' データ開始行
            For i = 2 To lastRow
                If wsData.Cells(i, 6).Value = key Then
                    .Cells(row, 1).Value = wsData.Cells(i, 1).Value ' 商品ID
                    .Cells(row, 2).Value = wsData.Cells(i, 2).Value ' 商品名
                    .Cells(row, 3).Value = wsData.Cells(i, 3).Value ' 在庫数量
                    .Cells(row, 4).Value = wsData.Cells(i, 4).Value ' 単価
                    .Cells(row, 5).Value = wsData.Cells(i, 5).Value ' 金額
                    row = row + 1
                End If
            Next i

            ' PDFとして保存
            .ExportAsFixedFormat Type:=xlTypePDF, Filename:=savePath & key & "_現在庫データ.pdf", Quality:=xlQualityStandard

            ' シートを削除
            Application.DisplayAlerts = False
            .Delete
            Application.DisplayAlerts = True
        End With
    Next key

    MsgBox "仕入先別現在庫データの保存が完了しました。"
End Sub

3.2 保存先の設定

保存先フォルダは任意のパスを指定してください(例: デスクトップの特定のフォルダ)。

3.3 実行

  1. VBAコードを挿入:
    • Excelの「開発」タブで「Visual Basic」を開き、コードをモジュールに貼り付けます。
  2. コードを実行:
    • 実行すると、仕入先ごとの現在庫データがPDF形式で保存されます。

4. 出力結果

  • 各仕入先の現在庫データがPDF形式で保存されます。
  • PDFファイルには仕入先名とそれに対応する商品の情報が記載されます。

5. 注意事項

  • データシートとテンプレートシートの名前を正確に設定してください。
  • 必要に応じて、データ構成やテンプレートのフォーマットを調整してください。

コメント