- ベストアンサー
エクセルVBAの印刷方法について
- エクセルVBAにおいて、指定した範囲での印刷を行いたいと考えています。
- 指定した範囲での印刷を行う際、データの存在に応じて複数ページに分けて印刷したいと思っています。
- 印刷の改ページ条件は特定の列の値が変わった場合であり、その範囲で印刷を行いたいです。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
貼り付けありがとう やはりバージョンによって 設定が微妙に違うようでね >どうやら、ページ設定の拡大/縮小が100%になっているのが原因で、 >toPage.Zoom = 60(拡大/縮小を60%とした) >と設定しましたが、マクロの内容がページ設定に反映されないのです。 多分その後に FitToPagesWide FitToPagesTall が入ってたら そちらが優先されたのかな? (私の方はうまく行ってたのですが) ズームが入っているときは FitToPagesWide FitToPagesTall をコピーしたらだめなのかなぁ? 最後の方を 下記のように修正してもらえません? if fromPage.Zoom = false then toPage.Zoom = fromPage.Zoom toPage.FitToPagesWide = fromPage.FitToPagesWide toPage.FitToPagesTall = fromPage.FitToPagesTall else toPage.Zoom = fromPage.Zoom end if
その他の回答 (3)
- deecyan
- ベストアンサー率38% (89/233)
まいどです 1行で書けるかな?と思ったのですが わかりませんでした 誰かしってるかなぁ? insatu001() の最後の行に call PageCopy として End Sub の後に下記を貼り付けてください。 Sub PageCopy() Set fromPage = Sheets("sheet1").PageSetup Set toPage = ActiveSheet.PageSetup toPage.PrintArea = fromPage.PrintArea toPage.PrintTitleRows = fromPage.PrintTitleRows toPage.PrintTitleColumns = fromPage.PrintTitleColumns toPage.LeftHeader = fromPage.LeftHeader toPage.CenterHeader = fromPage.CenterHeader toPage.RightHeader = fromPage.RightHeader toPage.LeftFooter = fromPage.LeftFooter toPage.CenterFooter = fromPage.CenterFooter toPage.RightFooter = fromPage.RightFooter toPage.LeftMargin = fromPage.LeftMargin toPage.RightMargin = fromPage.RightMargin toPage.TopMargin = fromPage.TopMargin toPage.BottomMargin = fromPage.BottomMargin toPage.HeaderMargin = fromPage.HeaderMargin toPage.FooterMargin = fromPage.FooterMargin toPage.PrintHeadings = fromPage.PrintHeadings toPage.PrintGridlines = fromPage.PrintGridlines toPage.PrintComments = fromPage.PrintComments toPage.CenterHorizontally = fromPage.CenterHorizontally toPage.CenterVertically = fromPage.CenterVertically toPage.Orientation = fromPage.Orientation toPage.Draft = fromPage.Draft toPage.PaperSize = fromPage.PaperSize toPage.FirstPageNumber = fromPage.FirstPageNumber toPage.Order = fromPage.Order toPage.BlackAndWhite = fromPage.BlackAndWhite toPage.Zoom = fromPage.Zoom toPage.FitToPagesWide = fromPage.FitToPagesWide toPage.FitToPagesTall = fromPage.FitToPagesTall End Sub ↑↑↑ここまで↑↑ Excelのバージョンが違っていたら 抜けている設定があるかも しれないので 一応 下記のことをしてもらえませんか? ツール -> マクロ 新しいマクロの記憶 ファイル -> ページ設定 でダイアログがでますので 色々いじって OKを押す ツール -> マクロ -> 記録終了 ツール -> マクロ -> VisualBasicEditor で 記録されたマクロを 返答してもらえませんか?
お礼
追加です。 どうやら、ページ設定の拡大/縮小が100%になっているのが原因で、 toPage.Zoom = 60(拡大/縮小を60%とした) と設定しましたが、マクロの内容がページ設定に反映されないのです。 なぜでしょうか?? 分かりましたら回答の方よろしくお願いします。
補足
>ツール -> マクロ -> VisualBasicEditor で >記録されたマクロを 返答してもらえません >か? 以下のようになりました。 With ActiveSheet.PageSetup .PrintTitleRows = "$1:$2" .PrintTitleColumns = "" End With ActiveSheet.PageSetup.PrintArea = "$A$1:$W$29" With ActiveSheet.PageSetup .LeftHeader = "" .CenterHeader = "" .RightHeader = "" .LeftFooter = "" .CenterFooter = "" .RightFooter = "" .LeftMargin = Application.InchesToPoints(0) .RightMargin = Application.InchesToPoints(0) .TopMargin = Application.InchesToPoints(0.590551181102362) .BottomMargin = Application.InchesToPoints(0.393700787401575) .HeaderMargin = Application.InchesToPoints(0.393700787401575) .FooterMargin = Application.InchesToPoints(0.196850393700787) .PrintHeadings = False .PrintGridlines = False .PrintComments = xlPrintNoComments .PrintQuality = 600 .CenterHorizontally = False .CenterVertically = False .Orientation = xlLandscape .Draft = False .PaperSize = xlPaperA4 .FirstPageNumber = xlAutomatic .Order = xlDownThenOver .BlackAndWhite = False .Zoom = False .FitToPagesWide = 1 .FitToPagesTall = False .PrintErrors = xlPrintErrorsDisplayed End With End Sub 必要な項目だけを設定し、なんとかできました。 しかし、困ったことに印刷の範囲がうまく設定できません。 FrmSheetでは1ページ目にA列からW列まで印刷範囲となっていますが、TgtSheetは1ページ目にA列からN列、2ページ目にO列からW列となってしまいます。 印刷ページをどのようにすればFrmSheetと合わせることができるのでしょうか? よろしくお願いします。
- deecyan
- ベストアンサー率38% (89/233)
#1 の訂正 です ごめんなさい × 印刷範囲を $1:$2 としてください。 ○ 行のタイトルを $1:$2 としてください。 ところで ソートはしてあるの? 不要? 不要だったら 途中からにしてください Sub insatu001() ' Sort Rows("3:" & ActiveSheet.UsedRange.Rows.Count).Select Application.CutCopyMode = False Selection.Sort Key1:=Range("F3"), Order1:=xlAscending, Header:=xlGuess, _ OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, SortMethod _ :=xlPinYin ' ソートしてあったら とか しなくて良い場合 ここから oldkey = ActiveSheet.Cells(3, 6).Text ' 最終行まで ループ For ii = 3 To ActiveSheet.UsedRange.Rows.Count 'キーが変わったか? If oldkey <> ActiveSheet.Cells(ii, 6).Text Then '改ページを入れる Rows(ii).Select ActiveWindow.SelectedSheets.HPageBreaks.Add Before:=ActiveCell 'キーの入れ替え oldkey = ActiveSheet.Cells(ii, 6).Text End If Next End Sub
補足
こんにちは。 毎度ありがとうございます。 キーごとに印刷ページを分けることができました。 ありがとうございます。 ちなみに、印刷するのはTgtSheetの方で、コピー元のFrmSheetのページ設定や印刷範囲を全てコピーすることは可能なのでしょうか? 知っていましたら教えてください。 お願いします。
- deecyan
- ベストアンサー率38% (89/233)
こんばんは こないだのやつの続きですね まずは ファイル-> ページ設定 シートのタブで一番上の 印刷範囲を $1:$2 としてください。 あとは VBAで F列のキーが変わったら 改ページを入れる ActiveWindow.SelectedSheets.HPageBreaks.Add Before:=ActiveCell だけですよ もしわからなかったら言ってくださいね
お礼
できました!! よく見ましたら、ページ設定を行った後にRestAllPageBreaksを行ってました。 せっかく設定したのに、また改ページの解除を行っていたため、うまくいきませんでした。 多くの回答本当にありがとうございます。 また何かありましたらよろしくお願いします。