- ベストアンサー
【VBA】データシートから4件ずつ印刷!
- VBAを使用してデータシートから4件ずつ印刷する方法について質問します。
- 具体的には、ユーザーフォームで開始番号と終了番号を指定し、印刷ボタンを押すとデータが4個ずつ並べられて印刷されるようにしたいです。
- 現在のコードでは、forループで指定した番号から終了番号までデータを4つずつ印刷していますが、思った通りの結果が得られません。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
For NO = a To n を For NO = a To n Step 4 にします。
その他の回答 (2)
- HohoPapa
- ベストアンサー率65% (455/693)
例えばデータ総数が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
お礼
HohoPapa 様 お礼が遅くなり申し訳ございません。 いろいろな方法があるんですね! VBA判らないながらも、少しずつ勉強しています。 教えていただいた方法もこれから試してみたいと思いまう。 ありがとうございました。
- imogasi
- ベストアンサー率27% (4737/17069)
印刷シートの先頭には、元データの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 で済むかもしれない。
お礼
imogasi 様 お礼が遅くなり申し訳ございません。 教えていただいた Step 4 でうまくいきました。 また、よりよいプログラムのアドバイスを頂きましてありがとうございました。
お礼
chie65535 様 お礼が遅くなり申し訳ございませんでした。 教えていただいた方法で出来ました。 ありがとうございました。