- 締切済み
excelでシートごと印刷しない設定にしたい
選択したEXCELブックを全シート印刷するツールがありまして こいつの運用で頭を悩ませています。 印刷範囲設定をかけたりシート非表示にすれば不要部分は印刷されないのですが、 表示する必要があるが印刷は不要というシートがあって、 一セルだけ印刷範囲に選んでそのセルを非表示とかにしても空白ページが1ページ印刷されてしまいます。 EXCELの特定シートをまるごと印刷しない設定とか方法は無いでしょうか。 EXCEL2016、マクロは使用可能です。 ツールは内部的に全シート選択&印刷をやっているのだと思います。 ツールを使わないという選択肢は無しです。 よろしくお願いします。
- みんなの回答 (6)
- 専門家の回答
みんなの回答
- SI299792
- ベストアンサー率47% (782/1637)
>ツールに関してですが個別販売はされておりません。 であれば、ツールの情報を聞いても無駄ですね。でも、どうしてもそのツールを使わなければならない事情は解りました。 非表示にすれば印刷されないのであれば、印刷前に非表示にするというのはどうでしょうか。問題は、AfterPrintというイベントがないので、印刷後再表示はできない事です。しかし、閉じる時に印刷するのならば、開く時に再表示すればいいです。 シートモジュールのThisWorkbookをダブルクリックして、そこに入れて下さい。 ' Option Explicit ' Private Sub Workbook_BeforePrint(Cancel As Boolean) ' 印刷前に印刷範囲を指定していないシートを非表示にする Dim Sheet As Worksheet ' For Each Sheet In Worksheets ' If Sheet.PageSetup.PrintArea = "" Then Sheet.Visible = False End If Next Sheet End Sub ' Private Sub Workbook_Open() ' 印刷範囲を指定していないシートを表示にする Dim Sheet As Worksheet ' For Each Sheet In Worksheets ' If Sheet.PageSetup.PrintArea = "" Then Sheet.Visible = True End If Next Sheet End Sub だだ、各ワークブックにこのマクロを入れなければなりません。もし、対象のワークブックが沢山あるなら、実用的ではありません。 その場合、前に上げた回答を応用して、各ワークブックにマクロを入れなくても印刷前に非表示、開く時に再表示という事もあります。1つの回答にたくさん書くと混乱するし、この方法が貴方が気に入るかどうか判りません。それに、この方法がそのツールに有効かどうかも、やってみないと判りません。
- SI299792
- ベストアンサー率47% (782/1637)
こちらこそ申し訳ない。 実は、「ツールを使わないという選択肢は無しです。」というのを見落としていました。 後から気づいたものの、ここでは回答の削除ができないので、放置するしかなかったのです。 「全シート印刷するツール」とは、どこから手に入れた何というツールなのでしょうか。 シートに印刷しない設定というのはありません。Excel は、そのツールを使うことを想定していません。ツールにそのような機能がない限り不可能です。 代替案です。ツールを使う方法でないので、お気に召さないかもしれません。 終了すると全印刷をするマクロです。 空白のワークブックでシートモジュールのThisWorkbookに入れて下さい。 次にこのマクロを入れたワークブックを保存して再起動します。 このワークブックを開いておけば、他のワークブックの終了時に印刷範囲を指定してあるシートを印刷します。 ' Option Explicit Private WithEvents xlApp As Application ' Private Sub Workbook_Open() ' Set xlApp = Application End Sub ' Private Sub Workbook_BeforeClose(Cancel As Boolean) ' Set xlApp = Nothing End Sub ' Private Sub xlApp_WorkbookBeforeClose(ByVal wb As Workbook, Cancel As Boolean) ' Dim Sheet As Worksheet ' Debug.Print wb.Name ' For Each Sheet In wb.Worksheets ' If Sheet.PageSetup.PrintArea > "" Then Sheet.PrintOut End If Next Sheet End Sub
お礼
回答ありがとうございます。 ツールに関してですが個別販売はされておりません。 大手ベンダーのとあるパッケージソフトの一部というところまでで勘弁してください。 〇シートに印刷しない設定というのはありません。 この言葉だけで助かります。 あるかないかわからないものを探すのはキビシイ作業なので。 色々調べたところ、プリンタ側に白紙をスキップするような機能が ついているものがちらほらあるようで、そちらで対応できないか調査中です。
- chayamati
- ベストアンサー率41% (260/624)
今晩は,回答No.3です。 >知りたいものは確かにある意味フィルタなのですが。 1.フィルタの設定 1-1.表の形式ですが、私はまず表名、作成日、ページ/総ページをヘッダに記述 1-2.1行目を項目名 1-3.2行目以降に情報 この形式でフィルタをかけます。 [1行目の任意のセル]→[データリボン]→[フィルタ] これでsheetのフィルタの用意が出来ました。 よく見かける表に 1行目表名、2行目項目名、3行目以降情報 このときは、項目名の行を1行目にするため、表名の行を削除して、 フィルタをかけ、表名の行を項目名の上に挿入します。 マクロは「フィルタセット」、「フィルタリセット」です >選択したEXCELブックを全シート印刷するツールがありまして これがVBAなら Private Sub() で始まり End Sub で終わっています このPrivate Sub()の次の行にフィルタセットを挿入します また、 VBA起動から Private Sub Worksheet_SelectionChange(ByVal Target As Range) フィルタリセット End Sub とします
お礼
回答ありがとうございます。 私がやりたいことは、この方法では実現できなさそうです。 ありがとうございました。
- chayamati
- ベストアンサー率41% (260/624)
- SI299792
- ベストアンサー率47% (782/1637)
「選択したEXCELブックを」 ということは、ダイアログボックスを開いてエクセルファイルを選択して、全てのシートを印刷ということでしょうか。 であれば、このマクロです。 前回同様、印刷したくないシートは、印刷範囲をクリアして下さい。 ' Option Explicit ' Sub Macro1() ' Dim Files As Variant Dim File As Variant Dim Sheet As Worksheet ' Files = Application.GetOpenFilename("Microsoft Excelブック,*.xls*", _ MultiSelect:=True) ' If VarType(Files) = vbBoolean Then End End If ' For Each File In Files Workbooks.Open File, ReadOnly:=True ' For Each Sheet In Worksheets ' If Sheet.PageSetup.PrintArea > "" Then Sheet.PrintOut End If Next Sheet ActiveWorkbook.Close False Next File End Sub
お礼
回答ありがとうございます。 確認したところ、印刷処理ですね。 申し訳ありませんが、 私が知りたいのは印刷処理ではなく、印刷処理に対する設定です。 説明がわかりにくくてすいません。
補足
昨日書いた内容だと手順がわからないですね。 申し訳ない。 ツール上でExcelファイルを選択すると 通常のExcel画面が起動します。 そこで入力作業を行い、Excelを終了すると ツールの機能で、事後処理&全ページ印刷の処理が走る。 という具合です。 何度か繰り返し処理を行うこともあります。 よろしくお願いします。
- SI299792
- ベストアンサー率47% (782/1637)
そのツールがどんなものか判らないので、判りません。 マクロ可能なら、以下のマクロでどうでしょうか。 印刷範囲を設定してあるシートだけ印刷します。 印刷したくないシートは、印刷範囲をクリアして下さい。 ' Option Explicit ' Sub PrintOut() ' Dim Sheet As Worksheet ' For Each Sheet In Sheets ' If Sheet.PageSetup.PrintArea > "" Then Sheet.PrintOut End If Next Sheet End Sub
お礼
お礼が遅くなり申し訳ありません。 様々検討しましたが、それぞれ問題があり未だ決定打なく 色々お試し中です。 アイデアは参考にさせていただきます。 とても勉強になりました。ありがとうございました。