VBAで自動印刷 ~Excel10等分のNo.カード~

Excelで10等分したNo.カード等を印刷する際に、
1、2ページ分くらいなら、良いのですが、
例えばNo.1~200など、大量に印刷するとなると、手動では大変ですよね?

そこで今回は、好きな「No.※※」から任意のNo.までを指定して、
自動でNo.を「入力&印刷」をするVBAコードを作成しました。
 

広告

「好きなNo.」~「好きなNo.」までを全て自動で印刷

今回の設定は以下になります。

・用紙サイズ:【A4】
・等分   :10等分

例えば、
「1~17」迄の番号を印刷したい

この場合には、
1枚目: 1~10
2枚目:11~17
このように印刷されるコードです。

宜しければ、試しに

1.ExcelファイルをDownLoad
2.ファイルを展開し、下部のサンプルコードをVBEへコピー貼付け
3.(忘れないうちに)印刷するプリンターを設定してください。
4.シート名:『枚数』に任意のNo.を入力し、VBA実行(印刷)

を試してみてください。

■ファイルは【Excelバージョン2016】で作成しております。
 お使いのPCで、寸法が出ていれば良いのですが宜しければご参考に
■もしもうまく寸法が出ていなければ、以下の記事に
 Excel10等分の方法をまとめましたので、宜しければ。

 

VBA_10等分_シール自動印刷_2
ファイルはシート名「印刷」と「枚数」に分かれており
シート「印刷」はセル背景を真っ白に塗りつぶしてあります。
(【原型:左画像】  【UPしてあるファイル:右画像】)
VBA_10等分_シール自動印刷_1
「枚数」のシートに任意の数字を入力します。
VBA_10等分_シール自動印刷_6

↑にUpLoadしているExcelファイルは
A4サイズを10等分したものになります。(↑の画像をご参照ください)
今回はこれを活用してのサンプルコードをご紹介します。

 

★サンプルコード

Sub Print_Data()

'画面の更新停止
Application.ScreenUpdating = False

Dim StartNum, EndNum, i, j, k, cnt1, cnt2, cnt3 As Long
Dim A, B As String
Dim mySht1, mySht2 As Worksheet
Dim myRng As Range
    
  A = "印刷"
  B = "枚数"
 
  Set mySht1 = ThisWorkbook.Worksheets(A)
  Set mySht2 = ThisWorkbook.Worksheets(B)
  Set myRng = mySht1.Range("A1")
 
  
'/////要記入箇所に記入がされていれば
If mySht2.Range("B2") <> "" And mySht2.Range("D2") <> "" Then
 
  StartNum = mySht2.Range("B2")   '始まりのNo.
  EndNum = mySht2.Range("D2")   '終わりのNo.
  i = EndNum - StartNum + 1     '印刷するべきNo.の数
  cnt1 = i \ 10                 '10等分の場合、何ページあるか
  cnt2 = i Mod 10               '10等分の場合、最後のページはNo.いくつまでか

  '////もしも印刷が1ページ以上のボリュームならば
  If cnt1 >= 1 Then
    mySht1.Activate

    '///ページ数(cnt1の商)だけ印刷を繰り返す
    For j = 1 To cnt1
      For k = 1 To 5
        myRng.Offset(2 * (k - 1), 0) = StartNum + (k - 1) + 10 * (j - 1)
      Next k
      For k = 6 To 10
        myRng.Offset(2 * (k - 6), 2) = StartNum + (k - 1) + 10 * (j - 1)
      Next k
        mySht1.PrintOut
    Next j
    'ページ数(cnt1の商)だけ印刷を繰り返す///
   
   
    '///最後のページ、端数が「0」でなければ
    If cnt2 <> 0 Then
      cnt3 = StartNum + 10 * cnt1
      mySht1.Activate
      mySht1.Cells.ClearContents
   
      '//【最後のページ、端数を印刷】
 
        '/端数が「5」以下の場合
        If cnt2 <= 5 Then
          For k = 1 To cnt2
            myRng.Offset(2 * (k - 1), 0) = cnt3 + (k - 1)
          Next k
            mySht1.PrintOut
        End If
        '端数が「5」以下の場合/
   
        '/端数が「6」以上の場合
        If cnt2 >= 6 Then
          For k = 1 To 5
            myRng.Offset(2 * (k - 1), 0) = cnt3 + (k - 1)
          Next k
          For k = 6 To cnt2
            myRng.Offset(2 * (k - 6), 2) = cnt3 + (k - 1)
          Next k
            mySht1.PrintOut
        End If
        '端数が「6」以上の場合/
  
      '【最後のページ、端数を印刷】//
    
    End If
    '最後のページ、端数が「0」でなければ///
  
  End If
  'もしも印刷が1ページ以上のボリュームならば////

  '////もしも印刷が1ページ未満のボリュームならば
  If cnt1 = 0 Then
    mySht1.Activate
   
    '///端数が「5」以下の場合
    If cnt2 <= 5 Then
      For k = 1 To cnt2
        myRng.Offset(2 * (k - 1), 0) = StartNum + (k - 1)
      Next k
        mySht1.PrintOut
     End If
    '端数が「5」以下の場合///
    '///端数が「6」以上の場合
    If cnt2 >= 6 Then
      For k = 1 To 5
        myRng.Offset(2 * (k - 1), 0) = StartNum + (k - 1)
      Next k
      For k = 6 To cnt2
        myRng.Offset(2 * (k - 6), 2) = StartNum + (k - 1)
      Next k
        mySht1.PrintOut
    End If
    '端数が「6」以上の場合///
 
  End If
  'もしも印刷が1ページ未満のボリュームならば////

  '内容をクリア(初期化)
    mySht1.Activate
    mySht1.Cells.ClearContents

End If
'要記入箇所に記入がされていれば/////

  mySht2.Activate

'画面の更新再開
Application.ScreenUpdating = True

End Sub

 

上記コードは注記と共に記載してありますので、
「ここの部分ではどんな処理がされているのか?」が分かるようになっている
・・・と思いたいです(笑)
少々長いですが、このコードをVBEにコピー&貼付けして
任意のNo.を「シート名:枚数」のセル【B2】と【D2】に記入して
コードを実行して頂ければ、自動で印刷されます。

一気に大量に印刷するとミスした場合に怖いので、
出来れば少ない枚数でテストしてもらう事をオススメいたします。

 

【おまけ】サンプルコード

下記のサンプルコードは

数字の前に任意の文字列を挿入する事が出来るコード

です。具体的には以下のように
数字の前に「No.」を添える事が出来ます。

「1」→「No.1

VBA_10等分_シール自動印刷_5

下記のサンプルコードでは数字の前に文字列を挿入しておりますが、
数字の後方に文字列を挿入する事ももちろん可能です。
 ※例えば「1」→「1巻」など

挿入する文字列を変更するには

C = “No. “ → C = “[好きな文字列]”

に変更してください。
 

数字の後方に文字列を挿入するには

「C &」で始まっている箇所を全て「 & C」で終わるようにする

例:
「C & cnt3 + (k – 1)」→「cnt3 + (k – 1) & C」とする

 

Sub Print_Data2()

'画面の更新停止
Application.ScreenUpdating = False

Dim StartNum, EndNum, i, j, k, cnt1, cnt2, cnt3 As Long
Dim A, B, C As String
Dim mySht1, mySht2 As Worksheet
Dim myRng As Range
    
  A = "印刷"
  B = "枚数"
  C = "No. "
 
  Set mySht1 = ThisWorkbook.Worksheets(A)
  Set mySht2 = ThisWorkbook.Worksheets(B)
  Set myRng = mySht1.Range("A1")
 
 
'/////要記入箇所に記入がされていれば
If mySht2.Range("B2") <> "" And mySht2.Range("D2") <> "" Then
 
  StartNum = mySht2.Range("B2")   '始まりのNo.
  EndNum = mySht2.Range("D2")   '終わりのNo.
  i = EndNum - StartNum + 1     '印刷するべきNo.の数
  cnt1 = i \ 10                 '10等分の場合、何ページあるか
  cnt2 = i Mod 10               '10等分の場合、最後のページはNo.いくつまでか

  '////もしも印刷が1ページ以上のボリュームならば
  If cnt1 >= 1 Then
    mySht1.Activate

    '///ページ数(cnt1の商)だけ印刷を繰り返す
    For j = 1 To cnt1
      For k = 1 To 5
        myRng.Offset(2 * (k - 1), 0) = C & StartNum + (k - 1) + 10 * (j - 1)
      Next k
      For k = 6 To 10
        myRng.Offset(2 * (k - 6), 2) = C & StartNum + (k - 1) + 10 * (j - 1)
      Next k
        mySht1.PrintOut
    Next j
    'ページ数(cnt1の商)だけ印刷を繰り返す///
   
   
    '///最後のページ、端数が「0」でなければ
    If cnt2 <> 0 Then
      cnt3 = StartNum + 10 * cnt1
      mySht1.Activate
      mySht1.Cells.ClearContents
   
      '//【最後のページ、端数を印刷】
 
        '/端数が「5」以下の場合
        If cnt2 <= 5 Then
          For k = 1 To cnt2
            myRng.Offset(2 * (k - 1), 0) = C & cnt3 + (k - 1)
          Next k
            mySht1.PrintOut
        End If
        '端数が「5」以下の場合/
   
        '/端数が「6」以上の場合
        If cnt2 >= 6 Then
          For k = 1 To 5
            myRng.Offset(2 * (k - 1), 0) = C & cnt3 + (k - 1)
          Next k
          For k = 6 To cnt2
            myRng.Offset(2 * (k - 6), 2) = C & cnt3 + (k - 1)
          Next k
            mySht1.PrintOut
        End If
        '端数が「6」以上の場合/
  
      '【最後のページ、端数を印刷】//
    
    End If
    '最後のページ、端数が「0」でなければ///
  
  End If
  'もしも印刷が1ページ以上のボリュームならば////

  '////もしも印刷が1ページ未満のボリュームならば
  If cnt1 = 0 Then
    mySht1.Activate
   
    '///端数が「5」以下の場合
    If cnt2 <= 5 Then
      For k = 1 To cnt2
        myRng.Offset(2 * (k - 1), 0) = C & StartNum + (k - 1)
      Next k
        mySht1.PrintOut
     End If
    '端数が「5」以下の場合///
    '///端数が「6」以上の場合
    If cnt2 >= 6 Then
      For k = 1 To 5
        myRng.Offset(2 * (k - 1), 0) = C & StartNum + (k - 1)
      Next k
      For k = 6 To cnt2
        myRng.Offset(2 * (k - 6), 2) = C & StartNum + (k - 1)
      Next k
        mySht1.PrintOut
    End If
    '端数が「6」以上の場合///
 
  End If
  'もしも印刷が1ページ未満のボリュームならば////

  '内容をクリア(初期化)
    mySht1.Activate
    mySht1.Cells.ClearContents

End If
'要記入箇所に記入がされていれば/////

  mySht2.Activate

'画面の更新再開
Application.ScreenUpdating = True

End Sub

 

以上になります。
日常業務のお役に立てれば幸いです。

広告