プロが教える店舗&オフィスのセキュリティ対策術

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

フッター部分の表記とデータ部分を明確に区別するためです。よろしくお願いします。

A 回答 (6件)

難しい方法は知りませんが、フッターを使っているんであればそれを利用したらいかがでしょう。


フッターの1行目をスペースで連打し、フォントの設定で架線を選びます。
これで下線だけが表示され、丁度データとフッターの境になるのではないですか?

この回答への補足

その方法をためしました。
既に文字数がたくさん入っているためか、エラーになってしまいます。

空白のページでためしたら、短い線は引けましたが、いくらスペースを打っても長くなりません。

補足日時:2005/04/04 15:16
    • good
    • 0

条件付書式を利用してみてはどうですか?



例えば、1ページ60行で改ページするように印刷設定されているのであれば、

[数式が] =MOD(ROW(),60)=0

で罫線書式から下線を設定します。

この回答への補足

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

補足日時:2005/04/04 16:21
    • good
    • 0

タイトル(項目)を各頁に印刷するようにすれば可能かと思います。

ファイル ~ ページ設定でシートタブから行列どちらでも指定できます。

この回答への補足

行や列の印刷タイトルのことですか?

これだとヘッダーとの境のところにはもってこれますが、フッダーでは無理ではないでしょうか?

補足日時:2005/04/04 17:57
    • good
    • 0

こんにちは。


汎用性を考えるなら、
HPageBreakオブジェクトのLocationプロパティを使ってみたらどうでしょう。

HPageBreaks (HPageBreakオブジェクトのコレクション)

ActiveSheet.HPageBreaks.Count (改ページ総数)

ActiveSheet.HPageBreaks(1).Location.Row (一番目の改ページの行)

Location.Rowで改ページの行が分りますので、その上の行に線を引けばいいですよね。

以上です。
    • good
    • 0
この回答へのお礼

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

お礼日時:2005/04/04 18:00

>だから自動改ページさせているので、改ページ場所は不定なんですよ~。



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

出来ました!
ありがとうございます。

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

お礼日時:2005/04/04 18:02

こんばんは。



●一頁しかない場合で
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
------------------------------------------------

プリントが済んだ後の下線を消す方法は考えてみてください。

以上です。
    • good
    • 0
この回答へのお礼

すばらしい!
後ろに100行追加しちゃうわけですね、なるほどぉ・・・。

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

お礼日時:2005/04/05 09:12

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

このQ&Aを見た人はこんなQ&Aも見ています