• ベストアンサー

エクセル・大量印刷の方法

ネットワーク上にあるフォルダの中の全ブックの全シートを印刷します。 現在は、VBAで1つずつブックを開き、印刷して閉じるというのを繰り返しています。 しかし、ブックのサイズが大きいのでとても時間がかかっています。 ブックを開くのにとても時間がかかるようです。 エクセルはブックを開かなくても、エクスプローラで該当のブックを選び、右クリック⇒印刷で印刷できます。 これは確かにブックを開かないので早いです。 ですが、select状態のシートしか印刷されません。 一応ブック作成時に全シート選択状態にしてあるので、エクスプローラから右クリック⇒印刷でもいいのですが、だれかが開いたりしてselectが解除されていても分からないのが欠点です。 そこでまた別の方法と思い、1つのブックにVBAで全ブックの全シートを1シートずつリンク貼り付け⇒印刷とやろうかと思いました。 (リンク貼り付けの式をVBAで記述しようという意味です) でもブックごとのシートの数はバラバラ、名前もバラバラです。 シート名の取得もやはりブックを開かないと難しいですよね。 と言う訳で行き詰っています。 なるべく短時間で全シートを印刷するなにかいい方法はないでしょうか? お知恵を貸して下さい。 現状の印刷コードを書いておきます。 Sub 印刷() Dim fn Dim Mydir Dim FSO As Object Dim FolderObject, fc As Integer, Afc As Integer Application.ScreenUpdating = False pflg2 = False   If MsgBox("印刷を開始します。", vbOKCancel) = vbCancel Then Exit Sub   Mydir = Sheets(1).Range("B7")   Set FSO = CreateObject("Scripting.FileSystemObject")   Set FolderObject = FSO.GetFolder(Mydir)     Afc = FolderObject.Files.Count   Set FSO = Nothing   '***** ユーザーフォームを表示する   Load UserForm3   UserForm3.Show 0   DoEvents      ChDir Mydir   fn = Dir(Mydir & "\*.xls")   fc = 1      Do     '***** プログレスバー     If pflg Then GoTo errHandler     UserForm3.ProgressBar3.Value = fc / Afc * 100     UserForm3.Caption = "印刷データ転送中…" & fc & "/" & Afc     DoEvents          Workbooks.Open (Mydir & "\" & fn)     ActiveWorkbook.PrintOut Copies:=1, Collate:=True     ActiveWorkbook.Close False          fn = Dir()     fc = fc + 1   Loop Until fn = ""      UserForm3.CommandButton1.Caption = "完了"   pflg2 = True   DoEvents      Exit Sub    errHandler:   Unload UserForm3   End Sub

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

ExcelAutoPrint なんてどうでしょう。 フリーツールです。

-yellowtail-
質問者

お礼

ありがとうございます。 フリーツールはちょっと難しいデス。(全員にインストールするとなると…という点で) 見てみたのですが、ファイルを一つずつD&Dと言うのはちょっと大変かなと言う気もします。

その他の回答 (4)

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.5

#3お礼で反応していただいてありがとうございます。 私の力点は >印刷出力結果をファイル(ディスク)に一旦吐き出す ということにあったのですが。 ファイルー印刷ーファイルへ出力。PrintToFile:=True, ーー お礼では、周辺(これは時間節約にはあまりならないのは判っている)ばかり注目されて残念。

-yellowtail-
質問者

お礼

申し訳ありませんでした。 その後、色々やってみた結果、どうがんばっても印刷時には一度エクセルでファイルを開くということが分かりました。 (右クリックでも開いていました。誤認識でした。) ありがとうございました。 お礼が遅れてすみませんでした。

回答No.4

ANo.1ですが フリーツール使用禁止&VBAで作る気力があるなら、 こちらはどうですか? http://oshiete1.goo.ne.jp/qa3141142.html

-yellowtail-
質問者

お礼

これって、フリーツールの中身もこんな感じなのでしょうか? だとすると最初のアプリも複数ファイルを一挙にD&Dでも大丈夫だったかも…。すみません。 ただネックはやはりブックを開いている点で、速度的には変わりませんでした。 でも同じようなことする方いたんですね。検索が不十分で申し訳ないです。 もう少し模索してみようと思います。ありがとうございました!!

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.3

多数ファイル多量の印刷の経験が無いが、ちょっと思いついた。 エクセルには印刷出力結果をファイル(ディスク)に一旦吐き出す機能がある。これで出力ファイルを専用プリンタや他の業務処理と同時並行処理で紙に打ち出すのは、どうですか。 >フォルダの中の全ブックの全シート・・ FSOで指定フォルダの各ファイル(.xls)を捉え、エクセルのブックを印刷する(注1)ことだけにして、プログレスバー表示(注2)やフォーム利用(注3)をやめては差し障りありますか。 (注1) http://pc-club.web.infoseek.co.jp/pc_materials/exl_new/exl_new11_5.htm ブックの印刷 (注2)必須ですか (注3)省略できませんか (注1)-(3)でどれだけ時間短縮になるか分からないが、介入・確認を全て省けるような気がして、全自動でやればよいことのような気がした。

-yellowtail-
質問者

お礼

ありがとうございます。 フォームや進捗はあまりに時間がかかるので、目視で体感速度を下げようとしているだけなので、なくしても問題ないです。 もともとはなかったのですが、どうにも時間がかかって(私が)いらーっとしたので進捗がわかるように入れました。 ただ、このコードのあとちょっとの短縮はあまり考えてなく、もっと劇的に速くならないかな…と思っています。 ブックを開くのが元凶に思えて仕方ないのです。それをクリアしたいのですが、どうにも…。

回答No.2

こんなのもあります。(私は使っていませんので無責任のようですが) 会社用だと問題があるかも知れませんが。 http://www.vector.co.jp/soft/win95/writing/se328342.html http://www.vector.co.jp/soft/win95/util/se351544.html

-yellowtail-
質問者

お礼

これは個人的にはすごく便利!と思いました。 こういうものを自分で作れると業務がすごくやりやすくなりそうです。 上の方のお礼を書いてから気づいたのですが、ネットワーク上にインストールしてあげれば良いのかも?と思いました。 検討してみようと思います。 ありがとうございました!フリーツールは盲点でした。

関連するQ&A