dポイントプレゼントキャンペーン実施中!

エクセル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列の値が同じセルまで)

分かりづらい部分がありましたら再度補足しますので、回答の方よろしくお願いします。

A 回答 (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
    • good
    • 0
この回答へのお礼

できました!!

よく見ましたら、ページ設定を行った後にRestAllPageBreaksを行ってました。

せっかく設定したのに、また改ページの解除を行っていたため、うまくいきませんでした。

多くの回答本当にありがとうございます。
また何かありましたらよろしくお願いします。

お礼日時:2004/11/14 10:45

まいどです 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と合わせることができるのでしょうか?

よろしくお願いします。

補足日時:2004/11/14 01:35
    • good
    • 0
この回答へのお礼

追加です。

どうやら、ページ設定の拡大/縮小が100%になっているのが原因で、
toPage.Zoom = 60(拡大/縮小を60%とした)
と設定しましたが、マクロの内容がページ設定に反映されないのです。

なぜでしょうか??

分かりましたら回答の方よろしくお願いします。

お礼日時:2004/11/14 02:41

#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のページ設定や印刷範囲を全てコピーすることは可能なのでしょうか?

知っていましたら教えてください。
お願いします。

補足日時:2004/11/13 19:03
    • good
    • 0

こんばんは こないだのやつの続きですね



まずは 
ファイル-> ページ設定
シートのタブで一番上の
印刷範囲を $1:$2 としてください。

あとは VBAで F列のキーが変わったら 改ページを入れる
ActiveWindow.SelectedSheets.HPageBreaks.Add Before:=ActiveCell

だけですよ もしわからなかったら言ってくださいね
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!