作成したのし書きの印刷と別シートに保管するVBA

noshihozoneyecatch

作成したのし書きの印刷を行うVBAと別シートに保管するエクセルVBAコードを解説します。
また、起動については、設定シート上のコマンドボタンから行います。

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

のし書き作成エクセルで、のし紙サイズ別に印刷プレビューを表示し印刷を行います。

また、作成したのし書きは、別シートに名前を付けて保管、再利用できるようにします。

のし書きの印刷と別シートに保管するVBAを作成

noshihozonp001

のし書きサイズ別「印刷プレビュー表示」を行うVBA

のし書きの印刷プレビューを実行するには、「設定」シートに設置したコマンドボタンから行います。

フォームコントロールをシートに設置 のし書き作成エクセル

にて解説しています。

'E38セルにコマンドボタン設置
            With .Range("E38:F39")
                With ws.Buttons.Add(.Left, .Top, _
                            .Width, .Height)
                    .Name = "のし印刷"
                    .OnAction = "熨斗テンプレベースB"
                    With .Characters
                    .Text = "のしを印刷する"
                        With .Font
                            .Size = 15
                            .Bold = True
                            .ColorIndex = 5
                        End With
                    End With
                End With
            End With

前回の説明の続きで、のし紙別に「のし書きテンプレート」を完成させるところから解説します。

のし紙のサイズは選択肢として、

  • A5サイズ
  • A4サイズ
  • B5サイズ
  • B4サイズ
  • 熨斗封筒

を準備しています。

記述はModule1で行います。

パブリック変数として出てくる「RaとCa」はセル位置の起点、「RbとCb」はセル位置の終点を表しています。

このセルの視点・終点の間に贈り主名が表示されることになります。なおこの変数は、呼び出す「Module1.複数併記スペース」部品プロシージャーで使用されます。(先回説明)

noshitempeyecatch 設定項目の選択値を整理してVBAコードに反映させる

A5サイズ印刷プレビューのVBA

用紙サイズは、「xlPaperA5」で指定することが出来ます。

VBA
Sub A5サイズ版()
        ThisWorkbook.Activate
        With Worksheets("のし書きBase")
'A5サイズにサイズセット
            .PageSetup.PrintArea = "A1:AG31"
            .PageSetup.PaperSize = xlPaperA5
'送り主表記セル位置を変数に代入
            Ra = 19
            Ca = 16
            Rb = 31
            Cb = 19
            With .Range("P1:S12")
                .Merge
                .Value = KNa
                .Font.Size = FSia
                .ShrinkToFit = True
            End With
            Call Module1.複数併記スペース
            Call Module1.贈り主縦位置
            Call Module1.贈り主文字の制御
'プリントプレビューを表示します
            .PrintPreview
        End With
End Sub
vbacalleyecatch 部品化プロシージャーでCallステートメントは必須

A4サイズ印刷プレビューのVBA

用紙サイズは、「xlPaperA4」で指定することが出来ます。

VBA
Sub A4サイズ版()
        ThisWorkbook.Activate
        With Worksheets("のし書きBase")
'A4サイズにサイズセット
            .PageSetup.PrintArea = "A1:AX46"
            .PageSetup.PaperSize = xlPaperA4
'送り主表記セル位置を変数に代入
            Ra = 28
            Ca = 24
            Rb = 45
            Cb = 27
            With .Range("X2:AA19")
                .Merge
                .Value = KNa
                .Font.Size = FSia
                .ShrinkToFit = True
            End With
            Call Module1.複数併記スペース
            Call Module1.贈り主縦位置
            Call Module1.贈り主文字の制御
'プリントプレビューを表示します
            .PrintPreview
        End With
End Sub

B5サイズ印刷プレビューのVBA

用紙サイズは、「xlPaperB5」で指定することが出来ます。

VBA
Sub B5サイズ版()
        ThisWorkbook.Activate
        With Worksheets("のし書きBase")
'B5サイズにサイズセット
            .PageSetup.PrintArea = "A1:AP39"
            .PageSetup.PaperSize = xlPaperB5
'送り主表記セル位置を変数に代入
            Ra = 25
            Ca = 20
            Rb = 38
            Cb = 23
            With .Range("T2:W16")
                .Merge
                .Value = KNa
                .Font.Size = FSia
                .ShrinkToFit = True
            End With
            Call Module1.複数併記スペース
            Call Module1.贈り主縦位置
            Call Module1.贈り主文字の制御
'プリントプレビューを表示します
            .PrintPreview
        End With
End Sub

B4サイズ印刷プレビューのVBA

用紙サイズは、「xlPaperB4」で指定することが出来ます。

VBA
Sub B4サイズ版()
        ThisWorkbook.Activate
        With Worksheets("のし書きBase")
'B4サイズにサイズセット
            .PageSetup.PrintArea = "A1:BK57"
            .PageSetup.PaperSize = xlPaperB4
'送り主表記セル位置を変数に代入
            Ra = 35
            Ca = 30
            Rb = 56
            Cb = 33
            With .Range("AC2:AH22")
                .Merge
                .Value = KNa
                .Font.Size = FSia
                .ShrinkToFit = True
            End With
            Call Module1.複数併記スペース
            Call Module1.贈り主縦位置
            Call Module1.贈り主文字の制御
'プリントプレビューを表示します
            .PrintPreview
        End With
End Sub

熨斗封筒サイズ印刷プレビューのVBA

用紙サイズは、熨斗封筒(90x175mm)の設定です。

PaperSize = 267」の267番は、設定するプリンター環境によって違います。各自ユーザー設定で指定してください。

VBA
Sub 封筒版()
        ThisWorkbook.Activate
        With Worksheets("のし書きBase")
'熨斗封筒サイズにサイズセット
            .PageSetup.PrintArea = "A1:BK57"
            .PageSetup.PaperSize = 267
            .PageSetup.Orientation = xlPortrait
'送り主表記セル位置を変数に代入
            Ra = 24
            Ca = 4
            Rb = 38
            Cb = 6
            With .Range("D2:F15")
                .Merge
                .Value = KNa
                .Font.Size = FSia
                .ShrinkToFit = True
            End With
            Call Module1.複数併記スペース
            Call Module1.贈り主縦位置
            Call Module1.贈り主文字の制御
'プリントプレビューを表示します
            .PrintPreview
        End With
End Sub

特殊なサイズののし紙を使用する場合

上記の規格サイズののし紙でない場合は、使用しているプリンターでユーザー用紙設定を行ってください。

登録した用紙サイズをVBAに反映させるためには、

.PageSetup.PaperSize = 267」の「267」の番号を変更します。

この番号は、使用しているプリンター環境での固有番号になります。

番号を調べるためには、プリンターへのユーザー用紙の登録後、以下のVBAを実行します。

VBA
Sub 設定用定数値()
    Worksheets("のし書きBase").Select
    MsgBox "用紙設定 定数値は 「 " & Worksheets("のし書きBase") _
        .PageSetup.PaperSize & " 」 です。", vbOKOnly, "のし書き作成"
End Sub

入手した番号をVBAコードに入力します。

また「RaとCa」のセル位置の起点、「RbとCb」のセル位置の終点の修正も必要です。

作成したのし書きを別シートに保管するVBA

のし書きの別シート保管を実行するには、「設定」シートに設置したコマンドボタンから行います。

フォームコントロールをシートに設置 のし書き作成エクセル

にて解説しています。

'E42セルにコマンドボタン設置
            With .Range("E41:F42")
                With ws.Buttons.Add(.Left, .Top, _
                            .Width, .Height)
                    .Name = "のし保存"
                    .OnAction = "熨斗シート保存"
                    With .Characters
                    .Text = "のしを保存する"
                        With .Font
                            .Size = 15
                            .Bold = True
                            .ColorIndex = 5
                        End With
                    End With
                End With
            End With
        End With

作成したのし書きは、一度きりの使い道のみの場合だけでなく、再利用したい時、定期的に使いたい場合もあるかと思います。

毎回同じものを作ってもいいですが、一度作ったものを保管しておくことが出来ればこれに越したことはありません。

コードはModule3に記述しています。

VBA
Option Explicit

Sub 熨斗シート保存()
    Dim ws As Worksheet
    Dim NewName As String
    Dim Flg As Boolean
        Flg = False
'インプットボックスから保管用のシート名を入力します
        NewName = InputBox("保管用ののし書きのシート名を決めてください", _
                    Title:="のし書き作成")
        If NewName = "" Then
            MsgBox "シートの保管を中止します。", vbExclamation, _
                        "のし書き作成"
            Exit Sub
        End If
 '入力した名前がすでに存在するかどうかを調べます
        For Each ws In Worksheets
            If ws.Name = NewName Then
                Flg = True
                Exit For
            End If
        Next
'すでに名前が存在する場合は終了します
        If Flg = True Then
            MsgBox "同名のシートが既にあります。" & vbCrLf & _
                "別のシート名にしてください。終了します。", _
                vbExclamation, "のし書き作成"
            Exit Sub
        Else
'同名のシートがない場合、シートタブの右端にテンプレートのコピーを作成
            Worksheets("のし書きBase").Copy _
                        after:=Worksheets(Sheets.Count)
'コピーしたシートを入力したシート名にします
            Set ws = ActiveSheet
            ws.Name = NewName
        End If
End Sub

インプットボックスに保管用のシート名を指定します。

コピーした印刷テンプレートシートをそのシート名で保存します。

同名のシート名があった場合は、処理を中止し終了する設定にします。

保存用のシート名を入力するのは、「InputBox」を利用します。

vbainputboxeyecatch 2つのインプットボックス。関数とメソッド、特徴を生かした使い分け sheetexistanceeyecatch シートの存在を確認する2種類のコードと実務での例題 vbadoloopeyecatch VBA 回数不定のループ処理はDo LoopとFor Each

シートのコピーについては、こちら↓の記事が参考にできます。

VBACopyeyecatch シートのコピーを最速に理解!VBAコードで異なる結果

まとめ

noshihozonp002

のし書き作成で、印刷プレビューと別名で保管する方法を説明しました。

印刷するときは、印刷プレビューで表示されたものを最終確認して、修正する場合は直接シート上で変更することも出来ます。

また、別名保管すれば、一度作成したのし書きを保管して再利用出来るようになります。

その点でも、最初から作り直さないので、「グッと業務効率が上がる」のではないでしょうか。

ただ、保存シートの数が多くなって来た時には、

リサイクルで使いたい保存シートを探すのが大変になってくると思います。

その時の解決策として、

存在するシート名の一覧表(リスト)を新たなリストに表示させ、

そのリスト中のシート名を指定することで、

「その指定したシートを一発で表示する」という方法で解決できます。

そのためのエクセルVBAコードを組み立てる必要がありますが、参考になる記事をあげておきます。

vbasheetsorteyecatch エクセルシートの並び順が思い通り!シート名一覧で自由自在 シート名一覧表作成マクロをブック登録して色んなエクセルで使う vbatoclisteyecatch エクセル多用途もくじシートを自動作成するVBA

エクセルVBAを独習するのに参考書は欠かせません。 参考書選びは自分に合った「相棒」にできるものを選んでいきたいです。

vbastudyeyecatch2 エクセルVBAの独習でおすすめ参考書を7冊選ぶ。良書との出会いは大切です

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

エクセルVBA最速理解で必要な知識を集めよう!

エクセルVBA業務ツールで日常の業務改善を行いましょう。

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