条件付き印刷(Microsoft Excel)
カークは、Excelで印刷されるものを条件付きで制御する方法があるかどうか尋ねました。たとえば、セルA1には値が含まれており、その値は印刷内容を正確に制御します。おそらく、A1に1が含まれている場合、Sheet1が印刷されます。 2が含まれている場合は、Sheet1とSheet2が印刷されます。
これを行う唯一の方法はマクロを使用することであり、使用できるいくつかのアプローチがあります。次の非常に単純なマクロについて考えてみます。このマクロは、SelectCase構造を使用して印刷を制御するだけです。
Sub PrintStuff() Dim vShts As Variant vShts = Sheets(1).Range("A1") If Not IsNumeric(vShts) Then Exit Sub Else Select Case vShts Case 1 Sheets("Sheet1").PrintOut Case 2 Sheets("Sheet2").PrintOut Case 3 Sheets("Sheet1").PrintOut Sheets("Sheet2").PrintOut End Select End If End Sub
最初のシートのセルA1で値1、2、または3を指定してこのマクロを実行すると、マクロは値に基づいてさまざまなものを印刷します。値が1の場合、Sheet1が印刷されます。 2の場合、Sheet2が印刷されます。 3の場合、Sheet1とSheet2の両方が印刷されます。異なる値で異なるものを印刷する場合は、Select Case構造を変更して、可能な値と各値に対して何を印刷するかを反映します。
より包括的なアプローチを作成することもできます。ブックに「コントロールシート」を追加することを検討してください。このシートには、最初の列にリストされているワークブックの各ワークシートの名前が含まれます。ワークシート名の右側の2番目の列に値を入力すると、マクロは対応するワークシートを印刷します。
次のマクロを使用して、「コントロールシート」を作成できます。
Sub CreateControlSheet() Dim i as integer On Error Resume Next 'Delete this sheet if it already exists Sheets("Control Sheet").Delete On Error GoTo 0 Sheets.Add 'Add the WhatToPrint Sheet ActiveSheet.Name = "Control Sheet" Range("A1").Select 'Label the columns ActiveCell.FormulaR1C1 = "Sheet Name" Range("B1").Select ActiveCell.FormulaR1C1 = "Print?" Cells.Select Selection.Columns.AutoFit For i = 1 To ActiveWorkbook.Sheets.Count Cells(i + 1, 1).Value = Sheets(i).Name Next End Sub
マクロは、古いコントロールシートが存在する場合、それを最初に削除します。次に、Control Sheetという名前の新しいワークシートを追加し、A列とB列にヘッダーラベルを配置します。次に、ブック内のすべてのワークシートをA列に一覧表示します。
コントロールシートを作成したら、印刷する各ワークシートの横の列Bに「X」またはその他の値(「Y」や1など)を配置できます。次に、次のマクロはコントロールシートを調べて、列Bのセルにマーク(任意のマーク)があるワークシートを印刷します。
Sub PrintSelectedSheets() Dim i as Integer i = 2 Do Until Sheets("Control Sheet").Cells(i, 1).Value = "" If Trim(Sheets("Control Sheet").Cells(i, 2).Value <> "") Then Sheets(Sheets("Control Sheet").Cells(i, 1).Value).Select ActiveWindow.SelectedSheets.PrintOut Copies:=1 End If i = i + 1 Loop End Sub
もう1つのアプローチは、印刷の直前に実行されるマクロを作成することです。
(印刷は、Excelでトラップできるイベントの1つです。)thisWorkbookオブジェクトに追加された次のマクロは、印刷を試みるたびに実行されます。
Private Sub Workbook_BeforePrint(Cancel As Boolean) Dim vShts As Variant Dim iResponse As Integer Dim bPreview As Boolean On Error GoTo ErrHandler vShts = Sheets(1).Range("A1") If Not IsNumeric(vShts) Then GoTo InValidEntry ElseIf vShts < 1 Or vShts > Sheets.Count Then GoTo InValidEntry Else iResponse = MsgBox(prompt:="Do you want Print Preview?", _ Buttons:=vbYesNoCancel, Title:="Preview?") Select Case iResponse Case vbYes bPreview = True Case vbNo bPreview = False Case Else Msgbox "Canceled at User request" GoTo ExitHandler End Select Application.EnableEvents = False Sheets(vShts).PrintOut Preview:=bPreview End If ExitHandler: Application.EnableEvents = True Cancel = True Exit Sub InValidEntry: MsgBox "'" & Sheets(1).Name & "'!A1" _ & vbCrLf & "must have a number between " _ & "1 and " & Sheets.Count & vbCrLf GoTo ExitHandler ErrHandler: MsgBox Err.Description Resume ExitHandler End Sub
マクロは、最初のワークシートのセルA1の値をチェックします。この値を使用して、印刷するワークシートを決定します。つまり、1は最初のワークシートを印刷し、2は2番目のワークシートを印刷し、3は3番目のワークシートを印刷します。
A1の値が値でない場合、または1未満であるか、ブック内のワークシートの数よりも多い場合は、値が正しくないことがユーザーに通知され、マクロが終了します。
A1の値が範囲内にあると仮定すると、マクロは印刷プレビューを使用するかどうかを尋ねます。ユーザーの応答に応じて、マクロは指定されたワークシートを印刷するか、そのワークシートの印刷プレビューを表示します。
注:
このページ(または_ExcelTips_サイトの他のページ)で説明されているマクロの使用方法を知りたい場合は、役立つ情報を含む特別なページを用意しました。
_ExcelTips_は、費用効果の高いMicrosoftExcelトレーニングのソースです。
このヒント(13108)は、Microsoft Excel 2007、2010、2013、2016、2019、およびOffice 365のExcelに適用されます。Excelの古いメニューインターフェイス用のこのヒントのバージョンは、次の場所にあります。
linkConditionalPrinting。