- ベストアンサー
エクセルでの条件付印刷範囲指定について
印刷したい範囲はA1~BB264です。 44行×6ブロックに分けて、それぞれ条件によって このブロック単位で印刷したいのです。 また、この印刷範囲の中には結合したセルも存在します。 別のシートでの入力結果に応じて、BD列に ・印刷する場合は1、しない場合は空白 の式をブロック単位で入れています。 このBD列が1の部分のみを印刷したいのです。 ・1ブロック分のみ「1」ならば、A1~BB44まで印刷 ・2ブロック分が「1」ならばA1~BB88まで印刷 といった感じです。 もしVBAでの対応で可能なら、その式を書いて頂けると助かります。 よろしくお願いします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
>私も一つ言い忘れてました。 お断りします。そうやってあれもこれもと思いつき後出しでダラダラと終わらないご相談があんまり多くて,とても困ります。 まるで何かタダで自分の下請けをしてくれる便利なお手伝いが見つかったとか,勘違いしちゃうヒトも少なくないですしね。アナタがそうだと言ってるワケじゃなくて。 >シート2を印刷 シート2を印刷したいなら,そのようにマクロに書き足すだけです。 sub macro2() dim i for i = 1 to 264 step 44 if worksheets("Sheet2").cells(i, "BD") = 1 then worksheets("Sheet2").range("A1:BB44").offset(i-1).printout end if next i end sub そういえばマクロのご質問ですが,ご質問の様子からマクロの使い方からデキナイかもしれませんね。 一応念のため書いておきますので参考にしてください。 手順: ALT+F11を押す 現れた画面で挿入メニューから標準モジュールを挿入する 現れたシートにマクロをコピー貼り付ける ファイルメニューからエクセルに戻り シート1にオートシェイプの図形を配置してボタン絵柄にする 右クリックしてマクロの登録で,用意したマクロを取り付ける #自分流で勝手に違う手順を行うと,上手く行かない場合があります。
その他の回答 (3)
- imogasi
- ベストアンサー率27% (4737/17069)
エクセルの印刷関連のダイアログで、そういう指定は出来ない以上できません。 VBAでやるほか無い。 >その式を書いて頂けると助かります 質問者は助かるだろうが、ここは課題を書いてVBAコードを要求するところではない。 VBAの回答がでても、質問者が理解できるかどうか判らない。 面倒でも別シートに、値だけでもコピペして印刷するほか無い。 ーー 本件やVBAに興味がある一部の人の参考に。初心者向けのコードではないと思うが。 Sheet1 A2:F11に 1 2 3 4 5 6 11 21 31 41 51 61 21 40 59 78 97 116 31 59 87 115 143 171 41 78 115 152 189 226 51 97 143 189 235 281 61 116 171 226 281 336 71 135 199 263 327 391 81 154 227 300 373 446 91 173 255 337 419 501 データの中身は意味はありません、 ーー A2:C6 D2:F6 A7:C11 D7:F11 の4分割の範囲のそれぞれにセル範囲に名前をつけます。等分割でなくても良いです。 但し1ページに印刷が収まる程度の範囲とします。セル範囲重複は意味無いでしょう。 上から あ1,あ2,あ3,あ4という名前にします。数字部分は連続した数とし、 半角とします。 ーーー そしてSheet2に各範囲のデータを持ってきて印刷します。 コード行数を少なくすることを最優先に考えた(たった4行、実質2行) 標準モジュールに Sub Macro4() For i = 1 To 4 Worksheets("Sheet2").Range("a2:C6").FormulaArray = "=あ" & i Worksheets("Sheet2").Range("A1:D10").PrintOut Next i End Sub を入れて実行します。 上記範囲ごとに1ページに自動的に印刷される。 沢山のケースでテストして無いので改良に力が必要かと思うが。 分割したうちの1枚だけ印刷というのは別途コードを組む必要がある。
- keithin
- ベストアンサー率66% (5278/7941)
マクロをうっかり誤記ましたので,次のマクロにします。 たいへん失礼しました。 それと印刷する可能性がある全体は264行までの範囲でしたね。 sub macro1r1() dim i as long for i = 1 to 264 step 44 if cells(i, "BD") = 1 then range("A1:BB44").offset(i-1).printout end if next i end sub iとかは変数と言います。I列とか全然関係ありません。マクロではこういう変数を使って,ヤリタイ事をプログラムして書きます。 #別に興味がないなら構いませんが,一応参考に。 上から詰めて使うなら,ご紹介した方法で設定すれば,マクロとか使わずにただポチッと印刷するだけで使用している範囲が印刷できます。 もちろん,「ただ印刷するだけ」のマクロをボタンに登録しても,それは全然構いませんが。
補足
私も一つ言い忘れてました。 シート1が入力シート シート2が印刷シートとなり シート1で入力した結果をシート2のBDに反映。 シート1に印刷ボタンを設置し、 シート2を印刷 としたいのです。
- keithin
- ベストアンサー率66% (5278/7941)
ブロックを上からしか使わないなら,わざわざマクロを使わなくても出来ます。 http://www2.odn.ne.jp/excel/waza/print.html#SEC11 などを参考に,応用してみてください。 飛び飛びのブロックで印刷もしたいならマクロになります。 BD列のどこに1が記入してあるのか指定が無いようなので,各ブロックの先頭行(1,45,…)に1を記入します。 sub macro1() for i = 1 to 9999 step 44 if cells(i, "BD") = 1 then range("A1:BB44").offset((i-1)*44).printout end if next i end sub
補足
早速のお答え、ありがとうございます。 印刷ボタンを作りたいので、マクロにしようかと思っています。 提示頂いたマクロに「i」という文字がありますが この「i」とはなんでしょう? >for i = >if cells(i, "BD") >offset((i-1) >next i とは「i列」か何かですか?
お礼
>そうやってあれもこれもと思いつき後出しでダラダラと終わらないご相談があんまり多くて,とても困ります。 そういうつもりじゃ無かったんですが、質問で「別のシートで入力」と書いたので、てっきりボタンもその「別のシートに」と勝手に思いこんでいました。 回答3の方にも言われましたが、ちょっと身勝手すぎました。 またマクロですが、ウィザードでのマクロ登録は出来ます。 ただVBAが勉強してはいるのですが、中年ともなるとなかなか覚える事が出来ません。 自分なりにいろいろやってみて無理だった場合に、ここで質問している状態です。 後はなんとか自分で工夫してやってみます。 本当にありがとうございました。