Excel (VBA)

Excel VBAに関するフォーラムです。
  • 掲示板への投稿には会員登録(無料)が必要です。会員登録がまだの方はこちら
  • 掲示板ご利用上のお願い」に反するご記入はご遠慮ください。
  • Q&A掲示板の使い方はこちらをご覧ください
トピックに返信
質問

 
(Windows 7 Professional : Excel 2010)
1シートに複数ページの請求書で特定のページのみ印刷したい
投稿日時: 18/02/02 10:39:03
投稿者: nyannyan

1シートに請求書が縦方向に400ページ。各ページ特定のセルに〇がついているページのみ印刷したい。
 
皆さまお世話になります。
 
エクセルで1つのワークシート(ワークシート名:請求書)に毎月400枚ほど請求書が出力されます。
 (※シートの縦方向に400枚ずらっと出力されているイメージです。)
 
その中で、印刷出力に必要なのは100枚ほどなのですが、
 
トリガーとして、
 各請求書のページ始まりの、セルの上から4つ目、左から3つ目のセルに
「〇」が記載されているページのみ印刷出力したいと思っています。
※ちなみに、請求書1枚の行は、各ページ40行、横列は10列(J列)あります。
 
これまでは、毎月400枚全部印刷して、
 必要な100枚だけを手作業で抽出する形をとっていたのですが、
このアナログ作業とても大変ですし、印刷コストもままならないんです。
 
きっとVBAで400ページ中から特定のセルに「〇」がついているものを、IF文で抽出し、
For 〜 Nextで抽出した100ページ分印刷すればいいんだろうなぁとは思ってますが・・・
 
VBAでなんとか簡単にならないものか教えていただけませんか?
助けてください。
 
以上、宜しくお願い致します。

回答
投稿日時: 18/02/02 10:54:27
投稿者: mattuwan44

おおおお、あちこちに書いてますねー><
 
あちこちで聞かれるのは、回答者にとって気分のいいものではないので、
どこか一つで質問してください。
 
あなたが巡回しているということは回答者も巡回してます。
回答者に不快な印象をもたれるのは、欲しい情報を引き出したいあなたにとって損でしょう。

投稿日時: 18/02/02 11:14:24
投稿者: nyannyan

mattuwan44 さんの引用:
おおおお、あちこちに書いてますねー><
 
あちこちで聞かれるのは、回答者にとって気分のいいものではないので、
どこか一つで質問してください。
 
あなたが巡回しているということは回答者も巡回してます。
回答者に不快な印象をもたれるのは、欲しい情報を引き出したいあなたにとって損でしょう。

 
すみません、そうですね。
 色々と調べて自分で書いてみたのですが、
  
Sub 対象ページ印刷()
 
Dim r, i, k, j
 MsgBox "全てのページは" & ActiveSheet.PageSetup.Pages.Count & " ページです。"
 
i = 0
j = 0
k = ActiveSheet.PageSetup.Pages.Count
 
For r = 4 To 39 * k Step 39
 
i = i + 1
 
If ActiveSheet.Cells(r, 3) = "〇" Then
   ActiveSheet.PrintOut i, i, 1
   j = j + 1
End If
 
Next r
   
MsgBox "印刷完了。印刷されたページは" & j & " ページになります。"
   
End Sub
   
こんなのでいけるでしょうか?

回答
投稿日時: 18/02/02 11:56:33
投稿者: WinArrow
投稿者のウェブサイトに移動

印刷したいページを、セル範囲で取得する必要がありますよね?
PageSetup.Pagesプロパティでは、セル範囲を取得することはできませにょね?
また、
Pagesetup.PrintAreaでは、全体の印刷領域(設定しえてある場合)は取得できても、
印刷したいページとの関連が分かりません。
 
シートオブジェクトの
HpageBreaks VpageBreaks
を使って、各ページごとのセル範囲を取得し、
要印刷と認識するセルが含まれるページごとのセル範囲を印刷する方法になると思います。
 

回答
投稿日時: 18/02/02 22:44:51
投稿者: WinArrow
投稿者のウェブサイトに移動

印刷ページごとのセルアドレス(セル範囲)を取得するコードサンプルを紹介します。
 
↓をクリックしてツールチップス目次を表示してください。
http://winarrow.web.fc2.com/psoft/vbatips/vbatips00.htm
 
この中から、↓を選択します。
pro55:【印刷ページ毎のセルアドレスを取得する】
  
印刷したい範囲が、どの印刷ページ毎のセル範囲に含まれているか調査すれば
その範囲またはページ番号を印刷sれよいでしょう。
 
  
  
  
  
  
 
  
 
 
  

回答
投稿日時: 18/02/03 07:51:21
投稿者: mattuwan44

>すみません、そうですね。
ちょ、あちこちでマルチポストをしていることを指摘されてますが、
そのことを理解と反省をされていますか?
掲示板によってはマルチポストを明確に禁止しているサイトもあります。
ここは、明記されてませんが、回答する側にとっては、不快な行為です。
 
で、
あっちに回答書いちゃってるけど、こっちで話を進めるのですか?
こういうことになるから困るんだよね。。。
そのうち、こっちが一生懸命考えても、
「あ、もう解決したんで、いいです♪」
みたいなこと言い出すんでしょ?
 
そんな風に思われないように、
こちらで話しを続けるなら、
他の板は解決というか保留にして、こちらで話を続ける旨を皆さんにお伝えください。
こちらの板を止めるなら、解決にしてどこの板で話を続けるかお知らせください。
それが、教えを乞う、マナーとか礼儀だと思います。

回答
投稿日時: 18/02/06 19:12:39
投稿者: 細雪

nyannyan さんの引用:

こんなのでいけるでしょうか?

 
それはあなたのデータ次第。
動かして望み通りの結果が出れば良いんじゃないですか?
デバッグ作業はご自身でおやりください。
回答者はデバッグ担当ではありませんよ。
 
 
ただ一つ、あくまでも個人的な好みとして、
> k = ActiveSheet.PageSetup.Pages.Count
行高が微妙に狂うなどして改ページがずれる可能性があることを考えると、
.Pages.Count に頼るのは積極的にはオススメしません。
 
それであれば、「該当列の最下行」まで「40行ごとに繰り返すようにFor〜Next」を設定、
該当セルが既定の文字であればそこを起点に「Resize」して、「印刷範囲を設定」して印刷。
の繰り返しの方が確実なような気がします。
 
そんなに難しい動きではないので、調べれば簡単に情報・ヒントが見つかりますよ。

トピックに返信