• ベストアンサー

エクセル VBA 条件つきの印刷

エクセルVBAにおいて、 例えば「セルA1が空白でないシートすべてを印刷する」 このようなコードは可能でしょうか? よろしくお願いします。 (エクセル2000)

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

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.3

こんばんは。 Sub Test1() Dim sh As Worksheet For Each sh In ActiveWorkbook.Worksheets  If sh.Range("A1").Value <> "" Then   sh.PrintOut 'Preview:=True  End If Next sh End Sub 単に、こんな風にすればよいのですが、VBAを動かす前に、印刷範囲だけは確認したほうがよいかもしれません。 --それなら、VBAの意味がないではないか、と思うかもしれませんがね。(^^; もちろん、それはそれなりに方法はあるのですが。-- 印刷というのは、一旦、印刷が始まると、とまらないわけですから、それで、こんなことを言っています。 sh.PrintOut Preview:=True 最初は、こんな風にして、プレビューで調べてから、印刷実行という方法もあります。

taka1012
質問者

お礼

ご回答ありがとうございます。 ご丁寧な解説に感謝致します。

その他の回答 (2)

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

「可能でしょうか」ってどれだけやってみたのか。 ーー まずどういうVBAコードの、要素技術がいるのか考えましたか。 (組み合わせる前の、小さい単位での、したいことができるコード) 2,3しかないよ。 ーー (1)セルA1が空白でない これぐらいIf文を使って書けるでしょう。 (2)印刷する マクロの記録で判る シート指定.Range("A1:H30").PrintOut のようなコード (3)繰り返しになることはわかるね。 繰り返しは For  Next For Each Next をまず考える。 「すべて」はおのずから限度はあるわけだが、この際は読み込んだブックの全てのシート ーー (3)は Sub test02() Dim sh As Worksheet For Each sh In ActiveWorkbook.Worksheets MsgBox sh.Name Next End Sub で、全シート名 がでることを確認して納得のこと。これにMsgBox sh.Name のところが、選別、処理(=印刷)を入れる箇所になるのは分かるだろう。 (2)の「シートの指定」の部分に、Sh がそのまま使えるよ。 セルA1も、シート名 「Sh.」 で限定してね。Sh1.Range("A1")

taka1012
質問者

お礼

ご回答ありがとうございます。

noname#79209
noname#79209
回答No.1

ヒントだけですが... ブックのSheetコレクションから、For Each で全てのシートを順次取得し、 A1の内容をチェックして印刷する事になるでしょう。 このとき「空白でない」のチェック方法が問題です。 各シートのA11が完全なブランクだけならよいのですが、「""」も印刷したくないのでしょうから、 このチェックも加えておかないと「アレ?」ということになります。

taka1012
質問者

お礼

ご回答ありがとうございます。 何とか頑張ってみます。

関連するQ&A

専門家に質問してみよう