【実績あり】【VBA】フォルダ内のエクセルファイルをまとめて一括印刷マクロ【EXCEL】

タイトル画像(一括印刷マクロ) IT
熱血営業<br>エンジニア
熱血営業
エンジニア

フォルダの中にあるEXCELをまとめて印刷できないのか!?
いちいちファイルごとに印刷はメンドクサすぎる!!!

お知らせ

本業でこのプログラムをメンバーに渡したところ、1回の印刷15分かかる印刷作業(EXCELを30ファイル印刷)の手間が省けたと評価を頂きました。
メンバーは月に2~8回印刷を行うとのことで、その分の工数(30分~2時間)を浮かせて別の仕事に時間を充てることができたとのことです。

そんな猫の手も借りたい熱いあなたのために、マクロEXCELを作成しました。
作品集のページにマクロEXCELがあります。

マクロEXCELと同じ階層に、「印刷フォルダ」というフォルダをつくり印刷したいEXCELを入れるだけで、データを入力しているシート全てを印刷します。

詳細は「動作確認」の章をご覧ください。

IT系の記事はライフプラン系の記事とは異なり、エンジニア文章チックで進めます。

気持ち要素0です。
簡素でタンパクな文です。
ご了承ください。

動作内容

印刷_機能説明1

左図のように、マクロEXCELと同じ階層の「印刷フォルダ」内の
EXCELファイルを全て印刷します。
(xls,xlsx形式どちらもOK)

注意画像(データあるシート全部印刷)

EXCEL内のデータが入力されたすべてのシートを印刷します。

左図は「印刷したいEXCEL1.xlsx」の1,2シート目にデータが 入力されていた場合)

使用方法

一括印刷_使用方法
使用方法

ソースコード

コントロールフォームのボタンを使用しています。
ボタンの名前は”一括印刷”となっています。
必要に応じて適宜変更してください。
※VBAの記述の作法はほとんど気にしていません(型宣言ぐらいです)。
 初めての方は「これは動くだけのプログラムだ」と認識してください。

'
'一括印刷マクロVer0.1
'
'デフォルトで設定したプリンタを使って、印刷を行います
'作者のEXCELが2007のため、バージョンの違いにより動かない可能性があります
'ご了承ください
'
'Ver0.0 リリース
'Ver0.1 変数の間違い修正,メッセージボックスの分岐の定義を明確化

Sub 一括印刷()
  
  '変数定義
  Dim strFilePath As String '印刷したいEXCELがあるパスを格納
  Dim strFileName As String '印刷したいEXCELファイルがあるパスを格納
  Dim checkSheet As Worksheet 'ワークシートを選ぶ用
  Set checkSheet = Worksheets("印刷内容確認用")
   
  Dim cntForPath As Long 'for用
  Dim cntForPrint As Long 'for用
  Dim answerMsg As Long 'メッセージボックス用
    
    
  answerMsg = MsgBox("印刷しますか?", vbYesNo, "印刷確認")
  
  If answerMsg = vbYes Then
       
    'ファイルパス取得
    strFilePath = ThisWorkbook.Path & "\印刷フォルダ\"
    strFileName = Dir(strFilePath & "*.*")
    checkSheet.Columns("A").ClearContents '確認シートの列(A)の文字削除
    
    cntForPath = 1
    
    Do Until strFileName = "" '確認シートにパス記入
      checkSheet.Range("A" & cntForPath).Value = strFilePath & strFileName
      cntForPath = cntForPath + 1
      strFileName = Dir()
    Loop


    '印刷
    cntForPrint = 1
    For cntForPrint = 1 To checkSheet.Cells(Rows.Count, 1).End(xlUp).Row
      Workbooks.Open Filename:=checkSheet.Range("A" & cntForPrint).Value '一括印刷フォルダにあるEXCELをオープン
      ActiveWorkbook.PrintOut '開いたEXCELを印刷
      ActiveWorkbook.Close savechanges:=False '開いたEXCELを閉じる
    Next cntForPrint

  ElseIf answerMsg = vbNo Then
    MsgBox ("印刷を中止します")
  End If

End Sub

テストPCのスペック(プログラムを動かした環境)

  • Office:EXCEL2007
  • OS:windows8.1 64bit x64ベースプロセッサ
  • CPU:Intel Celeron CPU1000M 1.80GHz,1.80GHz
  • メモリ:4GB

補足(プログラム初めての方向け)

基本はネットで調べるでOK

プログラムを作っていくときは、機能の実装を優先することが前提ならネットで調べることを推奨します。

理由は、自分が困っていることは他の方も同じように感じているからです。
まずは本じゃなくてもよいです。
経験の話になりますが。

(別の記事でお話しします)

2020/5/12文量が少ないためこちらで追記しました
始めはとにかくプログラムに触れてほしいからです。
どのHP様も内容は、VBAの設定をし「HelloWorld!」を表示するようなところからスタートすると思います。

一瞬の時間差だと思いますが、その「やるか」の実際に行動にうつった時の瞬間が
大きいと考えます。

また、プログラムを書いたというキーボードを打った手の感覚は今までとは違う感覚を得ると思います。

特に、VBAのような言語は使う人も多いため自分がVBAをはじめた頃に感じた困りごとは他の方が既に解決している場合が多いです。

また、解決していなくても調べ方(検索する言葉)を工夫すれば出た結果を組み合わせて解決できることがほとんどです。

今回、私が作成したマクロを例にすれば検索エンジンで検索すれば似たようなものがジャンジャン出ます。
“エクセル マクロ フォルダ内 印刷”とかで調べるとでます。

”エクセル”を”EXCEL”にかえたり、”VBA”というように意味が似通う言葉を選んであげると、
調べる幅が広がります。

人間からみると意味で関連づけするため、同じように見えますがPCからみると文字のコードで解釈するため(関連づけしない)、”EXCEL”と”エクセル”は別物となります。

今回のマクロが「自分の考えたものと違う!!」と感じた方は、自分にあったソースを探してみてください。

調べながらプログラムが書けるようになってきたら

ある程度調べ方が身に付き、「プログラム作るってこんもんかぁ」と感じるようになったらVBAの記述の作法も見てみるとよいでしょう。

Excel VBAコーディング ガイドライン案 (引用元:Qiita @mima_ita様)

記述の作法がある理由は、「他の方が見るときにコードを分かりやすく読んでもらうため」です。

会社でも引用元のような内容に、素直に従うところ、独自ルールを作って従わないところ、マチマチで困惑しますが自分の基準を作っておくことは相手の考えを深く知る上で大事になります。
(自分が正しいとは思っちゃダメ、自分だけは律しましょう)

ちなみに、今回の私が作ったマクロはVBAの記述の作法にほとんど従っていません。

2020/5/12追記
とはいえ、ベーシック言語にもかかわらず、
私は型宣言をしてしまいました。
見返していたら気づきました。
(理由はC言語をやっていたから…いいわけです)

いろいろ意見あると思いますが、私はベーシックなら変数なくても良い派です。
ベーシックは「誰でもプログラムが書ける」という考えがあるからです。

引用元のHP様の内容をみながら、「ココの書き方違うじゃーん!」と色々気付いて頂けると、プログラミングで大事な大事なスキルである「書き方って大事だな」という感覚を養えます。

感じて頂けると嬉しいです。

ネットは辞引的な勉強方法になります。
あわないなぁ、と感じた方はVBAのおすすめ本を3冊選びましたので、参考にして頂けるととても嬉しいです!

コメント

タイトルとURLをコピーしました