LoginSignup
3
6

More than 3 years have passed since last update.

ExcelからExcelへ差し込み印刷 Excelだけで差し込み印刷

Last updated at Posted at 2020-06-01

Excelだけで「差し込み印刷」できるマクロを作ります

仕事で、Word+Excelの差し込み印刷を聞かれたのですが、手順が多すぎて、なんとかしたいなと思い、作成した備忘録です。
ついでに、年賀はがきの表書きを作ってみました。

検索すると色々見つかります

https://mokomokomomoko.com/excel_macro_print/
様式だけお借りします。

これが良かった

http://engi-seishi.la.coocan.jp/excel_sample.htm#etc
の Excel宛名シール印刷(ヨコ3面タテ7面=21面タックシール用のみ)

これを改造してみます。(作者様、無断でごめんなさい)

印刷 する/しない 列を追加、敬称も追加
宛名2020060100.png
printSheetをマクロで直接貼り付けしていたのを、このシートへ貼り付けに変更
このシートのタイトル列と行数分だけコピーして、印刷動作へ、これをdataシートの最後まで繰り返す
例えば、1シート4枚なら、4行にして、printSheetの様式変更に対応
宛名2020060101.png
印刷用シート、printDataシートにたいして式 例:=PrintData!E2 でデータを転記
なので、同じものを4件印刷する場合は、printSheetで対応可能
宛名2020060102.png
マクロの中で使っている名前の定義はこの2件
宛名2020060103.png

マクロ

備忘録です。これで全部

Module1
Option Explicit

Sub 宛名シール印刷()
    Dim cHead As Integer    ' printDataテーブルの列数
    Dim cRows As Integer    ' printDataテーブルの行数
    cHead = Worksheets("printData").Range("TBL_printData").ListObject.HeaderRowRange.Count
    cRows = Worksheets("printData").Range("TBL_printData").ListObject.ListRows.Count

    Dim iData As Long       ' data処理行
    Dim iPData As Long      ' printData処理行
    Dim jPData As Long      ' printData処理列
    Dim rngData As Range    ' dataのrange
    Dim rngPData As Range   ' printDataのrange

    printDataClear          'sheet[printData]の名前[TBL_printData]範囲をクリア

    iData = 0
    iPData = 0
    Set rngData = Worksheets("data").Range("A5")       '処理開始位置
    Set rngPData = Worksheets("printData").Range("B1") '処理開始位置

    Do Until rngData.Offset(iData, 0).Value = ""
        If rngData.Offset(iData, 0).Value = "する" Then
            iPData = iPData + 1
            For jPData = 1 To cHead
                rngPData.Offset(iPData, jPData - 1) = rngData.Offset(iData, jPData - 1)
            Next
            If iPData > (cRows - 1) Then
                実印刷
                printDataClear   'sheet[printData]の名前[TBL_printData]範囲をクリア
                iPData = 0
                Worksheets("data").Select
            End If
        End If
        iData = iData + 1
    Loop
    If iPData > 0 Then 実印刷
End Sub

' 宛先シール実印刷
Sub 実印刷()
    Sheets("printSheet").Select
    With ActiveSheet.PageSetup
        .LeftMargin = Application.InchesToPoints(0#)
        .RightMargin = Application.InchesToPoints(0)
        .TopMargin = Application.InchesToPoints(0)
        .BottomMargin = Application.InchesToPoints(0)
        .HeaderMargin = Application.InchesToPoints(0)
        .FooterMargin = Application.InchesToPoints(0)
        .Orientation = xlPortrait
        .PaperSize = xlPaperA4
        .FirstPageNumber = xlAutomatic
        .Zoom = 98
    End With

    Range("Print_Area").Select

    Select Case MsgBox(prompt:="印刷を続けますか?" & vbCrLf & "いいえ:プレビュー", Buttons:=vbYesNoCancel)
        Case vbYes
            ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True
        Case vbNo
            ActiveWindow.SelectedSheets.PrintPreview
        Case Else
            Worksheets("data").Select
            End
    End Select
    Worksheets("data").Select
End Sub

'sheet[printData]の名前[printData]範囲をクリア
Sub printDataClear()
    Worksheets("printData").Range("TBL_printData").ClearContents
End Sub

マクロそのままで

1ページ1枚様式もしてみました。
printDataシートとprintSheetシートの変更だけです。
宛名2020060104.png
宛名2020060105.png

物忘れ防止 宛名シールの印刷_21面シール改.xlsm 差し込み印刷.xlsm
https://github.com/sugita0301/douzo

年賀状印刷

住所録のテンプレートはここからいただきました。
https://www.microsoft.com/ja-jp/office/pipc/nengajo/05.aspx
年賀はがきのイメージは、スキャナで取り込むまたは、Wrodのウイザードでも入手できます。

こんな感じになります。
年賀2020060701.png

3
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
6