• ベストアンサー

エクセルで改ページ部分に自動で線を

エクセルで帳票をプリントする際、データの量によっては自動改ページされ複数枚になります。 その際、改ページされる最後のところに線を自動で引くことは可能でしょうか? 次ページの先頭には線は不要ですが、3ページになる場合は次ページの最後に線が必要です。 フッター部分の表記とデータ部分を明確に区別するためです。よろしくお願いします。

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

  • ベストアンサー
  • taocat
  • ベストアンサー率61% (191/310)
回答No.6

こんばんは。 ●一頁しかない場合で 1.行数が一頁に満たない時 2.行数が一頁にぴったりの時 ●複数頁ある場合で 1.最後の頁の行数が頁に満たない時 2.最後の頁の行数が頁にぴったりの時 上記のことも考慮し、それぞれの頁のフッターの直ぐ上の行に下線を引くのですよね。 新しいシートで下記のコードをお試あれ。 使用列は、A-Dとする。 --------------------------------------------- Sub Test()  Dim BreakSu As Integer  Dim BreakSu2 As Integer  Dim B As Integer  Dim Rw As Long  Dim LastRow As Long  LastRow = Range("A65536").End(xlUp).Row  BreakSu = ActiveSheet.HPageBreaks.Count  Range(Cells(LastRow + 1, "A"), Cells(LastRow + 100, "A")) = "ABC"  BreakSu2 = ActiveSheet.HPageBreaks.Count  For B = 1 To BreakSu + 1   Rw = ActiveSheet.HPageBreaks(B).Location.Row - 1   With Range(Cells(Rw, "A"), Cells(Rw, "D")).Borders(xlEdgeBottom)    .LineStyle = xlContinuous   End With  Next B  Range(Cells(LastRow + 1, "A"), Cells(LastRow + 100, "A")) = ""  ActiveSheet.PrintPreview End Sub ------------------------------------------------ プリントが済んだ後の下線を消す方法は考えてみてください。 以上です。

merlionXX
質問者

お礼

すばらしい! 後ろに100行追加しちゃうわけですね、なるほどぉ・・・。 ありがとうございました。

その他の回答 (5)

  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.5

>だから自動改ページさせているので、改ページ場所は不定なんですよ~。 #2です。力技ですが、、、 VBAマクロでやるなら、HPageBreaks コレクションを調べることで水平改ページの位置がわかります。下記サンプルは水平改ページの位置(行番号)をイミディエイトに表示するだけですが、実際にはセル罫線を引く処理を挟んでやれば良いかと思います。 例えば、 Intersect(Columns("A:E"), Rows(Pb.Location.Row)) _   .Borders(xlEdgeTop).Weight = xlThin こんな感じでしょうか。 しかし、『どこまで自動的なのか』という問題があります。 ご紹介した方法は、データ修正の度に罫線の引きなおし作業が発生します。この点についてもコーディングする必要がありますね。ご参考までに。 Sub Sample()   Dim Pb As HPageBreak   For Each Pb In ActiveSheet.HPageBreaks     Debug.Print Pb.Location.Row   Next Pb End Sub

merlionXX
質問者

お礼

出来ました! ありがとうございます。 ただ、これだと改ページしないと、つまり一枚だけだと罫線がでませんよね。当たり前だけど。 一枚の場合でも自動的に改ページされるであろうあたりで出す方法はないですか?

  • taocat
  • ベストアンサー率61% (191/310)
回答No.4

こんにちは。 汎用性を考えるなら、 HPageBreakオブジェクトのLocationプロパティを使ってみたらどうでしょう。 HPageBreaks (HPageBreakオブジェクトのコレクション) ActiveSheet.HPageBreaks.Count (改ページ総数) ActiveSheet.HPageBreaks(1).Location.Row (一番目の改ページの行) Location.Rowで改ページの行が分りますので、その上の行に線を引けばいいですよね。 以上です。

merlionXX
質問者

お礼

HPageBreakオブジェクトのLocationプロパティとは初めて聞いた呪文です。 ありがとうございました。

  • takkuni
  • ベストアンサー率24% (166/676)
回答No.3

タイトル(項目)を各頁に印刷するようにすれば可能かと思います。ファイル ~ ページ設定でシートタブから行列どちらでも指定できます。

merlionXX
質問者

補足

行や列の印刷タイトルのことですか? これだとヘッダーとの境のところにはもってこれますが、フッダーでは無理ではないでしょうか?

  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.2

条件付書式を利用してみてはどうですか? 例えば、1ページ60行で改ページするように印刷設定されているのであれば、 [数式が] =MOD(ROW(),60)=0 で罫線書式から下線を設定します。

merlionXX
質問者

補足

ありがとうございます。 1ページの行数が決まっていればそれでいいんですが、データによってはセル内で折り返し表示させるため、行の高さが変わるんです。 だから自動改ページさせているので、改ページ場所は不定なんですよ~。

  • moooon
  • ベストアンサー率26% (26/98)
回答No.1

難しい方法は知りませんが、フッターを使っているんであればそれを利用したらいかがでしょう。 フッターの1行目をスペースで連打し、フォントの設定で架線を選びます。 これで下線だけが表示され、丁度データとフッターの境になるのではないですか?

merlionXX
質問者

補足

その方法をためしました。 既に文字数がたくさん入っているためか、エラーになってしまいます。 空白のページでためしたら、短い線は引けましたが、いくらスペースを打っても長くなりません。

関連するQ&A

専門家に質問してみよう