EXCEL VBAで一括印刷プログラムシート「かんたん一括印刷クン」を作る(初心者向け)
一括印刷プログラムシートとは?
指定のセルに値や文字を代入すると関数が組まれた資料、レポート等を一気に印刷してくれる一括印刷機能のマクロです。
エクセルシートが何百枚でも数クリックで印刷可能に!
私は「かんたん一括印刷クン」
と名付けています。
作成した背景
店舗指導員時代、毎週レポート10数枚を店舗毎に約20名が2台のプリンターで印刷する必要がありました。
そして毎回起こるコピー機渋滞と書類の紛失。
どげんかせんといかんということで週末ベローチェに籠もり、この一括印刷プログラムシートを作成。
作業を短縮化、印刷担当者に作業を集約し、週一のMTG後すぐに巡回に行ける状態にしました。
(資料のDL含め30分/人×20人とすると週600分→10時間の時間創出!)
まとまったものがなかったのと作成時は苦労したので記事を作成しました。
私と同じ業務効率化が趣味の方、ぜひご活用ください!
使用イメージ
一括印刷プログラムシートの作成手順
ここからは具体的な作成手順を記載します。
ユーザーフォームを作成するのは少し手間ですが、コードは基本コピペで大丈夫です!
コードは必要に応じでアレンジしてください。
【作成手順】
1. Excelファイルを作成(拡張子は*.xlsm)
2. 一括印刷ユーザーフォームの作成
3. 一括印刷機能起動ボタンの作成
(尚、MacのExcelではユーザーフォームが使えないと思うのでWindowsでお願いします…)
1. EXCELファイルを作成
マクロ有効ファイルの拡張子(*.xlsm)で作成します。
ファイル名はなんでも大丈夫です! Ex)一括印刷クンプログラムシート.xlsm
2. 一括印刷ユーザーフォームの作成
苦手な方もいらっしゃると思いますが、今後楽をするためにトライしてみましょう!
開発タブ→Visual Basic→VBA project(一括印刷クンプログラムシート.xlsm)→
右クリック→insert(挿入)→UserFormを選択
そうするとユーザーフォームの雛形ができたと思います。
UserFormの名前は一括印刷ユーザーフォーム
としてください。
ここで、ツールボックスを使用してユーザーフォームを整えます。
以下の画像の様にユーザーフォームを作成します。必要なのは赤枠の部分だけですのでほかは省いててOK!
逆にListBox1
、CommandButton1
、CommandButton2
は使用するので必ず設置してください。
フォームをダブルクリックするとコードが表示されます。
そこに以下のコードを貼り付けてください。
Private Sub CommandButton1_Click()
Dim buttom_cell As Long
'■ポップアップ画面非表示・画面描写中止
Application.DisplayAlerts = False
Application.ScreenUpdating = False
'■入力場所に空欄があった場合、それを破棄する
Range("A:A").Select
On Error Resume Next 'エラー回避
Selection.SpecialCells(xlCellTypeBlanks).Delete Shift:=xlUp '空欄削除
Range("A1").Select
buttom_cell = Cells(Rows.Count, 1).End(xlUp).row 'A列の最も下のセルの行の場所を取得
On Error GoTo error_nodata 'A列に何も入力されていなかった場合、myerrorへ
'■ポップアップ画面非表示・画面描写中止
Application.DisplayAlerts = True
Application.ScreenUpdating = True
ListBox1.List = Range(Cells(1, 1), Cells(buttom_cell, 1)).Value2
MsgBox "登録件数は" & ListBox1.ListCount & "件です。" & vbCrLf & vbCrLf _
& "印刷するシートの代入先のセルを選択し、" & vbCrLf & "「印刷スタート!」のボタンを押してください。"
Exit Sub
error_nodata: MsgBox "A列に何も記載がないか、1つのみとなっています。" & vbCrLf & vbCrLf & "A1セルから貼り付け/入力してください"
End Sub
Private Sub CommandButton2_Click()
Dim msg0 As Integer
Dim msg1 As Integer
Dim i As Long
Dim setting_printer As Boolean
Dim S As String
S = ActiveCell.Address
If ListBox1.ListCount = 0 Then
MsgBox "リストを読み込んでください。"
Else
msg0 = MsgBox("印刷するレポート(シート)は" & vbCrLf & "ファイル名:「" & ActiveWorkbook.Name & "」" _
& vbCrLf & "シート名:「" & ActiveSheet.Name & "」、" & vbCrLf & "リストの代入先は「" & S & "」" & vbCrLf & "でよろしいですか?", vbYesNo + vbQuestion, "確認")
If msg0 = vbYes Then
setting_printer = Application.Dialogs(xlDialogPrinterSetup).Show '印刷設定画面を開く
'■印刷設定がキャンセルされた場合
If setting_printer = False Then
MsgBox "印刷がキャンセルされました"
Exit Sub
End If
For i = 0 To 2
ActiveCell.Value = ListBox1.List(i)
Range(S) = Replace(Range(S), "", "") '数字が更新されない場合に対応。
Range(S).Activate '指定のセルをアクティブにして、シートのイベントを発生させる。
ActiveWindow.SelectedSheets.PrintOut 'シートを印刷(印刷ボタンを押す)
On Error GoTo myerror1
Next
myerror1:
msg1 = MsgBox("正しく印刷されていますか?", vbYesNo + vbQuestion, "確認")
If msg1 = vbYes Then
For i = 3 To ListBox1.ListCount - 1
ActiveCell.Value = ListBox1.List(i)
Range(S) = Replace(Range(S), "", "")
Range(S).Activate '指定のセルをアクティブにして、シートのイベントを発生させる。
ActiveWindow.SelectedSheets.PrintOut 'シートを印刷(印刷ボタンを押す)
Next
MsgBox "印刷が完了しました!"
Else
MsgBox "もう一度設定しなおしてください。"
End If
Else
MsgBox "もう一度セルを選択して下さい。"
End If
End If
Exit Sub
myerror2:
MsgBox "「印刷リスト」シートはこのファイルにありません。必要に応じて削除ください。"
End Sub
以上でユーザーフォームの設定は終わりです!
3. 一括印刷機能起動ボタンの作成
先程ユーザーフォームを作った方法と同じやり方でモジュールを作成します。
モジュールをダブルクリックし、コード編集画面を開いて下記コードをコピペします。
Sub 一括印刷クン起動()
Dim ws As Worksheet, flag As Boolean
一括印刷ユーザーフォーム.Show vbModeless
For Each ws In Worksheets
If ws.Name = "印刷リスト" Then flag = True
Next ws
If flag = True Then
Sheets("印刷リスト").Visible = True
Sheets("印刷リスト").Activate
Columns("A:A").Select
Range("A1").Select
MsgBox "「印刷リスト」シートに" & vbCrLf & "必要なリストを貼り付けてください。"
Exit Sub
Else
ActiveWorkbook.Sheets.Add
On Error Resume Next
ActiveSheet.Name = "印刷リスト"
Columns("A:A").Select
Range("A1").Interior.Color = 65535
Range("B1") = "←ここから値で貼付け!"
Range("A1").Select
MsgBox "「印刷リスト」シートに" & vbCrLf & "必要なリストを貼り付けてください。"
End If
End Sub
次にシート上に起動するためのボタンを作成します。シート名はそのままSheet1でも何でもかまいません。
シートに戻り、開発タブ→Insert(挿入)→ボタンをクリック
以下の図のようにボタンを設置し、マクロを割り当てます。
以上で完成です!
起動ボタンを押して作成したユーザーフォームが出てくれば完成です!
その他
- プログラムシートを開いたまま、別のファイルを印刷できます。
- 印刷範囲の設定は別途実施ください。
- 3枚印刷後、確認画面が現れます。「はい」を選択すると残りが印刷されます。
- リスト読み込み時に空欄があった場合は消去されます。重複の削除は実施されません。
- 「印刷リスト」シートは自動生成されますので削除しても大丈夫です。
注意
無限に印刷できますので印刷のしすぎにご注意ください。
人件費は下がりますが、コピー代は上がるかと…w
最初に印刷する場合はWifiをoffにするなどしてコピー機との連動をストップしてもいいかもしれません。
読んでもできなかったり不具合があった場合はコメント欄へお願いします!
Author And Source
この問題について(EXCEL VBAで一括印刷プログラムシート「かんたん一括印刷クン」を作る(初心者向け)), 我々は、より多くの情報をここで見つけました https://qiita.com/takachan_coding/items/2acee1271556b7671eb4著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .