前回、【Excel】一覧表から個票のシート作成(VLOOKUP関数の利用)を紹介しました。今回はこの方法を活用し、VBAで一覧表から個票(単票)シートを一括作成するサンプルです。
内容:
アウトプットイメージ
次のように一覧表(リスト)から個票シートをVBAで一括作成する。

この事例で、個票のレイアウトはシート「日報」、一括作成の設定は
シート「設定シート」にある。
具体的には、個票のレイアウトがあるシート「日報」の内容は次のとおり。
このシートは、前回の【Excel】一覧表から個票のシート作成(VLOOKUP関数の利用)と同様にVLOOKUP関数で一覧表の値を参照している。

VBAサンプル
VBAでは、個票のレイアウトがあるシート「日報」で、レコードを表す固有の値(セルE1)の値を順次変更、シートのコピーを繰り返す。
これにより、一覧表から個票シートを一括作成する。
なお、設定シートは、VBAのメンテナンス業務を減らすため、シート名等の情報を次のように記載している。

コードの内容は次のとおり。
Option Explicit
Dim 一覧シート As Worksheet
Dim 個票様式 As Worksheet
Dim 個票のレコードセル番地 As String
Dim 開始行 As Long
Dim 終了行 As Long
Dim 行 As Long
Sub リストから個票に展開()
Application.ScreenUpdating = False
'初期設定 Sheets("設定シート")から値取得'
With ThisWorkbook.Sheets("設定シート")
Set 一覧シート = ThisWorkbook.Sheets(.Range("D3").Value)
Set 個票様式 = ThisWorkbook.Sheets(.Range("D4").Value)
個票のレコードセル番地 = .Range("D5").Value
開始行 = .Range("D8").Value
終了行 = .Range("D9").Value
End With
'終了行の確認、最大100件までとしている'
If 終了行 - 開始行 > 100 Then
終了行 = 開始行 + 100
MsgBox "展開は、最大100件までです"
End If
'繰り返し'
For 行 = 開始行 To 終了行
個票様式.Range(個票のレコードセル番地).Value = 一覧シート.Cells(行, 1).Value
個票様式.Copy after:=Worksheets(Worksheets.Count)
ActiveSheet.Name = 個票様式.Range(個票のレコードセル番地).Value
Next 行
Application.ScreenUpdating = True
End Sub
補足説明
・一括作成できる個票シートは最大100件にしています。管理可能であれば、上限を増やしても可です。
・開始行、終了行は、一覧表での”行”の情報です。
参考
リストから単票のシートやPDFを作成する事例一覧
リストから単票のシートやPDFを作成する事例一覧は以下です。
データの加工・抽出、管理の操作事例
その他、データの加工・抽出、管理の操作事例について、以下にまとめています。
以上、VBAで一覧表から個票シートを一括作成するサンプルでした。