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

fuutotandokueyecatch

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

セルサイズを変更して、封筒サイズごとに最適な印刷ポジションを決めて行きます。その変更の方法として、変数を利用すれば微妙な調整も可能になります。

 

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

 

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

マルチページを使って宛名リストを作成。封筒印字のユーザーフォームをデザイン

 

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

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

 

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

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

 

単独印刷のマルチページにコマンドボタンを設置する

 

仕上がりはこのようになります。

tandokuinsatu001

 

  • 先回設置したマルチページにコントロールを設置します。
  • ユーザーフォームモジュールにコードを記述
  • ボタンから呼び出されるプロシージャーをModule1に記述する。

 

ここでのコード作成のポイントは、
封筒サイズの種類分のテンプレートを作ることなく、それぞれに印刷できるようにすることです。

  1. 宛名リストから印刷する対象をどのように選択するか?
  2. 印刷の用紙サイズがそれぞれ違う中で、適切な印刷ポジションを設定すること。

 

 

単独印刷ページでのコマンドボタンの配置

 

いつものようにツールボックスから必要なコントロールを選んで、マルチページ上で展開します。

 

ユーザーフォームでのボタン設置

 

青矢印の部分です。

各コントロールのプロパティはこのようになります。その他の文字コメントはラベルを使って作成してください。

 

tandokuinsatu002a

 

①マルチページ「単独印刷」タブ

tandokuinsatu003

②ラベル「プリンター注意」

tandokuinsatu004

 

③ラベル「宛名確認表示」

tandokuinsatu005

オブジェクト名 「単独印刷」
Caption 「単独印刷」
オブジェクト名 「プリンター注意」
Caption 「(空白)」
オブジェクト名 「宛名確認表示」
Caption 「ここをクリックすると最新に更新します。」

 

④コマンドボタン「セル戻る」

tandokuinsatu006

⑤コマンドボタン「セル進む」

tandokuinsatu007

⑥ラベル「用紙注意」

tandokuinsatu008

オブジェクト名 「セル戻る」
Caption 「戻る↑」
オブジェクト名 「セル進む」
Caption 「次へ↓」
オブジェクト名 「用紙注意」
Caption 「(白紙)」

 

⑧コマンドボタン「宛名編集」

tandokuinsatu009

⑨コマンドボタン「印刷プレビュー」

tandokuinsatu010

オブジェクト名 「宛名編集」
Caption 「宛名編集」
オブジェクト名 「印刷プレビュー」
Caption 「印刷確認」

 

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

 

「宛名印刷設定」ユーザーフォームモジュールにコントロールのコードを記述します。

 

②ラベル「プリンター注意」
⑥ラベル「用紙注意」

封筒サイズをオプションボタンで選択したときに「注意書き」を表示するかどうかのコードが記述されています。

先回の記事で確認できます。

マルチページを使ったエクセル封筒印字ソフトの作成!宛名リスト編の

オプションボタンのコード設定

 

③ラベル「宛名確認表示」

宛名リストで今、選択している印刷宛名を表示します。

Private Sub 宛名確認表示_Click()

Worksheets(“宛名リスト”).Select
宛名印刷設定.宛名確認表示.Caption = Worksheets(“宛名リスト”).Range(“B” & ActiveCell.Row)
Worksheets(“宛先”).Select

End Sub

 

④コマンドボタン「セル戻る」

Module1に記述されている「セル移動戻る」プロシージャーを呼び出します。

Private Sub セル戻る_Click()
Module1.セル移動戻る
End Sub

 

⑤コマンドボタン「セル進む」

Module1に記述されている「セル移動進む」プロシージャーを呼び出します。

Private Sub セル進む_Click()
Module1.セル移動進む
End Sub

 

⑧コマンドボタン「宛名編集」

Module1に記述されている「単独印刷」プロシージャーを呼び出します。

Private Sub 宛名編集_Click()
Module1.単独印刷
End Sub

 

⑨コマンドボタン「印刷プレビュー」

Module1に記述されている「単独印刷PV」プロシージャーを呼び出します。

Private Sub 印刷プレビュー_Click()
Module1.単独印刷PV
End Sub

 

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

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

 

セルサイズの変更などModule1でのコード記述

 

「セル移動戻る」プロシージャー

アクティブセルを一行上げます。

Sub セル移動戻る()

Worksheets(“宛名リスト”).Select
If ActiveCell.Row – 1 = 0 Then
  Exit Sub
End If

Worksheets(“宛名リスト”).Range(“B” & ActiveCell.Row – 1).Select
宛名印刷設定.宛名確認表示.Caption = ActiveCell.Value
Worksheets(“宛名リスト”).Select

End Sub

 

「セル移動進む」プロシージャー

アクティブセルを一行下げます。

Sub セル移動進む()

Worksheets(“宛名リスト”).Select
If ActiveCell.Row + 1 = 1048577 Then
  Exit Sub
End If

Worksheets(“宛名リスト”).Select
Worksheets(“宛名リスト”).Range(“B” & ActiveCell.Row).Offset(1, 0).Select
宛名印刷設定.宛名確認表示.Caption = ActiveCell.Value
Worksheets(“宛名リスト”).Select

End Sub

 

「単独印刷」プロシージャー

今回の記事の中心部になります。

印刷したい宛名を指定する方法は。「宛名リスト」で宛名を選択(セルをアクティブに)するだけです。特に確定ボタンなども作っていません。

変数を使ってセルのサイズを変化させます。モジュール内で使えるように記述の先頭で宣言しています。

先回の記事↓で確認できます。

「封筒宛名を印刷するエクセルVBAの作り方。基本操作部分編」の

呼び出したModule1のプロシージャーのコード記述」です

 

 

宣言文
Public TPnU As Double, TPnL As Double, TPnM As Double, TPnRo As Double

変数は小数点を扱えるようにDouble(Singleでもいいかもしれませんが)で宣言しています。

それぞれの変数の意味はこのようにしています。

TPnU 先頭行の高さを調整するための変数
TPnL A列の幅を調整するための変数
TPnM フォントサイズを調整するための変数
TPnRo 全行の高さを調整するための変数

 

封筒の宛名印刷の項目を変数として設定するコード

最初に、選択した宛名の項目別データを変数に代入します。この変数は「呼び出したModule1のプロシージャーのコード記述」に宣言しているものです。

宣言文
Public STY As Variant

Public aR As Long, J As Long

Public aN, aKei, aSho, aYB, aK, aSK, aB, aBM, aRe

アクティブにした宛名セルからその同一行の氏名、郵便番号、住所、連絡番号等を印刷用データとして変数に代入します。

Sub 単独印刷()

 

STY = 宛名印刷設定.TP_no.Caption

 

Worksheets(“宛名リスト”).Select
  aR = ActiveCell.Row
  aN = Range(“B” & aR).Value
  aKei = Range(“C” & aR).Value
  aSho = Range(“D” & aR).Value
  aYB = Range(“E” & aR).Value
  aK = Range(“F” & aR).Value
  aSK = Range(“G” & aR).Value
  aB = Range(“H” & aR).Value
  aBM = Range(“I” & aR).Value
  aRe = Range(“J” & aR).Value

 

封筒タイプ別に変数に数値を設定する

基本、横書きの設定ですが、「STY=TP1」と「STY=TP2」と「STY=TP3」の時に縦書きを選択できるようになっています。

 

MEMO

Gotoステートメントの使い方についてはこの記事を参考にしてください。

Gotoステートメントの利用法を最速に理解。毒コードと薬コード

 

TPnRo = 1

 

If STY = “TP1” Then
  If 宛名印刷設定.横書き2 = True Or 宛名印刷設定.横書き3 = True Then
    STY = “TP1y”
    TPnU = 1
    TPnL = 1
    TPnM = 1
  Else
    TPnU = 1
    TPnL = 1
    TPnM = 1
    TPnRo = 0.67
    縦書き
    GoTo step1
  End If

ElseIf STY = “TP2” Then
  TPnU = 2.5
  TPnL = 1
  TPnM = 1
  縦書き
  GoTo step1

ElseIf STY = “TP3” Then
  If 宛名印刷設定.横書き1 = True Then
    STY = “TP3y”
    TPnU = 2.5
    TPnL = 2
    TPnM = 1
  Else
    TPnU = 2.5
    TPnL = 2
    TPnM = 1
    縦書き
    GoTo step1
  End If

ElseIf STY = “TP4” Then
  TPnU = 7
  TPnL = 3
  TPnM = 1.2

ElseIf STY = “TP5” Then
  TPnU = 4.5
  TPnL = 1.7
  TPnM = 1.2

ElseIf STY = “TP6” Then
  TPnU = 2
  TPnL = 1
  TPnM = 1
  TPnRo = 1
  縦書き
  GoTo step1

ElseIf STY = “TP7” Then
  TPnU = 5.5
  TPnL = 8
  TPnM = 1.5
  TPnRo = 1.5

ElseIf STY = “TP8” Then
  TPnU = 5.5
  TPnL = 6
  TPnM = 1.5
  TPnRo = 1.5

ElseIf STY = “TP9” Then
  TPnU = 4.5
  TPnL = 5
  TPnM = 1.5
  TPnRo = 1.5

ElseIf STY = “TP10” Then
  TPnU = 3
  TPnL = 3.5
  TPnM = 1.5
  TPnRo = 1.5

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

 

横書きの場合の表示(「宛先」シートに表示)コード

続いて以下のコードがつながっていきます。

宛名項目のデータが表示されるセル番号は不変で、主には、その上隣りや左隣のセルのサイズを可変にすることで用紙サイズでの印字位置を調整しています。

With Worksheets(“宛先”)

  .Cells.ClearFormats
  .Cells.ClearContents
  .Cells.UseStandardHeight = True
  .Cells.UseStandardWidth = True
  .PageSetup.CenterHorizontally = False
  .PageSetup.TopMargin = Application.CentimetersToPoints(1.5)
  .PageSetup.LeftMargin = Application.CentimetersToPoints(0.5)
  .PageSetup.RightMargin = Application.CentimetersToPoints(0.5)
  .PageSetup.BottomMargin = Application.CentimetersToPoints(1.5)
  .Rows.RowHeight = 24 * TPnRo
  .Columns(1).ColumnWidth = 4.5 * TPnL
  .Columns(6).ColumnWidth = 4.5
  .Cells.Font.Size = 15 * TPnM
  .Cells.ShrinkToFit = True
  .Rows(1).RowHeight = 24 * TPnU

  .Range(“B2”).Value = aYB
  .Range(“B4”).Value = aK & aSK & aB
  .Range(“B5”).Value = aBM
  .Range(“B7”).Value = aSho
  .Range(“B7”).Font.Size = 17 * TPnM
  .Range(“B7”).Font.Bold = True
  .Range(“B8″).Value = aN & ” ” & aKei
  .Range(“B8”).Font.Size = 17 * TPnM
  .Range(“B8”).Font.Bold = True
  .Range(“B11”).Value = aRe

  .Range(“B4:E4”).MergeCells = True
  .Range(“B5:E5”).MergeCells = True
  .Range(“B7:E7”).MergeCells = True
  .Range(“B8:E8”).MergeCells = True
  .Range(“B11:E11”).MergeCells = True

End With

step1:

Worksheets(“宛先”).Columns.AutoFit
フォント設定

End Sub

 

縦書きの場合の表示コード

縦書きの場合は、別のプロシージャーとして記述し、「単独印刷」プロシージャーの中でこれを呼び出します。

Sub 縦書き()

 

With Worksheets(“宛先”)

  .Cells.ClearFormats
  .Cells.ClearContents
  .Cells.UseStandardHeight = True
  .Cells.UseStandardWidth = True
  .PageSetup.TopMargin = Application.CentimetersToPoints(1.5)
  .PageSetup.LeftMargin = Application.CentimetersToPoints(0.5)
  .PageSetup.RightMargin = Application.CentimetersToPoints(0.5)
  .PageSetup.BottomMargin = Application.CentimetersToPoints(1.5)
  .Rows.RowHeight = 24 * TPnRo
  .Columns(“A”).ColumnWidth = 3
  .Columns(“K”).ColumnWidth = 3
  .Cells.Font.Size = 15 * TPnM
  .Cells.ShrinkToFit = True
  .Cells.Orientation = xlVertical
  .Cells.VerticalAlignment = xlTop
  .Rows(1).RowHeight = 24 * TPnU
  .Range(“B:J”).ColumnWidth = 3
  .Range(“E2”).Value = aYB
  .Range(“J4”).Value = aK & aSK & aB
  .Range(“I12”).Value = aBM
  .Range(“G5”).Value = aSho
  .Range(“G5”).Font.Size = 17 * TPnM
  .Range(“G5”).Font.Bold = True
  .Range(“F5″).Value = aN & ” ” & aKei
  .Range(“F5”).Font.Size = 17 * TPnM
  .Range(“F5”).Font.Bold = True
  .Range(“B22”).Value = aRe
  .Range(“E2:H2”).MergeCells = True
  .Range(“J4:J21”).MergeCells = True
  .Range(“I12:I21”).MergeCells = True
  .Range(“G5:G21”).MergeCells = True
  .Range(“F5:F21”).MergeCells = True
  .Range(“B22:H22”).MergeCells = True
  .Range(“E2”).Orientation = xlHorizontal
  .Range(“B22:H22”).Orientation = xlHorizontal

End With

End Sub

 

「単独印刷PV」プロシージャー

最後にプリントプレビューのコードです。

Sub 単独印刷PV()

Worksheets(“宛先”).PrintPreview

End Sub

 

「単独印刷」マルチページ作成のまとめ

 

「単独印刷」プロシージャーの封筒タイプごとの変数の数値設定を調整すれば、より気に入った配置で宛名印刷をすることが出来ると思います。

少しずつ数値を変化させながら、プレビュー画面で確認して行くのがコツです。

 

普通によく使われているのはこの方法ではなく、

オソドックスにそれぞれの大きさの封筒のテンプレートを作成して、データを流し込んで印刷するという方法です。

この方法がより簡単だと思います。

ただそれは、封筒のサイズ分だけテンプレートを作らないといけませんし、そのテンプレートにデータを流し込むコードもそれぞれに作らないといけません。

 

今回は、これだけ多くの封筒の種類を扱っていますので、よりコンパクトに作ろうということで、テンプレートを設置しない方法を採用しました。

 

ここまで、印刷プレビューを確認しながら一件ずつ印刷するパターンを紹介しましたが、

次回は、印刷範囲を決めて連続で宛名印刷を行うパターンを紹介したいと思います。

 

短期間でエクセルVBAの独学習得を目指したいなら

 

エクセルVBAを独学する独習方法は、学習者それぞれ十人十色、多種多様と思われます。

けれども、

出来るだけ効率よく学習するためには、いくつかの大切なポイントがあります。

独学でもVBA習得の中級クラスに達するのはそんなに難しいことではありません。

先人が行った勉強方法をあなたがそのまま利用すればよいということです。

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

独習のための大切な7つのポイントは、上記記事にて解説しています。

重要ワード

独習によるVBA習得のキーワードは、

出来るだけ多くの実例に触れること!

です。

正直、VBAの学習について自分の周りの仕事(業務)からだけ実例を得るのでは効率良い習熟は無理です。

ハッキリ言って、

本当に短い期間でVBA習得を成功させたいなら、今使っている参考書が良書かどうかを判断し、新ツールとしてオンライン学習も取り入れて行うことが、

手っ取り早く短期間習得できるというのは間違いないでしょう。

 

 

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

 

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

 

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

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

 

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

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