• ベストアンサー

ぴったり印刷するエクセルVBAをつくるには

用紙サイズやマージンを指定して、1ページに最大倍率で印刷する方法はないでしょうか?(自動的に) 以前「QNo.2677602 ExcelVBA、印刷ページを事前に知るには 」で教えていただいた i = Application.ExecuteExcel4Macro("GET.DOCUMENT(50)") を利用して次の動作をするVBAマクロを作りました。 PageSetupでZoomに100を指定し、1ページに収まるかどうか調べる。 1ページ内の時は1ページを越えるまでZoomを+1し越えたら-1する。 1ページ以上の時は1ページになるまでZoomを-1する。 これで上手くいくと思ったら、動くことは動くのですが、結果は大き過ぎたり小さすぎたりして、後で手作業で調整しなければなりません。 実行速度も非常に遅いです。 うまくやる方法はないものでしょうか? よろしくお願い申し上げます。

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

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

こんにちは。Wendy02です。 >これで上手くいくと思ったら、動くことは動くのですが、結果は大き過ぎたり小さすぎたりして、後で手作業で調整しなければなりません。 やってみる前から言うのは申し訳ないのですが、確か、ページ数取得とページの拡縮とは、同じマクロの中では、二つは同時に成り立たなかったと思います。私が、マクロ関数を使った理由は、通常のVBA(以下のURLの中にあるもの)ですと、ブレやすいので使ったのですが、しかし、いずれにしても両方は無理だったはずです。 Zoom率を計算で割り出して、拡縮側で、一回で決めないと出来ないような気がします。しかし、縮小による視覚的な問題と、印刷ページにするときの丸め誤差が発生するので、マイナスは良いにしても、プラスではみ出てしまうのは防げないような気がしているのです。 以前、同じ質問を受けたことがありますが、そのとき、初めて、その問題に気がつきました。偶然の産物で出来る可能性がないとは言わないけれども、believe_me さんが、試行錯誤するプログラムに対しての協力は惜しまないけれども、私のレベルでは、回答として載せるレベルのものではありません。こちらは、無理だと思ってやるだけの気持ちがありません。ひとつだけ提案としては、印刷した後の実測値を用いることですね。私は、ここらがExcel独自の難しさなんだろうと思います。 以下、このような文面が乗っています。 「逆も真なり」なのです。 http://support.microsoft.com/default.aspx?scid=kb;ja;408042 [XL2002] 印刷されるページの総数を調べる方法 ≪このプロシージャを実行する前に、改ページ位置のセルを画面に表示して、改ページ位置を認識させる必要があります。次のいずれかの操作を 1 度実行します。 ・改ページされているセルを画面に表示 ・ZOOM で縮小したあと元に戻す ・印刷プレビューを実行する ≫

believe_me
質問者

お礼

回答ありがとうございます。 ちょっと無理なお願いをしてしまったようです。 用途としては設計文書をエクセルで作っており、各シート毎に各1ページの異なったフォームになっています。 常に印刷前に調整しなければならず、簡素化しようとしていました。 全て自動化するのは無理なようですので、全シートのプレビューを出すなどの半自動でやろうと考えています。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

  • nobu555
  • ベストアンサー率45% (158/345)
回答No.2

複数ページを1ページに印刷(限定ですが)するなら 「ページ設定」で「次のページ数に合わせて印刷」を 「横 1 X 縦 1」にして印刷するを 「新しいマクロの記録」でコードを取得できると思います。 参考になればよいのですが。

believe_me
質問者

お礼

回答ありがとうございます。 .FitToPagesWide = 1 .FitToPagesTall = 1 を指定してトライしたこともありますが、上手くいかなかったと思います。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • VBAの印刷について

    VBAでの質問です。 ある処理を施したあとにページ設定をして印刷するプログラムを作成しているのですが、なぜか同じものが2枚出力されてしまいます。 1枚だけ指定して印刷するにはどのようにコードを書けば良いかどなたか教えて下さい。お願いします。 With ActiveSheet.PageSetup 'ページ詳細設定 .PaperSize = xlPaperA4 .Zoom = False .FitToPagesTall = 1       .FitToPagesWide = 1     End With 'ActiveSheet.PrintOut Worksheets(sheetname5).PrintOut ActiveWorkbook.SaveAs Filename:=takiicode & "_" & Format(today, "yyyymmdd") & ".xls" '保存) Workbooks(takiicode & "_" & Format(today, "yyyymmdd") & ".xls").Close SaveChanges:=True '終了

  • 複数シートをVBAで印刷

    エクセル2010VBAを使って仕事の効率化を勉強中です。 歳入日計表のシート31日分を作り、歳入月計表として合計をまとめていますが 日々印刷範囲を決めて一日分のシート印刷するのをVBA処理したいのですが できません。 1日分はこんな感じでできるのですが・・・ 31日分をどのように処理すれば日々印刷可能になるのでしょうか? お願いいたします! Sub 日計表印刷設定() With Worksheets("1") .PageSetup.PrintArea = "A2:G71" .PageSetup.LeftMargin = 55 .PageSetup.TopMargin = 40 .PageSetup.Zoom = 80 .PrintPreview End With End Sub

  • VBAでヘッダーにページ設定

    ブック内のシートA・B・Cを除いて、ページ数をヘッダーに表示するというマクロです。 後からシートを挿入しても、このマクロでページを再設定できます。 印刷時にシートを1枚ずつ選択して印刷すると正しくページ数が表示されますが 複数のシートを選択して印刷をすると、ページ数がおかしくなります。 複数シート選択時に正しいページ数で印刷できるようにするには どのような設定が必要でしょうか。 ご教授よろしくお願い致します。 Dim ページ数 As Integer Dim 総ページ数 As Integer Dim sht As Worksheet 総ページ = 0 For Each sht In Worksheets sht.Select 総ページ = 総ページ + Application.ExecuteExcel4Macro("get.document(50)") Next ページ数 = 0 '各シートの印刷ページ数 For Each sht In Worksheets If sht.Name <> "A" And sht.Name <> "B" And sht.Name <> "C" Then sht.Select sht.PageSetup.RightHeader = "&""MS Pゴシック""&8&P+" + CStr(ページ数) + "/" + CStr(総ページ) ページ数 = ページ数 + Application.ExecuteExcel4Macro("get.document(50)") End If Next

  • 印刷範囲を設定するvbaコード

    エクセルシートの印刷範囲を設定するvbaコードで Sub Macro1() With ActiveSheet.PageSetup .PrintArea = "$A$1:$c$10" End With End Sub としてるのですが、 "$A$1:$c$10"の部分を Range(Cells(1, 1), Cells(10,3)) 形式でやりたいのですが、 うまくできません。 Sub Macro1() With ActiveSheet.PageSetup .PrintArea = Range(Cells(1, 1), Cells(10,3)) End With End Sub としても、全部が印刷範囲として選択されてしまいます。 というか、印刷範囲が設定されません。

  • VBAエクセルにて印刷

    こんにちわ。教えてください。VBAでActiveXコントロールをクリック したのち、印刷のプレビューを表示したら、MegBoxメッセージを表示 させ ”はい””いいえ”を選択したいのですがうまくいきません。 ちなみに下記のプログラムです。 Private Sub 印刷_Click() ActiveWindow.SelectedSheets.PrintPreview Dim ans As Integer ans = MsgBox("印刷しますか?", vbInformation + vbYesNo, "確 認") Select Case ans Case vbYes Application.ActivePrinter = "Canon iR C3080/C3580 LIPSLX on Ne05:" ExecuteExcel4Macro "PRINT(2,1,1,1,,,,,,,,2,,,TRUE,,FALSE)" Case vbNo MsgBox "故障履歴印刷をキャンセルします。" End Select End Sub 以上なんですがプレビュー後に”印刷しますが”が聞いてきません。 どうすればいいですか?

  • 【Excel VBA】印刷について

    Excel2003を使用しています。 不要ページをスキップして印刷するマクロを作成し、特定のBookでのみ使用しているのですが、このBookを印刷するときはカラー印刷を指定したいので、この印刷マクロの中でカラー印刷を指定できたらと思っているのですが、このようなことは可能でしょうか?可能であれば、どのように記述すればいいでしょうか? ページ設定のマクロの記録をとったところ、下記のように(不要と思われる設定は削除しました)記述されていました。 [BlackAndWhite = False]という部分がカラー印刷に関するコード?かと思い、追加してみたのですが、カラー印刷されませんでした。 With ActiveSheet.PageSetup .PaperSize = xlPaperA4 .FirstPageNumber = xlAutomatic .Order = xlDownThenOver .BlackAndWhite = False .Zoom = 98 .PrintErrors = xlPrintErrorsDisplayed End With よろしくお願いします。

  • Exsel2000ページ設定(VBA)について

    このごろ度々お世話になっております。 エクセルでのページ設定で、"ワークシートを何ページに収めて印刷"するか設定できると思うのですがそれを指定してしまうと、他で指定した余白設定とかは無視されてしまうのでしょうか? VBAで 'ページ設定 Set SENTAKU = Workbooks(3).Sheets(1) With SENTAKU.PageSetup .Orientation = xlLandscape .Zoom = False .FitToPagesWide = 1 .TopMargin = 55 .BottomMargin = 15 .RightMargin = 0 .PrintTitleRows = "$2:$5" End With としたら、見事にMarginが無視されてました。 右の余白「0」は捨てられないのですが、セルの幅が増えても今のデータを横1枚で収めたいと考えてます。 (左の余白は少しぐらい減ってもいいが、どちらかというとZoomを変更して横1枚に収めたい。ちなみに縦は何ページでも可) PageSetupでそのような設定ができないのなら横がはみ出したら、違うページ設定みないなのをIf文で書くことは可能なのでしょうか? (横がはみ出したらAの設定(Zoomの縮小率が少し多い)、1枚で収まったらBの設定のような) よろしくお願いいたします。

  • VBAの範囲印刷設定を修正したいのですが

    VBAの初心者です。詳しく教えてください。 1.下記のVBAでシートを非表示にしたときに実行時エラー1004が出るのですが  どうしたらよいのですか。 ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー Sub printappointedrange() Worksheets("シート1").Activate Range("A1:AB42").Select 'セル範囲の選択 With ActiveSheet .PageSetup.PrintArea = Selection.Address '印刷範囲の指定 .PrintOut '印刷 .PageSetup.PrintArea = False '印刷範囲のクリア End With End sub ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー 2.シートに印刷ボタン作成して、印刷はできるのですが、印刷する前にプリンターの設定を変更する方法は無いのですか。

  • Excel2010 VBAにて印刷設定の取得

     Excel2010 VBAにてマクロを作成しております。 Excel2010のメインウィンドウの「ファイル」タブ→「印刷」の 画面におきまして、[設定]欄にて設定したページ指定(印刷開始ページ及び 印刷終了ページ)は取得できるのでしょうか?  Workbook_BeforePrintプロシージャにて取得しようと思っているのですが、 ActiveSheet.PageSetupのメンバやThisWorkbookのメンバを見たところ、 印刷の開始ページ及び終了ページの設定が見つかりませんでした。 印刷のページ指定の設定箇所をご存知の方がいらっしゃいましたら 教えて頂きたく宜しくお願い致します。

  • VBAでZoomプロパティで値の取得方法を教えてください

    Win XP エクセル2003でVBAを使用しています。1ペ-ジに収めて印刷したい為 PageSetupで .Zoom=False .FitToPagesWide=1 .FitToPagesTall=1 . 余白の指定は、オ-ル0 の指定をしていますが「拡大/縮小」倍率が用紙サイズより常に小さく指定されます。できれば指定用紙サイズ一杯に印刷したいのです。その為に倍率の値が取得できれば得た値を何割か増やして印刷したいのですが。

ジョブ履歴を削除できる?
このQ&Aのポイント
  • ジョブ履歴を削除できるかどうかについて調査しました。
  • EPSON社製品のインクジェットプリンター(複合機)PX-M7080FXを使用している場合、ジョブ履歴は削除可能です。
  • ジョブ/状態→ジョブ状態→履歴からジョブ履歴を削除することができます。
回答を見る

専門家に質問してみよう