• ベストアンサー

VBAでの改ページ位置の変更

Wendy02の回答

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

こんばんは。  VBAでも、どちらかというと、これは難しい部類ですね。(私のVBAの勉強の初期の頃に出会ったものです。私は失敗から-プロの人や上級の人なら周知のことから、現在のようなテクニックを使っています。VBAでは、改ページデータが取れなくなるというトラブルがあります。)  改行には、二種類あります。1つは、自動改ページです。それが、現在 kentonさんがおっしゃっている「X」 の部分です。次に、「○」の部分のことを、手動改ページといいます。 私の考えたコードです。ただし、ロジックを確認していませんので、もし、違うようだったら、また別なものを考えます。マクロコードが終わったら、改ページプレビューで確認してください。 '<標準モジュール推奨> Sub HBreake_Aligment() Dim myRow As Long Dim NewRow As Long Dim TotalHpage As Integer Dim i As Long With ActiveSheet    If .PageSetup.PrintArea = "" Then      MsgBox "印刷範囲を設定してください", 16      Exit Sub    End If    .ResetAllPageBreaks   TotalHpage = Application.ExecuteExcel4Macro("COLUMNS(INDEX(GET.DOCUMENT(64),0,0))")  For i = 1 To TotalHpage   myRow = Application.ExecuteExcel4Macro("(INDEX(GET.DOCUMENT(64),1," & i & "))")   NewRow = MyNewRowFind(myRow)   .HPageBreaks.Add .Cells(NewRow, 1)  Next i End With  Beep '終了合図 End Sub ' Private Function MyNewRowFind(myRow As Long)   Dim j As Long  With ActiveSheet   For j = myRow + 1 To 20 Step -1    If .Cells(j, 1).Value = "" Then      Exit For    End If   Next j   If myRow > j + 1 Then   MyNewRowFind = j   Else   MyNewRowFind = myRow   End If  End With End Function  このコードの考え方は、自動改ページをまず探して、それより手前(行の若い方の番号)で、「(コードに変化があるたびに、1行空白があります。)」行を探します。20まで遡っても見つからなかったら、それは、もう自動改ページのままにし、そうでないなら、その空白値の行番号を、戻して、手動改ページにする、というものです。 なお、20行遡るのが最適か分りませんが、通常1ページ50行~60行の間ですから、ある程度の適当に割り振りしました。また、縦改行(VPageBreak)については考慮されていません。 参考サイト(以下のサイトの中の「注意」が、トラブルのことです。だから、そのコードでは、無条件ではうまくいかないということです。) [XL2002] 印刷されるページの総数を調べる方法 http://support.microsoft.com/default.aspx?scid=kb;ja;408042

kenton
質問者

お礼

Wendy02さん、ご回答ありがとうございます。 更にソースまで、ありがとうございます。大変参考になります。 「改ページ位置(行数)を取得して、その上のデータの可否をチェックしていくというのが、Betterな方法なのでしょうか?」 こちらのパターンに近いでしょうか。 なかなか処理的には考えることが多そうですね。 まだ、実際に組み込んで動かしてはいないので、 動作実績をお伝えできないのですが、 「ExecuteExcel4Macro」という箇所がいまいち理解できないので、これから調べてみます。 参考URLも読んでみます。

kenton
質問者

補足

お礼欄に先に書いてしまいましたので、 補足欄で失礼します。 結論から申しますと、Wendy02さんのソースでほぼ実現ができました。 ありがとうございます。 「ほぼ」と書いた部分は、 自動改ページが、設定されている初期段階で3ページだったものが、 手動改ページ設定ののち、4ページに増えた場合に、 最終ページが作表された部分を切り分けてしまいました。 現在は、2度実行をすることで回避していますが、 他のロジックも考えています。 ちなみにExecuteExcel4Macroは、今回初めて知ったのですが、 引数(?)の情報とかが少なく調べ切れませんでした。 まだまだ、VBAも奥が深いです。。。

関連するQ&A

  • エクセルVBAで印刷時の改ページ探しは出来る??

    教えてください。 改ページプレビューで自動で改ページされた表(何ページもある)を 区切りのいいところで改ページを入れなおす マクロを作りたいのです。 区切りのいい所のセルには*が表示されているのですが そのセルの下の行で改ページを入れなおしたいのです。 改ページプレビューで自動で設定された改ページの位置を 探すのには、何か良い方法はあるのでしょうか?? 宜しくお願いいたします。

  • ExcelVBAの改ページの区切り位置が変更不可

    下記のようなコードで印刷プレビューを出して印刷するようにしたいのですが、改ページの位置が思い通りに変更されません。 3ページに印刷で、A19(B19)の行から2ページ目とA37(B37)の行から3ページ目にしたいのですが、印刷プレビューを見るとA20の行から2ページ目でA38の行から3ページ目になってしまいます。 HPageBreaks.Add Before:=Range("A19")←ここを色々違うセルに変えたり別のコードにかえたりしても、まったく反映されません。何かが邪魔をしているのでしょうか? どうしたら、任意の位置で改ページできるでしょうか?お願いいたします。 Sub 印刷プレビュー設定() Dim s As Worksheet Set s = ThisWorkbook.ActiveSheet With s '列非表示 .Columns("I:I").Select Selection.EntireColumn.Hidden = True 'ワークシートを選択、印刷範囲指定する .Select ActiveSheet.PageSetup.PrintArea = "$B$1:$O$54" '余白設定 .PageSetup.TopMargin = 0 .PageSetup.BottomMargin = 0 .PageSetup.LeftMargin = 0 .PageSetup.RightMargin = 0 '水平位置の中央へ .PageSetup.CenterHorizontally = True '垂直位置の中央へ .PageSetup.CenterVertically = True '用紙を横向きに設定 .PageSetup.Orientation = xlLandscape '用紙サイズを設定 .PageSetup.PaperSize = xlPaperA4 '印刷範囲を指定ページに収めて印刷プレビューを表示する .PageSetup.Zoom = False '拡大縮小倍率をFitToPagesの設定に収める .PageSetup.FitToPagesTall = 3 '縦の枚数 .PageSetup.FitToPagesWide = 1 '横の枚数 ActiveSheet.HPageBreaks.Add Before:=Range("A19") ActiveSheet.HPageBreaks.Add Before:=Range("A37") .PrintPreview End With End Sub

  • VBによる改頁行の罫線変更

    EXCELで外枠は太線、各行の区切り線は細線を 使用した表を作っています。 これがかなり大きな表ですので、印刷すると かなりの枚数になるんですが、各ページの最終行 (下の枠線)は当然細線になって、上、右、左の 太い枠線とのバランスが悪くなってしまいます。 改頁される行の区切り線のみ手作業で 太線に変更していってもいいのですが、 行を挿入した時とか行の高さを変更したときに ズレてしまって大変です。 改頁行の罫線のみ太線に変更するような VBを作成することは可能でしょうか? ご教示いただけましたら有り難いです。 よろしくお願い致します。

  • Excel 改ページのVBAうまくいかないです

    助けてください。EXCEL2000を使用しています。 マクロを組んでいるのですが、改ページがうまくいきません。 マクロ実行前の状態では、ページ設定で、用紙が「A3」の「縦」で拡大縮小が「79%」、データの区切りのいいところに何箇所か改ページが設定されています。 そこで、マクロを使って、A3サイズ、用紙を横、拡大縮小92%にして、尚かつ区切りのいいところ(毎回印刷範囲、区切りたいセルの位置は決まっている)で印刷できるようにしたいです。 印刷範囲は A1:P63,A64:P126,A127:P193,A194:P237,A257:P329, A330:P357,A368:P397,A401:P462 で設定したいです。 改ページしたい行を ひたすら ActiveSheet.HPageBreaks.Add Before:=Range("セル番地") で記述したのですが、 余計なところにも改ページ線ができてしまいました。(121行目の下、 351行目の下) このいらない改ページ線は、用紙を横にして、拡大縮小を92% をした時点で、ついてしまった線のようです。 余計な改ページ線を削除したいです。 なお、マクロは自動記録しかわかっておらず、 意味がわかっていないです。 お手数ですが お分かりになる方、 わかりやすくお願いいたします。

  • エクセルの改ページを自動で行う方法

    エクセルの質問です。 今、在庫表をエクセルで作っています。 単純化すると以下のような形です。 棚番号|商品名|商品数 ------+------+------ 1 |AAA |5 1 |BBB |6 2 |CCC |10 2 |DDD |2 3 |EEE |1 3 |FFF |2 3 |GGG |3 これを印刷するときに 棚番号が同じものをまとめて印刷したいと思います。 (下記のように3枚に分かれればいいです。) 棚番号|商品名|商品数 ------+------+------ 1 |AAA |5 1 |BBB |6 棚番号|商品名|商品数 ------+------+------ 2 |CCC |10 2 |DDD |2 棚番号|商品名|商品数 ------+------+------ 3 |EEE |1 3 |FFF |2 3 |GGG |3 このような形です。 ページ番号は通しの番号を振りたいと思います。 改ページを手動で入れていってもいいのですが、実際は棚が200くらいあるため合理的ではないです。 棚番号が変わったら自動で改ページするような機能はないでしょうか。

  • EXCELで改頁される行を太線にするには?

    EXCELで外枠は太線、各行の区切り線は細線を 使用した表を作っています。 これがかなり大きな表ですので、印刷すると かなりの枚数になるんですが、各ページの最終行 (下の枠線)は当然細線になって、上、右、左の 太い枠線とのバランスが悪くなってしまいます。 改頁される行の区切り線のみ太線に変更していって もいいのですが、行を挿入した時とか行の高さを 変更したときにズレてしまって大変です。 印刷した時に自動的に改頁される行のみ太線に なるような機能はないのでしょうか? もしくはVBA等でそのような機能を作成することは 可能でしょうか? ご教示いただけましたら有り難いです。 よろしくお願い致します。

  • 表と改ペイジ

    WORD2000使用 WORDの表機能で、あるカラム行A-+次のカラム行Bのサイズが1頁を越えると、Aの下があいて、Bが次の頁から表示される。 なお表のpropertyの行の オプション「行の途中で改頁する」にはチェックを付けてはいません。 Bが次の頁から表示されないで1頁で表示できる所は表示し、それでも納まらないなら次の頁になるようにしたい。どうすればいいか。よろしくお願いします。 なおタイトル行の繰り返しにはチェック付与している。

  • EXCEL、マクロ-改ページ行番号の取得方法を教えてください

    EXCELで作成した表を印刷したいのですが、表が縦長で複数ページにわたります。 そこで各ページの下端にそれぞれ罫線を挿入するマクロを書きたいのですが、 改ページ位置の取得方法がわかりません。各ページの上端行でも下端行でも良いので 行番号を取得する方法はないものでしょうか? どなたかご教授願います。 マクロ全体としては下記を考えています。 1.データの下端行の取得 2.印刷範囲の設定(横1ページ×縦複数ページ) 3.最初の改ページ位置の取得 4.ページ下端セル行の下に罫線を入れる 5.次の改ページ位置の取得 6.以下、データ最下端行まで繰り返し (各行のセルの高さは一定ではないです。)

  • Excelの改ページ 同シート内で複数の改ページの設定

    同じシート内で多くの改ページを設定しなければならない場合 1ページ毎に設定していかないといけないのでしょうか? それとも改ページしたいデータで並び替えて、同データのある行で改ページを分割していくのは可能でしょうか? たとえばA列に上から111112223333344455555とある場合に自動的に1と2の間、2と3の間、3と4の間、4と5の間にそれぞれ自動的に改ページを入れたいのですが・・・

  • FORTRANで作成したテキストファイル中で改行・改頁制御する方法を教えてください

    FORTRAN90で数表をテキストファイルに書き出すプログラムをつくっています。テキストエディタから印刷したときに改行や改頁ができるように改行コードや改頁コードをファイルに入れたいのですが、 その記述の仕方がわかりません。 たとえば下記のような場合、どのような記載をすればよいのでしょうか? DO I=Q,R WRITE(9,"(I4,7(1X,A))") I,(A(J,I),J=O,P) END DO どなたか詳しい方、教えていただけませんでしょうか。 よろしくお願いいたします。