
会社で記入用紙がなくなる度にフォーマットの書かれた原紙を印刷する作業がありました。1か月分用意してもすぐに別の用紙がなくなったり一度に5種類くらいの用紙がなくなることもあります。
その度に原始的な方法としては、用意されていた原紙をコピー機で印刷するという方法があるのですが一度に5枚となると全部まとめて30枚ずつ印刷すると1~5、1~5というようにまとまって印刷されてしまい並び替えなければならないので1枚ずつ30枚印刷が終わるまでコピーの近くでただ待つという非効率的な仕事をしていました。
前置きが長くなりそうなので簡単にやりたい事をまとめると
やりたい事
すべての原紙を1つのEXCELブックにシート分けし、必要なシートの枚数を入力して印刷ボタンを押すだけで複数のシートを必要枚数印刷したい
という内容。もう少し細かく書くと
・C列2~12が0以上ならその左隣のB列と同じシート名をC列の数だけ印刷したい
・印刷は白黒印刷を指定
AIの活用
今までエクセルでマクロを作ったことはあったが印刷まで操作するとなるとピンポイントでやりたい事を説明してくれる本やサイトが見つからず長年見送っていました。
ところが近年AIが普及し自分のやりたい事をピンポイントで教えてくれるようになったおかげで私のようなプログラミングができない人間でさえ「少しできます」みたいな顔をしてる人量産中・・
マクロ コード内容
Sub Print全体印刷()
Dim i As Integer
Dim copies As Integer
Dim originalPrinter As String
Dim targetPrinter As String
Dim sheetName As String
' 現在のプリンター名を保存
originalPrinter = Application.ActivePrinter
' 使用したいプリンター名を正確に指定(ポート名も含む)
targetPrinter = "ApeosPort-** ***** on ****:"
On Error GoTo CleanUp ' エラー時も元に戻すため
' プリンターを切り替え
Application.ActivePrinter = targetPrinter
For i = 2 To 12
copies = Range("C" & i).Value
sheetName = Range("B" & i).Value
If copies >= 1 Then
' シートが存在するか確認
If SheetExists(sheetName) Then
With Sheets(sheetName).PageSetup
.BlackAndWhite = True
End With
Sheets(sheetName).PrintOut copies:=copies, Collate:=True
' 1秒待機
Application.Wait Now + TimeValue("0:00:01")
' 白黒設定を元に戻す
Sheets(sheetName).PageSetup.BlackAndWhite = False
Else
MsgBox "シート '" & sheetName & "' が見つかりません。", vbExclamation
End If
End If
Next i
CleanUp:
' 元のプリンターに戻す
Application.ActivePrinter = originalPrinter
End Sub
' シートの存在チェック用関数
Function SheetExists(sName As String) As Boolean
Dim ws As Worksheet
On Error Resume Next
Set ws = ThisWorkbook.Sheets(sName)
SheetExists = Not ws Is Nothing
On Error GoTo 0
End Function
※この自動印刷に手を加えて更に原紙に日付やその日に書くことを付け加えたら2つめのシートで印刷がストップしてしまいました。どうやら処理のタイミングが早すぎたようなので1秒待機を付け加えることでうまくいきました。
マクロの記載方法
ここからは、更に初心者でどこにコピペしたらいいかわからない人向け
マクロを使うための準備
■マクロ有効ブック(拡張子*.xlsm)で保存する
通常のExcelファイル(*.xlsx)ではマクロが保存・実行できません。
■「コンテンツの有効化」ボタンを押してマクロを有効にする
ファイルを開いた際にセキュリティ警告が出たら「はい」を選択
■「開発」タブを表示する
「ファイル」→「オプション」→「リボンのユーザー設定」で「開発」にチェックを入れて有効
化します

■VBAエディター(VBE)を開く
Excelの「開発」タブから「Visual Basic」をクリック、またはキーボードのAlt + F11でVBAエディターを起動します。

■標準モジュールを挿入する
VBEの左側の「プロジェクトエクスプローラー」で対象のブックを右クリックし、「挿入」→「標準モジュール」を選択します。
これでコードを書くための新しいウィンドウが開きます。ここに先ほどのコードをコピペ

プリンターの確認方法
使用したいプリンターを通常の印刷設定で選択し、以下のコードをVBAで実行します
Sub プリンター名確認()
Debug.Print Application.ActivePrinter
End Sub
イミディエイトウィンドウに表示された文字列が現在のプリンター名です。
イミディエイトウィンドウ?
イミディエイトウィンドウとは、ExcelのVBA開発環境(VBE)にある「即時にコードを実行した
り、変数や式の値を確認したりできるウィンドウ」です。
VBE(Visual Basic Editor)で「表示」→「イミディエイトウィンドウ」

■マクロの実行
VBEのツールバーの「実行」ボタン(緑の三角)を押すか、Excelの「開発」タブの「マクロ」から実行したいマクロを選択して「実行」します

先程のプリンター名確認を実行すると・・下のイミディエイトウインドウにプリンター名とポートが表示されます
白黒印刷にしたい
エクセルVBAで白黒印刷にするには、対象シートのPageSetup.BlackAndWhiteプロパティをTrueに
設定します。これにより、カラー印刷プリンターでも白黒(モノクロ)印刷が可能です
Sub PrintBlackAndWhite()
With Worksheets("シート1").PageSetup
.BlackAndWhite = True ' 白黒印刷を指定
End With
Worksheets("請求書").PrintOut Copies:=1
End Sub
カラー印刷に戻す
Worksheets("シート1").PageSetup.BlackAndWhite = False
エラー発生時もプリンター設定を元に戻す
On Error GoTo CleanUp
感想 AIってすごい
原紙をコピーする
たったこれだけの作業ですが、このマクロで椅子から立ち上がることなく一瞬で複数のコピーを作成することができます。あとは、実際に印刷している間に他の仕事をしながら待つだけです。
これくらいのなら誰でもすぐに作成できるAIって凄いですね。これなら今まで何度も挫折したプログラミングも素晴らしいAI先生のおかげで独学でも学べそう。
パソコン好きな人には仕事中に遊んでいるのと同じ
私はパソコンが好きですが、時々、その楽しさが仕事中に遊んでいるように感じてしまうことがあります。自分と似たような人を周りで見ていると、自分の滑稽さに気づいてしまいます。
PC作業の効率化は、実際にその仕事をしている人が取り組めば本当に役立つものが生まれますが、逆にプログラマーのようにPC作業が本業でない人が没頭してしまうと、それはもはや仕事ではなく、単なる趣味の領域に入っていることに自分でよく気づきます。
やはり、PC関連の取り組みは必要最低限にとどめておくのが現実的な選択だと思っています。
コメント