• ベストアンサー

【Excel】書式設定を元に戻す

Excel2003を使用しています。 作業グループで印刷する場合、印刷する前にセルの塗りつぶしを解除して印刷後、その設定を元に戻すというマクロを作りたく、先日質問させていただきました。 「新しいマクロの記録」でできたコードに回答をいただいた内容を加えてマクロを作りました。印刷後に設定を“元に戻す”コードが記録されていないようなのですが、どのようにコードを書いたらいいのでしょうか? Cells.Select Selection.Interior.ColorIndex = xlNone ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True Range("A1").Select コードの一部を記載しておきますので、初歩的な質問で申し訳ありませんが、よろしくお願いします。

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

  • ベストアンサー
  • zap35
  • ベストアンサー率44% (1383/3079)
回答No.1

前回「白黒印刷にされては」と回答したものです。 今回もご質問に対する直接的な回答でなくて申し訳ないですが、「シートをコピーし、背景色を消して印刷後、コピーしたシートを削除する」方法ではダメですか? セルの背景色を退避して戻すよりは簡単かもしれません。以下は「シートの部分印刷も可能にする」ために印刷ウィザードを開くようにしていますが、シート決め打ちで印刷するだけならもう少し簡略になると思います。 Sub TransparePrint() ' 背景色なしでシートを印刷する Dim shtName, orgRange As String Dim resDialog On Error GoTo end0 Application.ScreenUpdating = False If TypeName(Selection) = "Range" Then  orgRange = Selection.Address End If shtName = ActiveSheet.Name Sheets(shtName).Copy After:=Sheets(shtName) ActiveSheet.Cells.Interior.ColorIndex = xlNone If orgRange <> "" Then  Range(orgRange).Select End If resDialog = Application.Dialogs(xlDialogPrint).Show Application.DisplayAlerts = False ActiveWindow.SelectedSheets.Delete Worksheets(shtName).Activate If orgRange <> "" Then  Range(orgRange).Select End If end0: Application.DisplayAlerts = True Application.ScreenUpdating = True End Sub

rx-z5815
質問者

お礼

zap35 さん、こんにちは。 今回も目を留めてくださり、ありがとうございます。 >「シートをコピーし、背景色を消して印刷後、コピーしたシートを削除する」方法ではダメですか? こういう考え方もあるのですね。勉強になります。 “元に戻す”ということばかり考えていましたので、全く思いつきませんでした。 教えていただいたコードで試してみようと思います。 ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

  • FEX2053
  • ベストアンサー率37% (7987/21354)
回答No.2

これ、簡単じゃないですよ。 というのも、このマクロは「何も考えずにシート全部を選択して 塗りつぶしを解除する」処理をしていますので、印刷後にどこが 塗りつぶされていたかを判断する方法がないんです。 ですので、「新しいシートを挿入して、そこにデータをコピー、 塗りつぶしを解除して、そのシートを削除」という方針で行くしか ないんじゃないかと。例えばこんな感じですかね。 S_name = ActiveSheet.Name Cells.Select Selection.Copy Sheets.Add ActiveSheet.Paste Selection.Interior.ColorIndex = xlNone ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True ActiveWindow.SelectedSheets.Delete Sheets(S_name).Select Range("A1").Select シートを削除するところで警告が出ますが、これは「削除」のボタンを 押せばオッケーです。この警告を解除することも出来ますが、なんらか の理由でマクロが中途で止まったときに、ヘタすると二度と警告が出なく なりますので、毎回クリックされたほうがいいかと思いますよ。

rx-z5815
質問者

お礼

回答ありがとうございます。 >印刷後にどこが塗りつぶされていたかを判断する方法がないんです。 そうなんですね。 アドバイスいだたいた方法でやってみます。 詳しく説明していただき、ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • エクセルVBA実行後にファイルを自動で閉じるVBA

    Sub 印刷() ' ' Macro1 Macro ' マクロ記録日 : 201X/X/X ユーザー名 : AAAA ' ' If MsgBox("実行する場合はOK、間違ってこのボタンをクリックした場合はキャンセルをクリックしてください。(日付確認後、印刷のこと。)", vbOKCancel) = vbCancel Then End End If 'A印刷 ChDir "L:\フォルダB\X\新規" Workbooks.Open Filename:="L:\フォルダB\X\新規\記録表\工程分析.xls" Sheets("毎日印刷").Select ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True Sheets("月曜日印刷").Select ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True Sheets("火曜日印刷").Select ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True Sheets("水曜日印刷").Select ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True Sheets("木曜日印刷").Select ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True Sheets("金曜日印刷").Select ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True Sheets("土曜日印刷").Select ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True Sheets("日曜日印刷").Select ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True ActiveWorkbook.Save ActiveWindow.Close あるエクセルファイルのボタンに上記のVBAが記入されています。 そのボタンを押すと「工程分析.xls」ファイルを呼び出し各シートを自動印刷して保存して閉じるVBAです。 質問ですがボタンの配置されたあるエクセルファイルの上記VBAの処理を全て完了した後に上書き保存を自動で実行し、自動であるエクセルファイルを閉じるVBAはどの様に追加すれば良いでしょうか?

  • 指定する曜日の時に特定のエクセルファイルを印刷

    Sub 印刷() ' ' Macro1 Macro ' マクロ記録日 : 201X/X/X ユーザー名 : AAAA ' ' If MsgBox("実行する場合はOK、間違ってこのボタンをクリックした場合はキャンセルをクリックしてください。(日付確認後、印刷のこと。)", vbOKCancel) = vbCancel Then End End If 'A印刷 ChDir "L:\フォルダB\X\新規" Workbooks.Open Filename:="L:\フォルダB\X\新規\記録表\工程分析.xls" Sheets("毎日印刷").Select ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True Sheets("月曜日印刷").Select ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True Sheets("火曜日印刷").Select ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True Sheets("水曜日印刷").Select ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True Sheets("木曜日印刷").Select ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True Sheets("金曜日印刷").Select ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True Sheets("土曜日印刷").Select ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True Sheets("日曜日印刷").Select ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True  ActiveWorkbook.Save ActiveWindow.Close あるエクセルファイルのボタンに上記のVBAが記入されています。 そのボタンを押すと「工程分析.xls」ファイルの各シートを自動印刷して保存するVBAです。 ボタンが設置されているシートのK1には「TODAY()」の式が入っています。これは当日の日付を自動で表記する様になっています。 質問ですがボタンを押すと毎日印刷シート+K1に記入されている日付の曜日のシートのみを印刷するVBAはどの様にすれば良いでしょうか? 例えば今日(2016年9月10日)で言うと土曜日なのでボタンを押すと工程分析.xlsファイルの毎日印刷シート+土曜日印刷のみ出力されると言う事です。 明日(2016年9月11日)は日曜日なのでボタンを押すと工程分析.xlsファイルの毎日印刷シート+日曜日印刷シートのみが出力される形です。 よろしくお願いします。

  • excel vba 印刷部数設定

    excel 2002を使用しています。 マクロで印刷および印刷プレビューせずに、印刷部数を設定する方法を探しています。 ActiveWindow.SelectedSheets.PrintOut Copies:=1, Preview:=True  ではプレビューしてしまいます。 ActiveWindow.SelectedSheets.PrintOut Copies:=1  では印刷してしまいます。 印刷およびプレビューしない方法はないものなのでしょうか。 よろしくお願いします。

  • VBAでA3サイズに印刷したい

    Sub Macro4() ' ' Macro4 Macro ' マクロ記録日 : 2007/5/23 ユーザー名 : Administrator ' ' Sheets("印刷").Select ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True End Sub マクロの自動作成でこのように作りました これをA4からA3に拡大印刷したいのですが、どのようにしたら良いのでしょうか教えてください、よろしくお願いします。

  • マクロ 連続印刷

    マクロ初心者です。 ピボットテーブルでマクロを使って連続印刷をしようと思いました。 一応やってみて連続で印刷は出来たのですが番号がないときエラーになってしまします。 たとえば"562"という番号がないときエラーになって止まってしまいます。 番号がないときは飛ばして印刷するにはどのようにしたらよいでしょうか? よろしくお願いします。 Sub 連続印刷() ' ' 連続印刷 Macro ' ' ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True, _ IgnorePrintAreas:=False ActiveSheet.PivotTables("ピボットテーブル1").PivotFields("コンポコード").ClearAllFilters ActiveSheet.PivotTables("ピボットテーブル1").PivotFields("コンポコード").CurrentPage = _ "562" ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True, _ IgnorePrintAreas:=False ActiveSheet.PivotTables("ピボットテーブル1").PivotFields("コンポコード").ClearAllFilters ActiveSheet.PivotTables("ピボットテーブル1").PivotFields("コンポコード").CurrentPage = _ "947" ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True, _ IgnorePrintAreas:=False ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True, _ IgnorePrintAreas:=False ActiveSheet.PivotTables("ピボットテーブル1").PivotFields("コンポコード").ClearAllFilters ActiveSheet.PivotTables("ピボットテーブル1").PivotFields("コンポコード").CurrentPage = _ "950" ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True, _ IgnorePrintAreas:=False ActiveSheet.PivotTables("ピボットテーブル1").PivotFields("コンポコード").ClearAllFilters ActiveSheet.PivotTables("ピボットテーブル1").PivotFields("コンポコード").CurrentPage = _ "952" End Sub

  • Microsoft Visual Basicについて質問します。

    シート名「委託内訳」でAN70がスペースの時に1ページのみ印刷し,スペースでない時に1~2ページを印刷したい時,下記のマクロでは2ページ目が印刷出来ません。 印刷できる方法は何かありますか? よろしくお願いします。 Sheets("委託内訳").Select Range("AN70").Select ActiveCell = ATAI If ATAI = "" Then ActiveWindow.SelectedSheets.PrintOut From:=1, To:=1, Copies:=1, Collate _ :=True Else ActiveWindow.SelectedSheets.PrintOut From:=1, To:=2, Copies:=1, Collate _ :=True End If

  • エクセル マクロの作り方

    はじめまして エクセルのマクロ初心者です。 ツール→マクロ→新しいマクロの記録にて 開いているシートをA1~V68まで(すべての範囲でもOKです)をコピーし、別の貼り付け用シートに貼付、3つのタブを印刷して閉じ、開いているシートを表示する。という内容のマクロを登録しました。 台紙で以上のマクロを登録し、台紙を複製しました。 マクロを実行すると複製されたシートのA1~V68までではなく、台紙のA1~V68までが印刷されて困っています。 どうすれば解決するでしょうか???詳しい方おしえてください。 尚、下記に記録されたものを載せておきますので、訂正部分など教えてもらえたら助かります。 (マクロの記録の上部を訂正すると良いような気はするのですが…。初心者なのもので範囲の指定の仕方がわるいのでしょうか???) よろしくお願いします。 Sub マクロ名() ' ' マクロ名 Macro ' マクロ記録日 : 2007/10/14 ユーザー名 : ??? ' ' Application.Run "hozon1.初期" Range("A1:V68").Select Selection.Copy ChDir "C:\Documents and Settings\Administrator\デスクトップ\日報、点呼簿" Workbooks.Open Filename:= _ "C:\Documents and Settings\Administrator\デスクトップ\日報、点呼簿\平日,日曜、祭日点呼簿.xls" Cells.Select ActiveSheet.Buttons.Add(509.25, 1.5, 72.75, 12.75).Select ActiveSheet.Paste Sheets("大型1").Select Application.CutCopyMode = False ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True Sheets("大型2").Select ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True Sheets("小型1").Select ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True ActiveWindow.Close ActiveWindow.SmallScroll Down:=-51 Range("J3").Select End Sub

  • Excel VBAで自動印刷プログラムの作り方を教えて下さい。

    あるファイルにある全てのグラフを印刷するマクロを作りたいのですが、 どのようにすれば良いのでしょうか? Sub Macro2() ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True End Sub に何を付け足せば良いのでしょうか? 何卒よろしくお願い致します。

  • エクセルのマクロの記述について

    VBA初心者ですのでどうか詳しく教えてください。下記のマクロをエクセルで組んだのですが・・・ -------------------------------------------------------------------- Sub hideworksheets() Worksheets("sheet1").Visible = False End Sub Sub ボタン_Click() ActiveWindow.SelectedSheets.PrintOut Copies:=1 Sheets("sheet1").Select ActiveWindow.SelectedSheets.PrintOut Copies:=1 Sheets("sheet2").Select ActiveWindow.SelectedSheets.PrintOut Copies:=1 Sheets("sheet3").Select ActiveWindow.SelectedSheets.PrintOut Copies:=1 Sheets("sheet4").Select ActiveWindow.SelectedSheets.PrintOut Copies:=1 End Sub ------------------------------------------------------------ 1.上記設定で"sheet5"という別シートにボタンを設置した場合、このボタンを実行すると、シート1~4のほかにシート5まで印刷されてしまいます。シート5を印刷したくない場合のVBAの記述について教えてください。 2.「Sub hideworksheets()  Worksheets("sheet1").Visible = False    End Sub」    の箇所で、シート1を非表示にしたいのですが、このマクロを実行時、「Sub ボタン_Click()」以下のマクロを実行しようとすると、「実行時エラー1004 worksheeクラスのselectメソッドが失敗しました」のエラーがでてしまいます。シート1を非表示にし、無事印刷のマクロを実行する為の記述を教えてください。

  • Excel VBA 印刷設定

    印刷ページ設定で ActiveWindow.SelectedSheets.PrintOut From:=1, To:=3, Copies:=2, Collate :=True の式で、何ページまで印刷するかを、A1セルに入力して決定したいのですが、数式の書き方がわかりません。 A1に2と入力すれば、To:=2と認識するやり方を教えてください。 宜しくお願いします。

送風機の芯出しについての疑問
このQ&Aのポイント
  • 送風機の芯出しについての疑問を解決!正しい方法と注意点をご紹介
  • ベルトを外した状態のプーリーとベルトをかけた状態の芯、どちらを見るべき?解説します
  • 送風機の芯出しに関して正確な方法が気になる方必見!おすすめの手順をご紹介
回答を見る

専門家に質問してみよう