ワークブックには、あらゆる種類のデータを含めることができます。多数のワークシートを含み、それぞれに少量のデータしか含まれていないワークブックがある場合、複数のワークシートを1枚の用紙に印刷する方法があるかどうか疑問に思うかもしれません。

この問題の解決策に取り組むには、いくつかの方法があります。 1つ目は、プリンタードライバーの機能を使用して、シートごとに複数のページを印刷することです。たとえば、古いHP LaserJetを使用していて、プリンタードライバーを使用すると、1枚の用紙に印刷するページ数を指定できます。 3つまたは4つの単一ページのワークシートをすべて1枚の用紙に印刷したい場合は、次の手順に従うだけです。

。 [ファイル]メニューから[印刷]を選択します。 Excelに[印刷]ダイアログボックスが表示されます。

。ダイアログボックスの[印刷する文字列]領域で、[ブック全体]オプションを選択します。

。 [プロパティ]ボタンをクリックします。 Excelは、[レイアウト]タブが選択された状態で、プリンタの[プロパティ]ダイアログボックスを表示します。

。 Pages PerSheetコントロールを4に設定します。

。 [OK]をクリックして、[プロパティ]ダイアログボックスを閉じます。

。 [OK]をクリックして、実際にワークシートを印刷します。

お使いのプリンタは、ここで概説されているものと同様の機能を提供する場合がありますが、その機能を見つけるには、プリンタの[プロパティ]ダイアログボックスを調べてみる必要がある場合があります。もちろん、この方法で印刷すると、印刷出力に非常に小さなテキストが表示される可能性があります。これは、プリンタドライバが各ページを縮小して、印刷されたページの比例した領域を占めるようにするためです。空白の一部を減らして、印刷されるテキストのサイズを大きくしたい場合は、別の解決策を探す必要があります。

多くの人は、印刷物を統合するために、実際には、ワークブックの他のワークシートに印刷される領域への参照のみを含む「印刷ワークシート」を作成します。これらの参照は、各ワークシートのデータを参照する数式を使用するか、Excelのカメラツールを使用して行うことができます。 (カメラツールは_ExcelTips._の他の号で説明されています)

複数のワークシートを1つのワークシートに統合する自動化されたソリューションの場合、マクロを使用できます。次のマクロは、ワークブックの最後に新しいワークシートを作成し、他のすべてのワークシートからその内容をコピーします。

Sub PrintOnePage()

Dim wshTemp As Worksheet, wsh As Worksheet     Dim rngArr() As Range, c As Range     Dim i As Integer     Dim j As Integer

ReDim rngArr(1 To 1)

For Each wsh In ActiveWorkbook.Worksheets         i = i + 1         If i > 1 Then   ' resize array             ReDim Preserve rngArr(1 To i)

End If

On Error Resume Next         Set c = wsh.Cells.SpecialCells(xlCellTypeLastCell)

If Err = 0 Then             On Error GoTo 0

'Prevent empty rows             Do While Application.CountA(c.EntireRow) = 0 _               And c.EntireRow.Row > 1                 Set c = c.Offset(-1, 0)

Loop

Set rngArr(i) = wsh.Range(wsh.Range("A1"), c)

End If     Next wsh

'Add temp.Worksheet     Set wshTemp = Sheets.Add(after:=Worksheets(Worksheets.Count))



On Error Resume Next     With wshTemp         For i = 1 To UBound(rngArr)

If i = 1 Then                 Set c = .Range("A1")

Else                 Set c = _                   ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell)

Set c = c.Offset(2, 0).End(xlToLeft)  'Skip one row             End If

'Copy-paste range (prevent empty range)

If Application.CountA(rngArr(i)) > 0 Then                 rngArr(i).Copy c             End If         Next i     End With     On Error GoTo 0

Application.CutCopyMode = False ' prevent marquies

With ActiveSheet.PageSetup     'Fit to 1 page         .Zoom = False         .FitToPagesWide = 1         .FitToPagesTall = 1     End With

'Preview New Sheet     ActiveWindow.SelectedSheets.PrintPreview

'Print Desired Number of Copies     i = InputBox("Print how many copies?", "ExcelTips", 1)

If IsNumeric(i) Then         If i > 0 Then             ActiveSheet.PrintOut Copies:=i         End If     End If

'Delete temp.Worksheet?

If MsgBox("Delete the temporary worksheet?", _       vbYesNo, "ExcelTips") = vbYes Then         Application.DisplayAlerts = False         wshTemp.Delete         Application.DisplayAlerts = True     End If End Sub

結合されたワークシートがまとめられた後、マクロは印刷プレビューを使用してワークシートを表示します。印刷プレビューを閉じると、印刷するワークシートのコピー数を尋ねられます。ゼロより大きい数値を入力すると、その数だけ印刷されます。最後に、マクロは、終了する直前に結合されたワークシートを削除することを提案します。

注:

このページ(または_ExcelTips_サイトの他のページ)で説明されているマクロの使用方法を知りたい場合は、役立つ情報を含む特別なページを用意しました。

_ExcelTips_は、費用効果の高いMicrosoftExcelトレーニングのソースです。

このヒント(3243)は、Microsoft Excel 97、2000、2002、および2003に適用されます。Excel(Excel 2007以降)のリボンインターフェイス用のこのヒントのバージョンは、次の場所にあります。