Excel VBAは、データの処理や分析だけでなく、印刷にも非常に強力なツールです。
この記事では、セル選択を駆使して、自由な印刷範囲を設定する方法を紹介します。
これにより、より効率的なレポートや文書を作成することができます。
さらに、実用的なサンプルコードも提供しますので、すぐに実践できるようになります。
セル選択を利用した印刷範囲の設定
Excelのシート上でセルを選択することは、通常の操作ですが、VBAを使ってセルの選択を自動化することで、印刷範囲を効果的に制御できます。
以下は、セル選択を利用して印刷範囲を設定する基本的な方法です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
Sub PrintSelectedRange() ' 印刷範囲を選択するための変数を宣言 Dim selectedRange As Range ' エラーハンドリングを一時的に有効にする On Error Resume Next ' ユーザーに印刷範囲を選択させるための入力ボックスを表示し、選択された範囲を変数に代入 Set selectedRange = Application.InputBox("印刷したい範囲を選択してください。", Type:=8) ' エラーハンドリングを元に戻す On Error GoTo 0 ' 選択された範囲が存在する場合 If Not selectedRange Is Nothing Then ' 選択された範囲を印刷 selectedRange.PrintOut End If End Sub |
このコードは、指定されたセル範囲を印刷するためのVBAマクロです。
ユーザーに対して範囲を選択させ、選択された範囲を印刷します。
エラーハンドリングは、ユーザーがキャンセルボタンをクリックした場合など、エラーが発生してもスクリプトの実行を続行するために使用されています。
選択された範囲が存在しない場合、何も印刷されません。
自動化された印刷範囲の設定
さらに高度な方法として、特定の条件を満たすセルを自動的に選択して印刷範囲とする方法があります。
例えば、特定のキーワードが含まれる行や列を印刷する場合など、以下のようなサンプルコードを使うことができます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
Sub AutoSelectPrintRange() ' ワークシートオブジェクトを宣言し、操作対象のワークシートを指定 Dim ws As Worksheet Set ws = ThisWorkbook.Sheets("シート名") ' ワークシートの最終行を取得 Dim lastRow As Long lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row ' ループ変数を宣言 Dim i As Long ' 行ごとにループ For i = 1 To lastRow ' セルのテキストに特定のキーワードが含まれているかチェック If InStr(ws.Cells(i, 1).Value, "キーワード") > 0 Then ' セルが空でないことを確認 If ws.Range("A" & i).Value <> "" Then ' 行全体が非表示でないことを確認 If ws.Range("A" & i).EntireRow.Hidden = False Then ' 行の高さが0より大きいことを確認 If ws.Range("A" & i).EntireRow.RowHeight > 0 Then ' 該当行全体を選択 ws.Range("A" & i).EntireRow.Select End If End If End If End If Next i ' 選択された範囲が存在する場合、それを印刷 If Not Selection Is Nothing Then Selection.PrintOut End If End Sub |
このコードは、指定したキーワードを含む行を自動的に選択し、その行を印刷します。
ユーザーはワークシート名やキーワードを適切に指定する必要があります。
コードは行ごとにループし、特定の条件を満たす行を選択して印刷します。
応用テクニック:印刷範囲の設定の高度なカスタマイズ
Excel VBAを使えば、さらに高度なカスタマイズも可能です。
例えば、印刷ページのレイアウト、ヘッダー・フッターの設定、印刷設定の保存など、細かい設定をスクリプトで行うことができます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
Sub AdvancedPrintSettings() ' 印刷設定の例 ' アクティブなワークシートの印刷設定を操作します With ActiveSheet.PageSetup ' ページの向きを横に設定 .Orientation = xlLandscape ' ページ全体に1ページで収めるように設定 .FitToPagesWide = 1 .FitToPagesTall = 1 ' ページの中央ヘッダーにテキストを設定 .CenterHeader = "Excel VBA 印刷範囲設定" ' ページの中央フッターにページ番号を表示 .CenterFooter = "ページ &P / &N" End With ' 印刷設定を保存 ActiveSheet.PageSetup.Save End Sub |
このコードは、アクティブなワークシートの印刷設定をカスタマイズするVBAマクロです。以下は設定されている内容の説明です。
.Orientation = xlLandscape
: ページの向きを横(横長)に設定します。これにより、横方向に長いデータやグラフを印刷する際に適しています。.FitToPagesWide = 1
および.FitToPagesTall = 1
: ページ全体に1ページで収めるように設定します。これにより、内容を1ページに収めて印刷できます。.CenterHeader = "Excel VBA 印刷範囲設定"
: ページの中央ヘッダーにテキスト “Excel VBA 印刷範囲設定” を表示します。これは印刷されたページのヘッダーに表示されます。.CenterFooter = "ページ &P / &N"
: ページの中央フッターにページ番号を表示します。”&P”は現在のページ番号、”&N”は総ページ数を表します。
最後に、ActiveSheet.PageSetup.Save
を使用して、カスタマイズした印刷設定を保存します。
まとめ
Excel VBAを駆使して、セル選択を通じて自由な印刷範囲を設定する方法を学びました。
さらに、自動化された印刷範囲の設定や高度なカスタマイズのテクニックも紹介しました。
これらのテクニックを活用すれば、Excelでの印刷作業が効率的かつ便利に行えることでしょう。
Excel VBAは多くの機能を提供しており、その可能性は無限大です。ぜひこの記事を参考にして、Excelでの作業をより効率化しましょう!
サンプルコード
以下では、Excel VBAを使用して、特定の条件に基づいてセルを選択し、それを印刷範囲とする実例を示します。
この例では、特定のキーワードを含む行を印刷するシナリオを考えてみましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
Sub PrintRowsWithKeyword() Dim ws As Worksheet Dim lastRow As Long Dim i As Long Dim printRange As Range ' 対象のワークシートを指定 Set ws = ThisWorkbook.Sheets("シート名") ' 最終行を取得 lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row ' 印刷範囲を初期化 Set printRange = Nothing ' キーワードを指定 Dim keyword As String keyword = "特定のキーワード" ' 行ごとにループ For i = 1 To lastRow If InStr(1, ws.Cells(i, 1).Value, keyword, vbTextCompare) > 0 Then ' キーワードを含む行を印刷範囲に追加 If printRange Is Nothing Then Set printRange = ws.Rows(i) Else Set printRange = Union(printRange, ws.Rows(i)) End If End If Next i ' 印刷範囲がある場合は印刷 If Not printRange Is Nothing Then printRange.Select printRange.PrintOut Else MsgBox "指定したキーワードを含む行は見つかりませんでした。", vbInformation, "情報" End If End Sub |
このサンプルコードでは、指定したキーワードを含む行を印刷範囲に追加し、それを印刷します。キーワードに合わせて「シート名」や「特定のキーワード」を適切に置き換えて使用してください。このコードを実行すると、該当する行が印刷され、該当する行が存在しない場合にはメッセージが表示されます。
この実例を参考にして、Excel VBAを活用して実務の印刷タスクを自動化し、効率化しましょう。
コメント