1. 概要
エクセルVBAを使用して、商品在庫データを仕入先ごとに自動分類し、テンプレートに転記してPDF形式で保存する方法を解説します。
2. 必要な準備
2.1 データシートの作成
以下の形式で、仕入先と在庫データを含むエクセルシートを用意します。シート名を「サンプルデータ」と設定してください。
| 商品ID | 商品名 | 在庫数量 | 単価 | 金額(計算式) | 仕入先 |
|---|---|---|---|---|---|
| 101 | 商品A | 50 | 1000 | 50,000 | A株式会社 |
| 102 | 商品B | 30 | 1500 | 45,000 | A株式会社 |
| 103 | 商品C | 20 | 2000 | 40,000 | B株式会社 |
| 104 | 商品D | 60 | 1200 | 72,000 | A株式会社 |
| 105 | 商品E | 40 | 1800 | 72,000 | B株式会社 |
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 実行
- VBAコードを挿入:
- Excelの「開発」タブで「Visual Basic」を開き、コードをモジュールに貼り付けます。
- コードを実行:
- 実行すると、仕入先ごとの現在庫データがPDF形式で保存されます。

4. 出力結果

- 各仕入先の現在庫データがPDF形式で保存されます。
- PDFファイルには仕入先名とそれに対応する商品の情報が記載されます。
5. 注意事項
- データシートとテンプレートシートの名前を正確に設定してください。
- 必要に応じて、データ構成やテンプレートのフォーマットを調整してください。

コメント