質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

解決済

2回答

4240閲覧

VBAで連続で印刷する際

退会済みユーザー

退会済みユーザー

総合スコア0

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2021/05/22 06:40

編集2021/05/22 08:08

VBAでシートに表示された内容を連続で印刷しようとしています。
P列に入っている文字が5でなければ値のセルを005にして、そうでなければ空白にするというものですが
この方法で印刷を行うとP列の行数分『印刷中』のダイアログが出てきてしまいます。
どのようにすれば1度の印刷処理で済むようにできますでしょうか。
よろしくお願いします。

Sub print() Dim i As Integer Dim xlSh Set xlSh = Worksheets(1) For i = 3 To xlSh.Range("P3").End(xlDown).Row If Cells(i, "P").Value <> 5 Then Range("値").Value = "005" Else Range("値").Value = "" End If ActiveSheet.PrintPreview 'ActiveSheet.PrintOut Next End Sub

もう少しデータはあるのですが簡潔にしています。

NOP
5
5
5
5
5
5

P列の文字が5の場合、セル名を『値』とした場所に005と表示をさせて、そのシートを1ページにしています。
ループの回数分PrintOut等を実行すると1ページずつの印刷になってしまうので、改ページ?があるような状態にできれば良いと思うのですが、方法が分からず質問させていただきました。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

「P列の文字が5の場合、セル名を『値』とした場所に005と表示をさせて、そのシートを1ページにしています。」
というのは、P列が5になっている行の他の列に、シート名などシートを特定できる情報があって、そのシートを印刷するという意味でしょうか?

投稿2021/05/22 08:24

編集2021/05/22 09:23
plomte

総合スコア46

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2021/05/22 08:50

すいません。 印刷の対象シートは基本1つだけです・・・
退会済みユーザー

退会済みユーザー

2021/05/22 10:53

すいません、シートを特定できる情報というのが私には分かりません・・・
guest

0

ベストアンサー

追記を受けての回答

質問分でまとめきれていない、本来の要件は、以下のようなものだと推測します。

  • bookのsheets(1)にデータシートが存在する
  • 帳票用のシートがある。そのに印刷ボタンがあるが、そのシートをアクティブにして特定のマクロを実行する運用をしている。
  • そのマクロを実行すると、データシートの行を上から走査し、帳票用シートの特定のカラムをデータシートの行の値に書き換え、印刷する。質問の例ではP列だけ変えていますが、おそらくもっと大量に書き換えるデータがあると推測します。
  • データシートの列が最大500行ほどあり、1行処理するたびに「印刷中です」のダイアログが出るのでダイアログが大量に同時表示される。
  • その際のPCの操作感低下や負荷が心配である。

まず、印刷中ダイアログそのものを非表示にすることはできません。

現在1ページずつ行っている印刷については、

  • 処理前に新規ブック作成
  • データシートの行ごとに、値を書き換えたらWorksheet.Copyメソッドで新規ブックにシートをコピーする
  • データシートの全行処理が終了したら新規ブックのPrintOutメソッドを実行する。
  • 新規ブック削除

という流れにすれば一応一度の印刷処理で全シートが印刷できますが、最大500シートともなると相当なメモリ量が消費されると思います。一応メモリが許す限りシートを作成できる仕様となっているようですが、現物を確認しないと足りるかどうかは判断できません。
処理中の負荷は現在の方法で単純に印刷するよりも相当高いと考えます。

PCやプリンターに対する負荷だけで考えれば、現在の方法が最も負荷が低いと思います。
ただ、印刷処理が完了するまではPCで他の作業をしないようにしたほうが予期せぬトラブル防止のためにも良いかと思います。
(プリンタでの印刷が完了、ではありません。PCからプリンタに送る印刷データの作成が完了するまで、という意味です)

そもそも、500ページ分の印刷ともなると個人PCで行う作業ではありません。途中で用紙も足りなくなるでしょう。何等かのレポートサーバを作ってそちらに行わせる作業です。ただ、このためにサーバを立てるノウハウも費用もないかと思われます。

なので、結局おススメの方法は、現状の方法で印刷処理が完了するまで待ってもらうのが最も現実的な運用だと思います。
もしくは、この帳票を印刷する専用のパソコンを用意し(ぼっこいPCで良い)、印刷処理だけそのPCでやってもらうような運用でしょうか。

追記前の回答

P列の値チェックをP列の全セルにかけてから印刷したい、と言う要件である前提で回答します。

PrintOut (PrintPreview) がForブロックの中に入っているので、P列のチェックが1回回るごとに印刷がかかっているだけではないでしょうか。
単純にPrintOutをForブロックの外に出せばいいだけなのではないでしょうか。

投稿2021/05/22 07:06

編集2021/05/22 11:29
hope_mucci

総合スコア4447

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2021/05/22 07:24

ご回答ありがとうございます。 たしかにループの回数分出るのは理解しておりますが、ループの外に出したとしてどのように全てPrintすれば良いのでしょうか。 よろしくお願いします。
hope_mucci

2021/05/22 07:48

その「全てPrint」がどのような要件なのかが文書から判断できません。 「何を」連続で印刷したいのか、もっと具体的に詳しく説明してください。 少なくとも私には回答で書いたように判断しています。シート別に印刷するとか?
退会済みユーザー

退会済みユーザー

2021/05/22 08:12

質問の仕方が悪くてすみません。 質問を編集しました。 005と表示されたシートが1ページで印刷プレビューで次、次とループの回数分見れるような状態が理想です。 現状はプレビュー画面で『印刷プレビューを閉じる』を押さなければ次のページが出てきません。
hope_mucci

2021/05/22 08:46

ああ、なんとなくわかりました。5が入っているシートの行数ぶんの回数activesheetを印刷するのが要点ですね。 印刷中ダイアログが複数出るのはどうしても許容できない要件ですか?
退会済みユーザー

退会済みユーザー

2021/05/22 08:56

ご理解いただけたようで質問の仕方が悪くてすみません。 ループの回数が多い場合500回程になることもあるので、その回数分『印刷中』が表示されますと、終わるまでPCを触り辛いのと負荷とかの問題もありそうで・・・ 見た目が一番のところもありますが・・・
jinoji

2021/05/22 09:34

ある箇所に"005" とかかれたページをたとえば300ページ分と、 その箇所がブランクになったものを200ページ分、 合計500ページを印刷したい、ということですか。
退会済みユーザー

退会済みユーザー

2021/05/22 10:52

jinoji様 はい、そのような想定です。
hope_mucci

2021/05/22 11:31

先のコメントに書いた要件で正しいとのことなので、対策を回答本文に追記しました。
退会済みユーザー

退会済みユーザー

2021/06/02 13:50

お返事遅くなり申し訳ございません。 元々Excelで作っていたのでExcelに拘っていました(Excelじゃないと出来ないと思っていた)が、Wordの差し込み印刷とマクロでやりたい事はできました。 お時間を取って色々考えてくださりありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問