プロが教えるわが家の防犯対策術!

エクセルのsheet1に表があります。
この表を印刷ボタンを押すだけで印刷できるようにしようと思います。データの最後の行までのページを印刷できるようにするマクロを教えてください。
ちなみに、今ある最後のデータより下の行もずっと罫線が引いてあります。

また、印刷だけだったら普通に 印刷>ページの指定 でできるよと思われるかもしれませんが、その他の機能もマクロでつくっている最後の段階なのでマクロでお願いいたします。

分かりにくい文章ですがよろしくお願いします。

A 回答 (4件)

>データの最後の行までのページを印刷できるようにする


データの最終行を、泥臭く、一行一行空白かと聞いて探すことにします。
>最後のデータより下の行もずっと罫線が引いてあります。
印刷したデータ最終行の下辺は罫線がないと、締りがなくて、いやですから罫線を引きます。
>最後のデータより下の行もずっと罫線が引いてあります
難しいのは、その罫線表に一杯にデータが入った時、1ページで印刷できるものかどうかです。
次ページに跨る場合は見だし部分などを次ページ(以下)にも印刷せねばならないでしょうから。
改ページなしに印刷するメソッドを知らないので、別シートに編集して、そのページが別シートに完成後、別シート
を印刷します。
Sub test01()
Dim sh1 As Worksheet
Dim sh2 As Worksheet
Set sh1 = Worksheets("sheet1")
Set sh2 = Worksheets("sheet2")
'--一たんすべてコピー
sh1.Range("a1:e50").Copy
sh2.Activate
sh2.Range("a1").Select
ActiveSheet.Paste
Application.CutCopyMode = False
'------データ行について
j = 3
p01:
For i = 3 To 2 + 40
If sh1.Cells(j, "A") = "" Then Exit For
sh2.Cells(i, "A") = sh1.Cells(j, "A")
sh2.Cells(i, "B") = sh1.Cells(j, "B")
sh2.Cells(i, "C") = sh1.Cells(j, "C")
sh2.Cells(i, "D") = sh1.Cells(j, "D")
sh2.Cells(i, "E") = sh1.Cells(j, "E")
j = j + 1
Next i
sh2.Range(Cells(i - 1, "A"), Cells(i - 1, "E")).Borders(xlEdgeBottom).LineStyle = xlContinuous
sh2.Range(Cells(i, "A"), Cells(50, "E")).Clear
' sh2.Range(Cells(1, "A"), Cells(50, "E")).PrintOut
'----42行を越えると繰り返し
If i > 2 + 40 Then
sh2.Range("A3:E42").ClearContents
GoTo p01
End If
End Sub
この質問ぐらいの内容になると、マクロの記録の技量だけでは難しい気がします。上記も類似(と思っている)例で出来る例がありますというヒント程度を示すものであり、VBAの経験者があちこちチューニングして、初めて質問の目的のようになるのであって、そのままで一発で動くとか思い通りであることは期待できません。実際の問題を目の前においてプログラムを組まないと、ちょっとした違いでも動かないとか結果がおかしいことがありますので、甘く期待しないで下さい。
もちろん少数例ではテスト済みですが。
テストはSheet2を全セル指定、編集-クリア-すべて、でクリアして繰り返してやって下さい。
    • good
    • 0
この回答へのお礼

いつもお世話になります。
今回は、なんとか出来ましたので今後参考にさせていただきます。

お礼が大変おそくなりご迷惑をおかけしました。ありがとうございました。

お礼日時:2004/08/03 16:00

#2さんの回答とほとんど同じですが、書式設定してあると xlLastCell はデータの最終を返さないと思います。



A列のデータ最終を最終行として A1:Cxx行を範囲とする例です。

Sub Test()
With ActiveSheet
 .PageSetup.PrintArea = _
 .Range("A1:C" & .Range("A65536").End(xlUp).Row).Address
End With
End Sub
    • good
    • 0
この回答へのお礼

回答ありがとうございました。
今回は、なんとか出来ましたので今後参考にさせていただきます。

お礼が大変おそくなりご迷惑をおかけしました。

お礼日時:2004/08/03 15:59

 "データの最後の行"というのをどのように認識されてますか?


 sheet1の使われている最後のセル、いわゆるSpecialCells(xlLastCell)まででしょうか?
 
 また、改ページはどうされるのでしょうか?

 など、少しわからない点があるので詳しいソースはかけませんでした。
 しかし、印刷範囲の指定は、たとえばA1セルからG50セルまでを印刷範囲とする場合、
 
 WorkSheets("sheet1").PageSetup.PrintArea = "A1:G50"

 のように指定できたと思います。
 データの最後の行を取得してきてこの範囲にあてはめればどうでしょうか。 
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

一応、試行錯誤した結果できるようになりました。

--------------------------------------------------
Range("B2:J2").Select
Range(Selection, Selection.End(xlDown)).Select
ActiveSheet.PageSetup.PrintArea =Selection.Address
ActiveWindow.SelectedSheets.PrintOut Copies:=1,
--------------------------------------------------

Range("B2:J2")は、タイトル行です。

>データの最後の行を取得してきてこの範囲にあてはめればどうでしょうか。
この方法ではエラーになってしまいました。

基本がないので、なかなか皆さんの回答を読んでも理解するのに時間がかかり御礼が遅くなりました。

またよろしくお願いします。ありがとうございました。

お礼日時:2004/06/01 12:10

シートの「印刷範囲の指定」ではいけませんか?


1.印刷したい範囲をドラッグして選択します(たとえばC3からG20のように)
2.ツールバー「ファイル」=>「印刷範囲」=>「印刷範囲の設定」
3.必要に応じて「印刷プレビュー」で調整してください。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

>「印刷範囲の指定」ではいけませんか?

今回は、誰でも(エクセルの使えない人でも)ボタン1つできれいに印刷まで出来るように作りたかったのでこの方法は使えませんでした。説明不足ですみません。

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

お礼日時:2004/06/01 12:00

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