• ベストアンサー

特定セルと罫線を印刷したくないのですが

A61からBN62まで,罫線が引かれた表があります。印刷の際,その表内の特定のセル(印刷したくないセル)と罫線を印刷しないようなマクロを組みたいのですが,どなたか教えていただけないでしょうか?

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

  • ベストアンサー
  • ham_kamo
  • ベストアンサー率55% (659/1197)
回答No.7

すみません、なかなかうまくいかないですね。 私も試行錯誤してみたのですが、同じエラーが出ないので原因が特定できずに困ってしまいました。 .Range(C) = "" というのは、 Const C = "C1:G4,W2,AS2:AW4,AX2:BH2,C6:BN9,C10:AA55,AH1:BF55,C56:BN58,C56:BN56,C57:F61,AH57:AK61" で定義した、印刷しないセルの値を作業用シートからクリアしているのですが、印刷範囲によって処理内容が変わるわけではないので、A63:BL85を印刷範囲に指定したからといって、上記の処理でエラーになることはないはずなのですが…。 苦肉の策ですが、上記の「印刷したくないセル」がA63:BL85の範囲には1つも含まれないことに気がついたので、 「印刷範囲に上記のセルが含まれているときだけ対象セルのクリアを実行」 という処理にしてみました。これでうまくいかないでしょうか。 Sub 印刷()  Application.ScreenUpdating = False  Dim WS As Worksheet  Set WS = ActiveSheet  Const C = "C1:G4,W2,AS2:AW4,AX2:BH2,C6:BN9,C10:AA55,AH1:BF55,C56:BN58,C56:BN56,C57:F61,AH57:AK61"  ActiveSheet.Copy after:=Worksheets(Worksheets.Count)  With Worksheets(Worksheets.Count).UsedRange   .Borders(xlDiagonalDown).LineStyle = xlLineStyleNone   .Borders(xlDiagonalUp).LineStyle = xlLineStyleNone   .Borders(xlEdgeBottom).LineStyle = xlLineStyleNone   .Borders(xlEdgeLeft).LineStyle = xlLineStyleNone   .Borders(xlEdgeRight).LineStyle = xlLineStyleNone   .Borders(xlEdgeTop).LineStyle = xlLineStyleNone   .Borders(xlInsideHorizontal).LineStyle = xlLineStyleNone   .Borders(xlInsideVertical).LineStyle = xlLineStyleNone  End With    With Worksheets(Worksheets.Count).PageSetup   .PaperSize = xlPaperA4   .Orientation = xlPortrait   .TopMargin = Application.CentimetersToPoints(1.5)   .BottomMargin = Application.CentimetersToPoints(1.5)   .RightMargin = Application.CentimetersToPoints(1)   .LeftMargin = Application.CentimetersToPoints(1)   .Zoom = 100  End With  With Worksheets(Worksheets.Count)   Dim R As Range   Set R = Intersect(.Range(C), .Range(.PageSetup.PrintArea))   If Not R Is Nothing Then R.Value = ""   .PrintOut Copies:=1, Preview:=True   Application.DisplayAlerts = False   .Delete   Application.DisplayAlerts = True  End With    WS.Activate  Application.ScreenUpdating = True End Sub

kobakenda
質問者

お礼

ありがとうございました。プレビューをしないようにしたら,なんとか印刷できるようになりました。本当に親切,そして丁寧にご指導いただきありがとうございました。

kobakenda
質問者

補足

ありがとうございました。無事マクロは実行できるようになりました。ただ,また問題が出てしまいました。 実はリストボックスで名簿から印刷したい人物の選択して印刷する方法を実行しているのですが, ボタンを押すと次のコマンドを実行し, Private Sub cmdyearprint3_Click() Dim i As Integer For i = 0 To ListBox2.ListCount - 1 If ListBox2.Selected(i) = True Then Sheets("シート名").Cells(1, 66) = i + 1 Sheets("シート名").Activate GoPrint11 End If Next End Sub GoPrint11でham_kamoさんの作成したマクロ Sub GoPrint11() ' ' GoPrint Macro ' マクロ記録日 : 2007/1/26 ユーザー名 : ' ' Sheets("シート名").Select Range("A1:BL61").Select Application.ScreenUpdating = False Dim WS As Worksheet Set WS = ActiveSheet Const P As String = "A1:BL61" Const C = "C1:G4,W2,AS2:AW4,AX2:BH2,C6:BK9,C10:AA55,C56:AH56,C56:BN56,C57:F61,AH57:AK61,G57:AE57" ActiveSheet.Copy after:=Worksheets(Worksheets.Count) With Worksheets(Worksheets.Count).UsedRange .Borders(xlDiagonalDown).LineStyle = xlLineStyleNone .Borders(xlDiagonalUp).LineStyle = xlLineStyleNone .Borders(xlEdgeBottom).LineStyle = xlLineStyleNone .Borders(xlEdgeLeft).LineStyle = xlLineStyleNone .Borders(xlEdgeRight).LineStyle = xlLineStyleNone .Borders(xlEdgeTop).LineStyle = xlLineStyleNone .Borders(xlInsideHorizontal).LineStyle = xlLineStyleNone .Borders(xlInsideVertical).LineStyle = xlLineStyleNone End With With Worksheets(Worksheets.Count).PageSetup .PrintArea = "A1:BL61" .PaperSize = xlPaperA4 .Orientation = xlPortrait .TopMargin = Application.CentimetersToPoints(1.5) .BottomMargin = Application.CentimetersToPoints(1.5) .RightMargin = Application.CentimetersToPoints(1) .LeftMargin = Application.CentimetersToPoints(1) .Zoom = 100 End With With Worksheets(Worksheets.Count) .Range(C) = "" .PrintOut Copies:=1, Preview:=False Application.DisplayAlerts = False .Delete Application.DisplayAlerts = True End With WS.Activate Application.ScreenUpdating = True End Sub にとびます。 ところがコマンドボタンを押したとたんに,固まってしまいます。 なぜでしょうか? よろしくお願いします。

その他の回答 (6)

  • ham_kamo
  • ベストアンサー率55% (659/1197)
回答No.6

すみません、私の方で認識がずれているところがありました。 印刷の範囲は変わることがないものと思い、マクロの中で指定していました。 それが、 Const P As String = "A61:BN62" の指定です。先ほどの回答では .Range(P).PrintOut Copies:=1, Preview:=True とその範囲を指定して印刷をしていました。 しかしNo.1では印刷範囲をしていません。それにもかかわらずNo.1では正常に印刷された、ということは印刷範囲は手動で設定されているのですね。よけいな処理を追加してしまいました。 これがうまく動かない原因かもしれません。 ただ、 > .Range(C) = "" ← ここでデバッグしますかという > エラーメッセージがでるのですが。 の原因がわかりません。私が同じように印刷範囲を変更して実行してもエラーが出ないので、調べられないのです。 とりあえず、No.1と同じように印刷範囲をマクロ内では指定せずにしてみました。これでうまくいくかどうかまだ不安なところですが、試していただけますでしょうか。 Sub 印刷()  Application.ScreenUpdating = False  Dim WS As Worksheet  Set WS = ActiveSheet  Const C = "C1:G4,W2,AS2:AW4,AX2:BH2,C6:BN9,C10:AA55,AH1:BF55,C56:BN58,C56:BN56,C57:F61,AH57:AK61"  ActiveSheet.Copy after:=Worksheets(Worksheets.Count)  With Worksheets(Worksheets.Count).UsedRange   .Borders(xlDiagonalDown).LineStyle = xlLineStyleNone   .Borders(xlDiagonalUp).LineStyle = xlLineStyleNone   .Borders(xlEdgeBottom).LineStyle = xlLineStyleNone   .Borders(xlEdgeLeft).LineStyle = xlLineStyleNone   .Borders(xlEdgeRight).LineStyle = xlLineStyleNone   .Borders(xlEdgeTop).LineStyle = xlLineStyleNone   .Borders(xlInsideHorizontal).LineStyle = xlLineStyleNone   .Borders(xlInsideVertical).LineStyle = xlLineStyleNone  End With    With Worksheets(Worksheets.Count).PageSetup   .PaperSize = xlPaperA4   .Orientation = xlPortrait   .TopMargin = Application.CentimetersToPoints(1.5)   .BottomMargin = Application.CentimetersToPoints(1.5)   .RightMargin = Application.CentimetersToPoints(1)   .LeftMargin = Application.CentimetersToPoints(1)   .Zoom = 100  End With  With Worksheets(Worksheets.Count)   .Range(C) = ""   .PrintOut Copies:=1, Preview:=True   Application.DisplayAlerts = False   .Delete   Application.DisplayAlerts = True  End With    WS.Activate  Application.ScreenUpdating = True End Sub

kobakenda
質問者

お礼

ありがとうございます。ham_kamoさんの認識はずれていません。実は一つのワークシートの中に2つの表があり,それを1枚ずつ別々に印刷したいと考えています。その範囲がA1:BL61とA63:BL85です。やはりA1:BL61はうまくいくのですが,A63:BL85では昨日と同じメッセージがでます。自分で試行錯誤してみましたができませんでした。よろしくお願いします。

  • ham_kamo
  • ベストアンサー率55% (659/1197)
回答No.5

No.3のマクロでは真っ白くなってしまうのですか。なぜだろう? とりあえず、最初のマクロをベースにして修正してみました。指定の印刷設定も組み込んであります。なお、プレビューを出すのに、 .PrintOut Copies:=1, Preview:=True の印刷命令でPreviewをTrueにするようにしています。プレビューが不要なときは、Falseに変えてください。 Sub 印刷()  Application.ScreenUpdating = False  Dim WS As Worksheet  Set WS = ActiveSheet  Const P As String = "A61:BN62"  Const C = "C1:G4,W2,AS2:AW4,AX2:BH2,C6:BN9,C10:AA55,AH1:BF55,C56:BN58,C56:BN56,C57:F61,AH57:AK61"  ActiveSheet.Copy after:=Worksheets(Worksheets.Count)  With Worksheets(Worksheets.Count).UsedRange   .Borders(xlDiagonalDown).LineStyle = xlLineStyleNone   .Borders(xlDiagonalUp).LineStyle = xlLineStyleNone   .Borders(xlEdgeBottom).LineStyle = xlLineStyleNone   .Borders(xlEdgeLeft).LineStyle = xlLineStyleNone   .Borders(xlEdgeRight).LineStyle = xlLineStyleNone   .Borders(xlEdgeTop).LineStyle = xlLineStyleNone   .Borders(xlInsideHorizontal).LineStyle = xlLineStyleNone   .Borders(xlInsideVertical).LineStyle = xlLineStyleNone  End With    With Worksheets(Worksheets.Count).PageSetup   .PaperSize = xlPaperA4   .Orientation = xlPortrait   .TopMargin = Application.CentimetersToPoints(1.5)   .BottomMargin = Application.CentimetersToPoints(1.5)   .RightMargin = Application.CentimetersToPoints(1)   .LeftMargin = Application.CentimetersToPoints(1)   .Zoom = 100  End With  With Worksheets(Worksheets.Count)   .Range(C) = ""   .Range(P).PrintOut Copies:=1, Preview:=True   Application.DisplayAlerts = False   .Delete   Application.DisplayAlerts = True  End With    WS.Activate  Application.ScreenUpdating = True End Sub

kobakenda
質問者

お礼

ありがとうございます。これではやはりプレビューでは真っ白です。なぜなのでしょう?もう一息なのですが,何度もアドバイスをいただき申し訳ありません。よろしくお願いします。

kobakenda
質問者

補足

素朴な疑問なのですが, Const P As String = "A61:BN62" は何を意味するのでしょうか? たとえば印刷範囲がA63~BN85になった場合は同じマクロが成り立つのでしょうか?ちょっと実験してみたら, With Worksheets(Worksheets.Count)   .Range(C) = "" ← ここでデバッグしますかというエラーメッセ            ージがでるのですが。

  • ham_kamo
  • ベストアンサー率55% (659/1197)
回答No.4

> 結合したセルに引かれている右下がりの斜線はどうやって消せば良いのでしょうか? おっと、そういうパターンもあるのですね。 上から7行目の With ActiveSheet.Range(P) を、 With ActiveSheet.UsedRange に変更してみてください。

kobakenda
質問者

お礼

ANo.3のものでマクロを実行すると,真っ白になってしまいます。ANo.2のもので実行すると,うまくマクロが実行されます。ただ,その際に結合したセルに右下がりの斜線が残ってしまいます。できればNo.2のもので右下がりの斜線を消す方法をご伝授いただければと思います。また,印刷するページの設定を組み込むにはどの部分に書き込めばよいでしょうか。ちなみに以下のような感じなのですが。 With ActiveSheet.PageSetup .PaperSize = xlPaperA4 .Orientation = xlPortrait .TopMargin = Application.CentimetersToPoints(1.5) .BottomMargin = Application.CentimetersToPoints(1.5) .RightMargin = Application.CentimetersToPoints(1) .LeftMargin = Application.CentimetersToPoints(1) .Zoom = 100 End With Selection.PrintOut Copies:=1, Preview:=False こんな感じです。あと一歩なのです。よろしくお願いします。

  • ham_kamo
  • ベストアンサー率55% (659/1197)
回答No.3

No.1です。指定された範囲を除いてA61からB62までを罫線なしで印刷するように修正してみました。 このマクロでは実行すると印刷プレビューが現れますが、プレビューなしで直接印刷ダイアログを出したいときは、 Application.Dialogs(xlDialogPrintPreview).Show の行を、 Application.Dialogs(xlDialogPrint).Show に変えてください。 念のため実行方法ですが、Alt+F11でVBAの画面を立ち上げ、「挿入」> 「標準モジュール」を選択して以下のマクロをコピーして貼り付けます。 Alt+F11でExcelに戻り、印刷したいシートが表示された状態でAlt+F8を押し、マクロを実行してください。 Sub 印刷()  Application.ScreenUpdating = False  Dim WS As Worksheet  Set WS = ActiveSheet  Const P As String = "A61:BN62"  Const C = "C1:G4,W2,AS2:AW4,AX2:BH2,C6:BN9,C10:AA55,AH1:BF55,C56:BN58,C56:BN56,C57:F61,AH57:AK61"  ActiveSheet.Copy After:=Worksheets(Worksheets.Count)  With ActiveSheet.Range(P)   .Borders(xlDiagonalDown).LineStyle = xlLineStyleNone   .Borders(xlDiagonalUp).LineStyle = xlLineStyleNone   .Borders(xlEdgeBottom).LineStyle = xlLineStyleNone   .Borders(xlEdgeLeft).LineStyle = xlLineStyleNone   .Borders(xlEdgeRight).LineStyle = xlLineStyleNone   .Borders(xlEdgeTop).LineStyle = xlLineStyleNone   .Borders(xlInsideHorizontal).LineStyle = xlLineStyleNone   .Borders(xlInsideVertical).LineStyle = xlLineStyleNone  End With  With ActiveSheet   .PageSetup.PrintArea = P   .Range(C) = ""   Application.Dialogs(xlDialogPrintPreview).Show   Application.DisplayAlerts = False   .Delete   Application.DisplayAlerts = True  End With  WS.Activate  Application.ScreenUpdating = True End Sub

kobakenda
質問者

お礼

やってみましたが,印刷プレビューで見ると真っ白になってしまいます。なぜでしょうか?

kobakenda
質問者

補足

補足に入れてしまいますが,すみません。できました。ありがとうございます。最後に一点,結合したセルに引かれている右下がりの斜線はどうやって消せば良いのでしょうか?よろしくお願いします。

  • ham_kamo
  • ベストアンサー率55% (659/1197)
回答No.2

No.1です。 > 特定のセルというのは固定なのでせすが, > A61からBN62の範囲内に1箇所だけでなく, > 数か所とんで存在します。 とありますが、固定であるのであれば、そのセル番地か、あるいはそれらのセルを特定する条件(○○という文字列が含まれているセル、など)を教えていただけますか?

kobakenda
質問者

お礼

印刷したくないのは以下のセルです。 C1:G4,W2,AS2:AW4,AX2:BH2,C6:BN9,C10:AA55,AH1:BF55,C56:BN58,C56:BN56,C57:F61,AH57:AK61 よろしくお願いします。

  • ham_kamo
  • ベストアンサー率55% (659/1197)
回答No.1

印刷したいのはA61からBN62の範囲だけなのでしょうか。 それともシート全体を印刷する際、A61からBN62の範囲は罫線を印刷しない、ということでしょうか。 また、特定のセルというのは固定なのでしょうか。それとも印刷のたびに変わるのでしょうか。 とりあえず、印刷しないセルをあらかじめ選択して実行すると、 ・シートを作業用にコピー ・作業用シートのA61からBN62までの罫線を削除 ・作業用シートの選択されたセルの内容を削除 ・この状態で印刷プレビュー実行  →ここから確認して印刷が可能 ・作業用シートを削除 するマクロを作ってみました。 Sub 印刷()  Application.ScreenUpdating = False  Dim C As String  C = Selection.Address  ActiveSheet.Copy after:=Worksheets(Worksheets.Count)  With Worksheets(Worksheets.Count).Range("A61:BN62")   .Borders(xlDiagonalDown).LineStyle = xlLineStyleNone   .Borders(xlDiagonalUp).LineStyle = xlLineStyleNone   .Borders(xlEdgeBottom).LineStyle = xlLineStyleNone   .Borders(xlEdgeLeft).LineStyle = xlLineStyleNone   .Borders(xlEdgeRight).LineStyle = xlLineStyleNone   .Borders(xlEdgeTop).LineStyle = xlLineStyleNone   .Borders(xlInsideHorizontal).LineStyle = xlLineStyleNone   .Borders(xlInsideVertical).LineStyle = xlLineStyleNone  End With  With Worksheets(Worksheets.Count)   .Range(C) = ""   Application.Dialogs(xlDialogPrintPreview).Show   Application.DisplayAlerts = False   .Delete   Application.DisplayAlerts = True  End With  Application.ScreenUpdating = True End Sub

kobakenda
質問者

お礼

ありがとうございます。 印刷したいのはA61からBN62の範囲だけです。 また、特定のセルというのは固定なのでせすが,A61からBN62の範囲内に1箇所だけでなく,数か所とんで存在します。 さらに付け加えると,名簿リストがあって,名簿リストから選択された人物の情報が印刷されるようになっています。 よろしくおねがいします。

関連するQ&A