ここから本文です

Sub 連続印刷() Dim i As Integer Dim LastRow As Integer Worksheets("...

pia********さん

2018/11/1309:11:00

Sub 連続印刷()
Dim i As Integer
Dim LastRow As Integer

Worksheets("印刷シート").Select

With Worksheets("リストシート")
LastRow = .Range("A65536").End(xlUp).Row
For i = 2 To LastRow
Range("AV5").Value = .Range("A" & i).Value
ActiveSheet.PrintOut
Next
End With
End Sub




ExcelのVBAに関する質問です。

現在請求書を作るにあたり、VLOOKUPで別シートから項目を"印刷シート"に引っ張り、順番に印刷するマクロを作って、利用しています。


使用コードを記載します

Dim i As Integer
Dim LastRow As Integer

Worksheets("印刷シート").Select

With Worksheets("リストシート")
LastRow = .Range("A65536").End(xlUp).Row
For i = 2 To LastRow
Range("AV5").Value = .Range("A" & i).Value
ActiveSheet.PrintOut
Next
End With
End Sub



これなのですが、"リストシート"に項目が入っており、セルAV5に識別番号を入れ、それ以降のものを全部印刷するというマクロです。

AV5の数字が順番に切り替わっていき、印刷、切り替わり印刷を繰り返します。


ここからが質問なのですが、全部印刷するのではなく、セルをもう1つ設け、開始番号をAV5セル、終了番号を別セルに入力し、その番号の間のみ印刷を行いたいというものです。


それにあたり、1つややこしい点がありまして
"リストシート"の識別番号は連番ではないのです。

1025の次が950などと、数字に規則性がないのです。

そのため、AV5が1025 終了番号セルが48と入力されていたら、"リストシート"の1025から48の間の番号を順番に引っ張り、印刷するようにしたいのです。



皆様のお力をお貸し頂きたいです。
宜しくお願いいたします。

閲覧数:
286
回答数:
2

違反報告

ベストアンサーに選ばれた回答

プロフィール画像

カテゴリマスター

kky********さん

2018/11/1312:51:34

リストデータが
1290
48
560
480
のように並んでいる場合
開始を1290 終了を480 のようにしたいという事なら

開始をAV5、終了をAV7に入れるとして

Sub 連続印刷()
Dim sh As Worksheet
Dim sno As Long, eno As Long
Dim LastRow As Integer
Dim srng As Range
Dim i As Long
Set sh = Worksheets("印刷シート")
With sh
sno = .Range("AV5").Value
eno = .Range("AV7").Value
End With
With Worksheets("リストシート")
LastRow = .Cells(Rows.Count, 1).End(xlUp).Row
With .Range("A1:A" & LastRow)
Set srng = .Find(What:=sno, LookIn:=xlValues, LookAt:=xlWhole)
End With
If srng Is Nothing Then
MsgBox "開始番号がデータにありません"
Exit Sub
End If
i = srng.Row
Do Until i > LastRow
sh.Range("AV5").Value = .Range("A" & i).Value
'sh.PrintOut
sh.PrintPreview
If .Range("A" & i).Value = eno Then
Exit Do
End If
i = i + 1
Loop
End With
End Sub

  • 質問者

    pia********さん

    2018/11/1314:19:50

    kky様

    返信ありがとうございます。

    マクロを実行すると印刷プレビューが何度も出てきてしまいます

    印刷プレビューは出ず、そのまま印刷命令がいくようになりますでしょうか?

  • その他の返信を表示

返信を取り消しますが
よろしいですか?

  • 取り消す
  • キャンセル

質問した人からのコメント

2018/11/13 16:04:02

思い通りの挙動になりました。

本当に毎回毎回、お世話になっております。

ありがとうございます。

ベストアンサー以外の回答

1〜1件/1件中

nan********さん

2018/11/1309:42:49

リストシートのA列が必ず数値であるなら、印刷前に比較判定を行えば出来ると思います。

参考にどうぞ

Sub test()
Dim i As Integer
Dim LastRow, MAX, MIN As Long

Worksheets("印刷シート").Select

With Worksheets("リストシート")
LastRow = .Range("A" & Rows.Count).End(xlUp).Row

'A2が開始値、B1に終了値がある場合
If .Range("A2").Value > .Range("B1").Value Then
MAX = .Range("A2").Value
MIN = .Range("B1").Value
Else
MAX = .Range("B1").Value
MIN = .Range("A2").Value
End If

For i = 2 To LastRow
Range("AV5").Value = .Range("A" & i).Value
If MIN <= .Range("A" & i).Value And .Range("A" & i).Value <= MAX Then
ActiveSheet.PrintOut
End If
Next
End With

End Sub

返信を取り消しますが
よろしいですか?

  • 取り消す
  • キャンセル

この質問につけられたタグ

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる