• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:VBAがうまくうごきません。)

VBAでの改ページ設定についての質問

このQ&Aのポイント
  • VBAで作成したプログラムにおいて、指定した範囲を改ページとして設定する方法についての質問です。
  • 質問者は、A1~C108を1ページ、A109~C216を2ページ目、A217~C325を3ページ目として印刷したいと考えていますが、プログラムがうまく動かないと困っています。
  • 質問者は、この問題について詳しい方からのアドバイスを求めています。

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

  • ベストアンサー
  • end-u
  • ベストアンサー率79% (496/625)
回答No.6

>うまくいっていないことは、 >B列とC列の間でページが変わってしまうことです。 >ABC列を1ページにしたいのですがABとC列でページが変わってしまいます。 >どうしたらうまくいくか教えていただけないでしょうか? 最初の質問でそれを書かないと、適切な回答が出てきません。 改ページ設定による縮小率でも、印刷範囲のヨコ幅が収まってないという事です。 【改ページの行設定は問題ない】なら、予め手動操作ででも [ページ設定]-[ページ]タブで 『次のページ数に合わせて印刷:横[ 1 ]×縦[  ]』(縦をブランク) にしておけば済む話だったかもしれません。 ただシート状態によっては改ページ行が設定されないかもしれないので念のため ActiveWindow.View = xlPageBreakPreview With ActiveSheet   .PageSetup.Zoom = 100   Set .HPageBreaks(1).Location = .Range("C109")   Set .HPageBreaks(2).Location = .Range("C217")   Set .HPageBreaks(3).Location = .Range("C326")   If .VPageBreaks.Count > 0 Then     .VPageBreaks(1).DragOff xlToRight, 1   End If End With これで。

saterain20
質問者

お礼

ありがとうございます。 【改ページの行設定は問題ない】なら、予め手動操作ででも [ページ設定]-[ページ]タブで 『次のページ数に合わせて印刷:横[ 1 ]×縦[  ]』(縦をブランク) にしておけば済む話だったかもしれません。 上記の方法ではうまくいきました。 しかし、下記のマクロではABとC列でわかれてページ設定されました。 ActiveWindow.View = xlPageBreakPreview With ActiveSheet   .PageSetup.Zoom = 100   Set .HPageBreaks(1).Location = .Range("C109")   Set .HPageBreaks(2).Location = .Range("C217")   Set .HPageBreaks(3).Location = .Range("C326")   If .VPageBreaks.Count > 0 Then     .VPageBreaks(1).DragOff xlToRight, 1   End If End With

その他の回答 (7)

  • Musaffah
  • ベストアンサー率36% (37/101)
回答No.8

ページ設定はとかくプリンタの設定に依存されることがとても多いです。 用紙サイズとか余白・ヘッダ&フッタ部の設定等を今一度確認してください。 それと、A~Cのセルの幅とページ設定の「ズーム」はどれくらいですか? もしAの幅+Bの幅>A4縦の長さであれば、当然ながら(ズームが100%である限り)自動改行されてしまいます。

saterain20
質問者

お礼

ありがとうございました。

  • end-u
  • ベストアンサー率79% (496/625)
回答No.7

>しかし、下記のマクロではABとC列でわかれてページ設定されました。 そうですか、ご報告どうもありがとうございます。 環境や状況によってはそういう事もあるのかもしれませんね。 >上記の方法ではうまくいきました。 であればそれで良いんじゃないでしょうか。 私の方は特段、追加レスありませんので終了です。

saterain20
質問者

お礼

ありがとうございました。

  • Musaffah
  • ベストアンサー率36% (37/101)
回答No.5

少なくとも、 ・1~109の間 ・109~217の間 ・218~326の間 ・327以降 にそれぞれ何らかのデータがあればできますよ。

saterain20
質問者

お礼

ありがとうございます。 自分もそう思っているのですが

  • Musaffah
  • ベストアンサー率36% (37/101)
回答No.4

うまく動かないのは、エラーがでるということでしょうか? 私がやった限りでは、質問者様のソースコードで改ページ設定できましたよ。 シート内にデータはどこまで入ってます?

saterain20
質問者

お礼

ありがとうございます。 エラーはでません。 A1~C183まで値が入っています。

  • end-u
  • ベストアンサー率79% (496/625)
回答No.3

#横入り失礼します。 "C109"、"C217"、"C326"は印刷対象範囲内にありますか? (印刷範囲を設定しているか、またはデータが存在しているか、という意味です) 既出No.2 temtecomai2さんのコードで良いと思いますが ActiveSheet.PageSetup.PrintArea = "$A$1:$C$325" ActiveWindow.View = xlPageBreakPreview Set ActiveSheet.HPageBreaks(1).Location = Range("A109") Set ActiveSheet.HPageBreaks(2).Location = Range("A217") このように1行目で印刷範囲を設定するとどうなるか試してみてください。 #以下余談 >うまく動きません。 >うまくいきませんでした。 というのがどういう状況か説明しないと回答側はわかりません。 ・エラーが発生するとか  (その場合エラーナンバーとメッセージ内容、エラー行) ・エラーは出ないが期待結果が出ないとか

saterain20
質問者

お礼

ご回答ありがとうございます。 エラーはでていません。 うまくいっていないことは、 B列とC列の間でページが変わってしまうことです。 ABC列を1ページにしたいのですがABとC列でページが変わってしまいます。 どうしたらうまくいくか教えていただけないでしょうか? よろしくお願いします

saterain20
質問者

補足

"C109"、"C217"、"C326"は印刷対象範囲内にあります。 セルにグラフを貼っています。

回答No.2

ActiveWindow.View = xlPageBreakPreview Set ActiveSheet.HPageBreaks(1).Location = Range("A109") Set ActiveSheet.HPageBreaks(2).Location = Range("A217") ActiveSheet.PageSetup.PrintArea = "$A$1:$C$325" 動作としては 1. プレビュー画面にして Excel に改ページを自動生成させる 2. 自動生成された水平改ページの 1 (Location は 59行目) を A109 の前に移動。 3. 自動生成された水平改ページの 2 (Location は 117行目) を A217 の前に移動。 4. 印刷範囲の最終行を 325行目までとする。(これにより自動生成されていた水平改ページ 3~5 が自動削除される)

saterain20
質問者

お礼

ありがとうございます。やってみたのですがうまくいきませんでした

saterain20
質問者

補足

セルにグラフを貼っているのですが、そのことが原因で悪影響を及ぼしている可能性はありますか?

回答No.1

「ActiveWindow.View =…」 の行の下に On Error Resume Next を加えます。 これで無事に改ページができると思います。 試してみてください。

saterain20
質問者

お礼

ありがとうございます。やってみたのですがうまくいきませんでした。

関連するQ&A