Excel VBAでページごとに異なるデータを印刷する方法

Visual Basic

Excel VBAを使用して、特定のページにデータを印刷したい場合、特にページごとにデータを交互に配置したい場合は、For文を活用することで柔軟に対応できます。この記事では、印刷するデータを交互に配置するためのVBAコードの書き方について説明します。

1. 基本的な考え方

まず、質問で求められている「1枚目の上が1人目、下が3人目、2枚目の上が2人目、下が4人目」というような交互にデータを配置する方法の概要を説明します。VBAのFor文を使用して、各データを交互に処理し、ページごとのレイアウトを調整します。

2. VBAコード例

以下のコード例では、For文を使って、データを交互にページに配置する方法を示します。印刷するデータは別シートに格納されており、A列から始まる各行のデータを印刷します。

Sub PrintData()
  Dim i As Integer
  Dim lastRow As Long
  Dim dataSheet As Worksheet
  Dim printSheet As Worksheet

  Set dataSheet = ThisWorkbook.Sheets("Data")
  Set printSheet = ThisWorkbook.Sheets("Print")

  lastRow = dataSheet.Cells(dataSheet.Rows.Count, 1).End(xlUp).Row

  For i = 2 To lastRow Step 2
    ' 1枚目の上が1人目、下が3人目
    printSheet.Cells(1, 1).Value = dataSheet.Cells(i, 1).Value ' 1人目
    printSheet.Cells(2, 1).Value = dataSheet.Cells(i + 1, 1).Value ' 3人目
    ' 印刷処理(仮)
    printSheet.PrintOut
  Next i
End Sub

このコードでは、データシートの2行目から始めて、Step 2で2行ずつ飛ばしながらデータを配置します。1人目はそのまま1ページ目に、3人目はその下に配置されます。

3. 奇数人数に対応した印刷処理

人数が奇数の場合、最後のページは1人だけが表示される可能性があります。これに対応するためには、条件分岐を使用して、奇数の場合でも適切にデータを配置することが重要です。

For i = 2 To lastRow Step 2
    printSheet.Cells(1, 1).Value = dataSheet.Cells(i, 1).Value ' 1人目
    If i + 1 <= lastRow Then
      printSheet.Cells(2, 1).Value = dataSheet.Cells(i + 1, 1).Value ' 次の人
    End If
    printSheet.PrintOut
Next i

このコードでは、人数が奇数の場合でも、最終ページに空白が入ることなく、適切にデータを表示させることができます。

4. まとめ

Excel VBAを使って、印刷時に交互にデータを配置する方法を紹介しました。For文を活用することで、データの処理が簡単になり、柔軟に印刷のレイアウトを調整できます。人数が奇数の場合の処理も考慮して、コードを改良することが可能です。

コメント

タイトルとURLをコピーしました