エクセルVBAにおいて、印刷範囲を指定して印刷を行いたいと考えていますがうまくいきません。
例えば、Range("A1:W2")とRange("A4:W4")の範囲で1ページ印刷を行い、Range("A1:W2")とRange("A5:W5")の範囲で2ページ目の印刷、Range("A1:W2")とRange("A6:W10")で3ページ目の印刷を行う・・
というように、データが存在するだけ上記のような印刷を行いたいと考えています。
ちなみに、Range("A1:W2")の部分は見出しなので必ず印刷を行います。
また、印刷の改ページ条件はF列の項目がキーとなっており、この項目のキー値が変わった場合に改ページ印刷されます。
(1ページの印刷内容:見出し+F列の値が同じセルまで)
分かりづらい部分がありましたら再度補足しますので、回答の方よろしくお願いします。
No.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
できました!!
よく見ましたら、ページ設定を行った後にRestAllPageBreaksを行ってました。
せっかく設定したのに、また改ページの解除を行っていたため、うまくいきませんでした。
多くの回答本当にありがとうございます。
また何かありましたらよろしくお願いします。
No.3
- 回答日時:
まいどです 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 で
記録されたマクロを 返答してもらえませんか?
この回答への補足
>ツール -> マクロ -> 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と合わせることができるのでしょうか?
よろしくお願いします。
追加です。
どうやら、ページ設定の拡大/縮小が100%になっているのが原因で、
toPage.Zoom = 60(拡大/縮小を60%とした)
と設定しましたが、マクロの内容がページ設定に反映されないのです。
なぜでしょうか??
分かりましたら回答の方よろしくお願いします。
No.2
- 回答日時:
#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のページ設定や印刷範囲を全てコピーすることは可能なのでしょうか?
知っていましたら教えてください。
お願いします。
No.1
- 回答日時:
こんばんは こないだのやつの続きですね
まずは
ファイル-> ページ設定
シートのタブで一番上の
印刷範囲を $1:$2 としてください。
あとは VBAで F列のキーが変わったら 改ページを入れる
ActiveWindow.SelectedSheets.HPageBreaks.Add Before:=ActiveCell
だけですよ もしわからなかったら言ってくださいね
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 改ページ 2 2023/03/10 21:29
- Excel(エクセル) エクセルの印刷範囲をページ単位で可変にする方法 3 2022/05/23 13:04
- Excel(エクセル) エクセル2013「次のページ数に合わせて印刷」が小さすぎる 9 2023/03/28 10:18
- Excel(エクセル) エクセルの印刷マクロについて質問があります。 現在、下記のマクロで印刷しています。Sheet1のD6 5 2023/06/12 10:59
- Excel(エクセル) エクセルVBAで複数のシート印刷設定 1 2022/09/07 12:03
- Excel(エクセル) VBA 1 2023/04/27 13:37
- Excel(エクセル) 【マクロ】プリントスクリーンした画像をエクセルに貼付して印刷したい 6 2022/11/30 20:11
- Excel(エクセル) Excel VBAプルダウンの値を変えながら2枚ずつ印刷する方法? 4 2022/05/27 13:04
- Excel(エクセル) エクセルのマクロで複数シートを両面印刷するには? 2 2022/12/08 23:23
- Visual Basic(VBA) VBAで不特定枚数印刷をしたいです。 4 2022/08/02 07:30
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Premiere Proについて教えてく...
-
Google ColaboでGUI作成
-
vba クリップボードクリアにつ...
-
https://paiza.jp/challenges/5...
-
Fortran の定数表現について
-
Arduinoに関する質問
-
Python - Excel で Webからデー...
-
そのまま使っただけなのに・・...
-
google formsで回答者をスプレ...
-
Python... 環境設定 初心者です...
-
40代後半でゼロからのプログラ...
-
pythonで複数画像からgifを作る...
-
Webプログラムってネイティブア...
-
このURLで広告を出しているのは...
-
Pythonを勉強しています。
-
ImageMagickでgif画像の一部が...
-
Selenium4でボタンをクリックで...
-
google formsを使ったタスク依...
-
シェルのSTEP数について教えて...
-
ITパスポートの勉強をしていま...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
vba クリップボードクリアにつ...
-
AIの登場でプログラマーたちが...
-
プログラミングのPythonのnoteb...
-
ImageMagickでgif画像の一部が...
-
過剰なオブジェクト指向脳から...
-
プログラム言語について。
-
VBAでパワーシェルを実行したい...
-
40代後半でゼロからのプログラ...
-
プログラマーと学歴の関係性に...
-
Google ColaboでGUI作成
-
VBA 電話番号の正規表現について
-
プログラミング未経験者(殆ど未...
-
CLispのloop内の挙動について
-
GoogleAppsScript文字列置換の...
-
プログラミング初心者です。 Wi...
-
オブジェクト指向プログラミン...
-
楽しくて最高のプログラミング...
-
Selenium4でボタンをクリックで...
-
pythonで複数画像からgifを作る...
-
小学1年生の子です。塾に行かせ...
おすすめ情報