- ベストアンサー
エクセルのVBAマクロで
1つのワークシートで例えば1,2ページは6月分、3,4,5ページは7月分、6ページは8月分・・・・・・・・・・と どんどん増えていくのですがその月が何ページ使うことになるかはわかりません。 それでページ指定ではなく、何月分と選ぶだけでその部分を印刷したいのですが、いちいち印刷範囲のプログラムを変えていく他に何か手段は無いですか? 例えばA列に7と入れておけば何ページ増えようと7月分と判断してその部分を印刷するようなことはできますか?
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
No2です。 > すみませんがひとつだけいいですか。 > キャンセルができないのですが。 何も難しくかんがえず、これでいかがですか? Sub TEST02() m = Application.InputBox("何月分?") With Columns("A:A") .AutoFilter .AutoFilter Field:=1, Criteria1:=m myYN = MsgBox("Printしますか?", vbYesNo + vbQuestion, "Print確認") If myYN = vbYes Then ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True End If .AutoFilter End With End Sub
その他の回答 (3)
- imogasi
- ベストアンサー率27% (4737/17069)
この質問は、1つのワークシート内の6万5千行内に、下に順にページがあるものと考えます。 (1)シート上に改ページブレーク無しでする 各ページの最初行と最後行が判っているとき(等しい行数であるから計算できたり、テーブルを持っている場合)Range(・・・).PrintOutを発行して印刷すすので、今印刷するのが何ページ目(=何回目)か判るし、何月分か判るようにできるので、該当月か判別して、その月に該当しない部分(セル範囲)は印刷しなければ良い。 (2)シートに改ページをセットする方法 ページが判った都度、マニュアルで各ページを挿入ー改ページで設定するものとする。 標準モジュールに Public Sub pgSheet() With Worksheets("Sheet1") .PrintOut From:=2, To:=3 End With End Sub と入れて実行すれば、2ページと3ページが印刷できる。 あとは7月が2,3ページであるという情報を持てば、From Toにその月の最初ページ、最終ページを指定して、PrintOutメソッドを出せばよい。 また Sub test01() MsgBox ActiveSheet.HPageBreaks.Count For i = 1 To ActiveSheet.HPageBreaks.Count MsgBox ActiveSheet.HPageBreaks(i).Location.Row Next i End Sub で改ページの位置(行)がわかる。 これを用いて、セルの月数データと何ページかとの関連がわかる(割り出せる)。 なおヘッダーにページ数があるからといって、へーッダーのページを見て、月を判別できて、印刷するかしないかできるるかというと、印刷始める前でイベントを捉えられないと思うので難しいと思う(この点は私は弱い) さらに良い答えを期待しますがとりあえず。
お礼
ありがとうございました。大変勉強になりました。
- merlionXX
- ベストアンサー率48% (1930/4007)
> A列に7と入れておけば何ページ増えようと7月分と判断してその部分を印刷するようなことはできますか? A列に指定した数値がある行のみを印刷するVBAのサンプルです。 Sub TEST01() m = Application.InputBox("何月分?") With Columns("A:A") .AutoFilter .AutoFilter Field:=1, Criteria1:=m ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True .AutoFilter End With End Sub
補足
ありがとうございます。参考になります。 すみませんがひとつだけいいですか。 キャンセルができないのですが。
- porilin
- ベストアンサー率22% (142/631)
出来ますか?と言われれば出来ます。 ただし、1ページの行数を決めておかないと面倒臭いことになりかねません。 単純に思いつくのは、印刷用のsheetを用意しておいて、データの入ったシートに対して、対象となるページかをループで調べてゆき、該当するページなら印刷用シートにコピーというルーチンにして、最後まで検索したら印刷用シートを印刷して、そのシートを削除 あたりでしょうか
補足
ありがとうございます。 ひとつ聞きたいのですが印刷用シートを印刷した場合余白というかフッダーにページを入れてるのですが元のシートのページ数が反映されるのでしょうか?
お礼
ありがとうございました。大変役にたちました。