カークは、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の古いメニューインターフェイス用のこのヒントのバージョンは、次の場所にあります。