• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:【VBA】データシートから4件ずつ印刷させたいです)

【VBA】データシートから4件ずつ印刷!

このQ&Aのポイント
  • VBAを使用してデータシートから4件ずつ印刷する方法について質問します。
  • 具体的には、ユーザーフォームで開始番号と終了番号を指定し、印刷ボタンを押すとデータが4個ずつ並べられて印刷されるようにしたいです。
  • 現在のコードでは、forループで指定した番号から終了番号までデータを4つずつ印刷していますが、思った通りの結果が得られません。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

For NO = a To n を For NO = a To n Step 4 にします。

QA123
質問者

お礼

chie65535 様 お礼が遅くなり申し訳ございませんでした。 教えていただいた方法で出来ました。 ありがとうございました。

その他の回答 (2)

  • HohoPapa
  • ベストアンサー率65% (455/693)
回答No.3

例えばデータ総数が27行で 印刷指示範囲が3行目から12行目までといった 4の整数倍ではない場合。 あるいは、 データ総数が27行で 印刷指示範囲が25行目から40行目までといった 異常な指示の場合。 このようなことまで考慮すると ちょっと仕込みが必要になりましょう。 添付画像のイメージで、以下のコードでいかがでしょうか。 なお、 印刷指示の開始と終了が逆転している場合、 印刷指示の開始と終了が数値以外の場合、 印刷開始の開始行、終了行が0以下の場合を考慮していません。 また、データの終了行は、2列目が空欄かどうかで判断しています。 Sub aaa()  Dim a As Integer  Dim n As Integer  Dim wkL As Integer  Dim DRange As Range  a = 1 'ユーザーフォームで取得  n = 5 'ユーザーフォームで取得  With ThisWorkbook.Sheets(1)     'データ格納範囲を定義   Set DRange = Range(.Cells(3, 8), .Cells(6, 11))      Do        DRange.ClearContents '印刷範囲をクリアー        For wkL = 1 To 4   '印刷データをセット     If a + wkL > n + 1 Then Exit For     If .Cells(a + 2 + wkL, 2).Value = "" Then Exit For     DRange.Cells(1, wkL).Value = .Cells(a + 2 + wkL, 2).Value     DRange.Cells(2, wkL).Value = .Cells(a + 2 + wkL, 3).Value     DRange.Cells(3, wkL).Value = .Cells(a + 2 + wkL, 4).Value     DRange.Cells(4, wkL).Value = .Cells(a + 2 + wkL, 5).Value    Next wkL        .PrintOut '印刷       If a + wkL > n + 1 Then Exit Do    If .Cells(a + 2 + wkL, 2).Value = "" Then Exit Do    a = a + 4      Loop    End With End Sub

QA123
質問者

お礼

HohoPapa 様 お礼が遅くなり申し訳ございません。 いろいろな方法があるんですね! VBA判らないながらも、少しずつ勉強しています。 教えていただいた方法もこれから試してみたいと思いまう。 ありがとうございました。

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.2

印刷シートの先頭には、元データの4行おきに、出現するものが来るのだから、 For NO = a To n step 4 にして「Step 4」を使って繰り返せばよいでしょう。 ーー プリントエリアは、印刷後、セル範囲をクリアしておくべきではないか。 3行で印刷最終行がくる場合があるだろう。その際前の第4番目が残らないように。 ーー この程度のことで、ユーザーフィームを使うのは大げさすぎるように、個人的に思う。InputBoxで聞くので済むのでは。 ーー ub test01() x = InputBox("先頭,最終行=") y = Split(x, ",") MsgBox "先頭行=" & y(0) MsgBox "最終行=" & y(1) End Sub のy(0)とy(1)で済む。 === データ最終行は Sub test02() 最終行 = Range("A100000").End(xlUp).Row MsgBox 最終行 End Sub で済むかもしれない。

QA123
質問者

お礼

imogasi 様 お礼が遅くなり申し訳ございません。 教えていただいた Step 4 でうまくいきました。 また、よりよいプログラムのアドバイスを頂きましてありがとうございました。

関連するQ&A

専門家に質問してみよう