• ベストアンサー

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

Wendy02の回答

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

こんにちは。 >どこか間違っていますでしょうか? たぶん、コードの置いてある場所が、標準モジュールではなく、シートモジュールで、いくつかの条件が組み合わされば、Rangeオブジェクトのエラーは出ます。エラーが出ないように直しました。 それと、コードを見るまで、全体を縮尺を縮めるというのは、私の想像していたものとは、かなり違ってきますね。いろいろ試してみましたが、繰り返し行うせいでしょうか、PageBreaksで取れる行が不安定ですね。以下は、垂直改ページを取るサブルーチンを加えてみました。なお、物理的水平改ページは、どんなに改ページReset しても、残りますから、1ページ1行しかないところが出てくることはあります。 Sub HBreake_Aligment2()   Dim myPrintArea As String   Dim DefaultPageRow As Integer   Dim LastRow As Long   Dim PreRow As Long   Dim cnt As Integer   Dim NewRow As Long   With ActiveSheet    If .PageSetup.PrintArea = "" Then      MsgBox "印刷範囲を設定してください", 16      Exit Sub      Else      myPrintArea = .PageSetup.PrintArea      LastRow = .Cells(65536, .Range(myPrintArea).Column).End(xlUp).Row      If .Range(myPrintArea).Cells(.Range(myPrintArea).Count).Row > LastRow Then       .PageSetup.PrintArea = .Range(myPrintArea).Resize(LastRow).Address(0, 0)      End If    End If    .ResetAllPagereaks    'サブルーチン    Call VPageDragoff    Application.ScreenUpdating = False    DefaultPageRow = _    Application.ExecuteExcel4Macro("(INDEX(GET.DOCUMENT(64),1," & 1 & "))")    PreRow = DefaultPageRow    Do      NewRow = MyNewRowFind(PreRow)      .HPageBreaks.Add .Cells(NewRow, 1)      PreRow = NewRow + DefaultPageRow    Loop Until PreRow > LastRow    Application.ScreenUpdating = True    .PrintOut Preview:=True   End With End Sub ' Private Function MyNewRowFind(ByVal myRow As Long) Dim j As Long Dim flg As Boolean  With ActiveSheet   '25行前まで探す   For j = myRow - 1 To myRow - 25 Step -1    If .Cells(j, 1).Value = "" Then     flg = True      Exit For    End If   Next j   If myRow > j + 1 And flg Then   MyNewRowFind = j + 1   Else   MyNewRowFind = myRow   End If  End With End Function Sub VPageDragoff() '垂直改ページのドラッグオフ Dim myVbp As Integer With ActiveSheet   Application.ScreenUpdating = False    .PageSetup.Zoom = 100   myVbp = ExecuteExcel4Macro("COLUMNS(GET.DOCUMENT(65))")   If myVbp > 1 Then    ActiveWindow.View = xlPageBreakPreview    .VPageBreaks(1).DragOff xlToRight, 1    ActiveWindow.View = xlNormalView   End If End With   Application.ScreenUpdating = True End Sub

関連する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 どなたか詳しい方、教えていただけませんでしょうか。 よろしくお願いいたします。