印刷の範囲をアクティブセルのRangeオブジェクト利用で指定する。

fuutorenzokueyecatch

今回の封筒宛名印刷エクセルの作り方は、

封筒の宛名印字の範囲指定を、アクティブセルのRangeオブジェクトを利用して行います。

範囲指定として、テキストボックスやInputBoxへ範囲入力する方法は取りません。

 

こんにちは、じゅんぱ店長(@junpa33)です。

 

その前に、先回の記事を確認されたいという場合は、こちら↓になります。

単独印刷のマルチページにコマンドボタンを設置。変数でセルサイズを自由に変更

 

このエクセルソフト完成品をフリーダウンロードするにはこちら↓の記事からです。

無料DL!封筒宛名印刷エクセルソフト ダウンロードと取り扱い説明。

 

封筒宛名印刷についての記事はこちらです。

「封筒宛名印刷」の記事一覧を開く

 

アクティブセルを利用した連続印刷範囲指定の考え方

 

今回作成する「連続印刷」ページはこのようになります。

renzokuinsatu001

 

  • 設置しているマルチページに「連続印刷」ページを設置します。
  • 「連続印刷」ページに必要なコントロールを配置します。
  • ユーザーフォームモジュールにコントロールのコードを記述
  • ボタンから呼び出されるプロシージャーをModule4に記述する。

 

今回のテーマのコード作成のポイントは

印刷の範囲指定を簡単に設定できるようにする。簡単に範囲を修正・変更できるようにすることです。

  1. 印刷の始点終点の指定方法はアクティブセルのRangeオブジェクトを利用する。
  2. 昇順・降順を考えたコード組み立てを行う。
  3. 印刷のためのコードは、単独印刷での「単独印刷」プロシージャーを利用します。

 

宛名印刷ユーザーフォームの連続印刷ページの配置

 

青矢印と赤矢印が配置したコントロールです。

その他の文字はラベルで作成してください。

renzokuinsatu002

 

コントロールの設置

 

ラベルとコマンドボタンを設置していきます。

ラベルの配置

②ラベル「アクティブプリンター」

renzokuinsatu003

③ラベル「宛名始点A」

renzokuinsatu004

⑥ラベル「宛名終点A」

renzokuinsatu005

オブジェクト名 「アクティブプリンター」
Caption 「(空白)」
オブジェクト名 「宛名始点A」
Caption 「(空白)」
オブジェクト名 「宛名終点A」
Caption 「(空白)」

 

⑩-1ラベル「印刷範囲1」

renzokuinsatu006

⑩-2ラベル「印刷範囲2」

renzokuinsatu007

オブジェクト名 「印刷範囲1」
Caption 「(空白)」
オブジェクト名 「印刷範囲2」
Caption 「(空白)」

 

コマンドボタンの配置

①コマンドボタン「宛名リスト表示」

renzokuinsatu008

④コマンドボタン「始点入力」

renzokuinsatu009

⑤コマンドボタン「始点クリア」

renzokuinsatu010

オブジェクト名 「宛名リスト表示」
Caption 「宛名リスト表示」
オブジェクト名 「始点入力」
Caption 「始点入力」
オブジェクト名 「始点クリア」
Caption 「クリア」

 

⑦コマンドボタン「終点入力」

renzokuinsatu011

⑧コマンドボタン「終点クリア」

renzokuinsatu012

⑨コマンドボタン「印刷範囲確認」

renzokuinsatu013

オブジェクト名 「終点入力」
Caption 「終点入力」
オブジェクト名 「終点クリア」
Caption 「クリア」
オブジェクト名 「印刷範囲確認」
Caption 「印刷範囲プレビュー」

 

⑪コマンドボタン「連続印刷」

renzokuinsatu014

オブジェクト名 「連続印刷」
Caption 「印刷開始」

 

フォームモジュールでのVBAコード記述

 

オブジェクト名 「アクティブプリンター」

接続しているプリンター名を表示するようにします。

Private Sub アクティブプリンター_Click()
宛名印刷設定.アクティブプリンター.Caption = Application.ActivePrinter
End Sub

 

オブジェクト名 「宛名リスト表示」

印刷の範囲を指定するために表示させます。

Private Sub 宛名リスト表示_Click()
Worksheets(“宛名リスト”).Select
End Sub

 

オブジェクト名 「始点入力」

Module4の「宛名始点選択」モジュールを呼び出します。

Private Sub 始点入力_Click()
Module4.宛名始点選択
End Sub

 

オブジェクト名 「始点クリア」

Private Sub 始点クリア_Click()
宛名印刷設定.宛名始点A.Caption = “”
宛名印刷設定.宛名始点A.BackColor = &H8000000F
shiR = 0
End Sub

 

オブジェクト名 「終点入力」

Module4の「宛名終点選択」モジュールを呼び出します。

Private Sub 終点入力_Click()
Module4.宛名終点選択
End Sub

 

オブジェクト名 「終点クリア」

Private Sub 終点クリア_Click()
宛名印刷設定.宛名終点A.Caption = “”
宛名印刷設定.宛名終点A.BackColor = &H8000000F
shuR = 0
End Sub

 

オブジェクト名 「印刷範囲確認」

ラベル「宛名始点A」、「宛名終点A」、「印刷範囲1」、「印刷範囲2」のCaptionを操作します。

Module4の「連続印刷PV」モジュールを呼び出します。

Private Sub 印刷範囲確認_Click()
Worksheets(“宛先”).Select
If 宛名印刷設定.宛名始点A.Caption = “” Then
MsgBox “宛名始点が指定されていません。”, vbOKOnly, “メッセージ”
宛名印刷設定.印刷範囲1.Caption = “”
Exit Sub
End If
If 宛名印刷設定.宛名終点A.Caption = “” Then
MsgBox “宛名終点が指定されていません。”, vbOKOnly, “メッセージ”
宛名印刷設定.印刷範囲1.Caption = “”
Exit Sub
End If
宛名印刷設定.印刷範囲1.Caption = “「” & 宛名印刷設定.宛名始点A.Caption & “」から「” & 宛名印刷設定.宛名終点A.Caption & “」まで”
宛名印刷設定.印刷範囲2.Caption = Abs(shuR – shiR) + 1 & “件分を印刷します。”
Module4.連続印刷PV
End Sub

 

オブジェクト名 「連続印刷」

Module4の「連続印刷開始」モジュールを呼び出します。

Private Sub 連続印刷_Click()
Module4.連続印刷開始
End Sub

 

VBAコード参考記事
ここの説明で出てくるVBAコードの参考にしていただける記事です。

vbacalleyecatch Callステートメントはプロシージャーの部品化に必須項目 エクセルVBA最速理解

 

Module4での印刷範囲のVBAコード記述

 

モジュール内で共通の変数の宣言を先頭に記述します。

Public STY As Variant
Public shiR As Long, shuR As Long

 

「宛名始点選択」プロシージャー

アクティブになっているセルの行番号を取得します。

この行番号を始点として設定します。

Sub 宛名始点選択()

Worksheets(“宛名リスト”).Select
宛名印刷設定.宛名始点A.Caption = Range(“B” & ActiveCell.Row)
宛名印刷設定.宛名始点A.BackColor = &HFFFFC0
shiR = ActiveCell.Row

End Sub

 

 

「宛名終点選択」プロシージャー

アクティブになっているセルの行番号を取得します。

この行番号を終点として設定します。

Sub 宛名終点選択()

Worksheets(“宛名リスト”).Select
宛名印刷設定.宛名終点A.Caption = Range(“B” & ActiveCell.Row)
宛名印刷設定.宛名終点A.BackColor = &HFFFFC0
shuR = ActiveCell.Row

End Sub

 

「連続印刷PV」プロシージャー

連続印刷は、印刷部分のコードをModule1の単独印刷モジュールの呼び出しで行います。

変数「shiR」と変数「shuR」を比較することで、

リストの昇順と降順の両方に対応させています。

 

MEMO

If条件文の条件分岐の考え方は、こちらを参考にしてください。

「If条件文」のVBAコードの組み方。条件の絞り方を最速に理解。

メッセージボックスの使い方についてはこちらを参考にしてください。

メッセージボックス MsgBox実際の使い方を最速に理解

 

Sub 連続印刷PV()

 

Dim ans As Integer
Worksheets(“宛名リスト”).Select
STY = 宛名印刷設定.TP_no.Caption

  If STY = “” Then
    MsgBox “封筒サイズが指定されていません。”, vbOKOnly, “メッセージ”
    Exit Sub
  End If

  If shuR >= shiR Then

    For s = shiR To shuR
      Worksheets(“宛名リスト”).Select
      Range(“B” & s).Select
      Module1.単独印刷
      Module1.発送便記入
      ans = MsgBox(“プレビュー画面に切替えしますか?”, vbYesNo + vbQuestion, “チェック”)
      If ans = vbYes Then
        Worksheets(“宛先”).PrintPreview
      Else
        MsgBox “終了します”
        Exit Sub
      End If
    Next s

 

  ElseIf shuR < shiR Then
    For t = shiR To shuR Step -1
      Worksheets(“宛名リスト”).Select
      Range(“B” & t).Select
      Module1.単独印刷
      Module1.発送便記入
      ans = MsgBox(“プレビュー画面に切替えしますか?”, vbYesNo + vbQuestion, “チェック”)
      If ans = vbYes Then
        Worksheets(“宛先”).PrintPreview
      Else
        MsgBox “終了します”
        Exit Sub
      End If
    Next t
  End If

End Sub

 

「連続印刷開始」プロシージャー

「Worksheets(“宛先”).PrintOut」の記述で印刷出力命令を出しています。

Sub 連続印刷開始()

 

Worksheets(“宛名リスト”).Select
STY = 宛名印刷設定.TP_no.Caption

 

  If STY = “” Then
    MsgBox “封筒サイズが指定されていません。”, vbOKOnly, “メッセージ”
    Exit Sub
  End If

  If shuR >= shiR Then

    For s = shiR To shuR
      Worksheets(“宛名リスト”).Select
      Range(“B” & s).Select
      Module1.単独印刷
      Module1.発送便記入
      Worksheets(“宛先”).PrintOut
    Next s

  ElseIf shuR < shiR Then
    For t = shiR To shuR Step -1
      Worksheets(“宛名リスト”).Select
      Range(“B” & t).Select
      Module1.単独印刷
      Module1.発送便記入
      Worksheets(“宛先”).PrintOut
    Next t
  End If

End Sub

 

アクティブセルを使った印刷範囲指定での「連続印刷」のまとめ

 

連続印刷とは、単独印刷を連続して行うことという考え方で、

実際にコード組み立ての中でModule1の「単独印刷」プロシージャーを呼び出して利用することにしました。

 

この連続印刷のコード組み立ての中で、今回の注目コードは「印刷の範囲設定」の部分になります。

普通なら範囲指定には、「テキストボックス」かまたは「InputBox」を使いたくなるところです。

が、今回は敢えて簡便に住所録「宛名リスト」で直接セル指定で「開始位置」と「終了位置」を指定できるようにしました。

その分、指定するための入力作業やその処理コードも要らなくなり、効果もメリットも大きかったと思います。

要チェック

裏方さんの話です。それは、

ユーザーモジュールを表示する時 Show vbModeless でコード記述していることです。

このコードがあるので、「Worksheet 上でもセルを指定(アクティブに)することが出来る」ということを忘れてはいけません。

このコードが無ければ、フォーカスをWorksheetに移すことが出来なくなります。

 

次回は、最終回になります。差出人を指定して印刷する部分についてです。

 

vbastudyeyecatch002 エクセルVBAを独学で習得する!ために大切な7つのポイントを解説します

 

エクセルVBAを独習するのに参考書は欠かせません。 参考書選びは自分に合った「相棒」にできるものを選んでいきたいです。
エクセルVBAの独習でおすすめ参考書を7冊選ぶ。良書との出会いは大切です

 

エクセルVBAの独習には動画学習という方法もあります。 目と耳両方を使って学習することでさらに勉強効率を上げることもできると思います。
エクセルVBA初級者がUdemyで動画学習する講座おすすめ5選と無料講座の上手な使い方。

 

エクセルVBAを使って業務効率を上げて行くのに、始めのうちに知っておきたい内容を纏めています。

「VBA最速理解」の記事一覧を開く

 

今回の記事はここまでです。   最後までご覧いただき有難うございました。

<記事内容についての告知>VBAコードの記述記事においては、その記述には細心の注意をしたつもりですが、掲載のVBAコードは動作を保証するものではりません。 あくまでVBAの情報の一例として掲載しています。 掲載のVBAコードのご使用は、自己責任でご判断ください。 万一データ破損等の損害が発生しても当方では責任は負いません