• 締切済み

Excel 選択したページの一括印刷

フォルダ内にある全てのExcelファイルの、選択したシートのみを一括印刷したいのですが、それは可能でしょうか? フォルダ内の全てのExcelファイルの全てのシートを一括印刷は出来たのですが、それの「選択したシートのみ」を一括印刷したいんです。 ファイルA の3シート(ページ)目 ファイルB の3シート(ページ)目 ファイルC の3シート(ページ)目 ・ ・ ・ という感じです。 可能でしょうか? 可能でしたら手順を教えてください! お願いします。

みんなの回答

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

#5です。 質問に「ページ」という言葉が出ていた。 あるシートで、改ページ線が「田」の字の型である場合の例ですが、田の字の左下のエリア「だけ」を印刷するのは Sub test03() Dim mysht As String mysht = "資料1" Worksheets(mysht).Select ActiveWindow.SelectedSheets.PrintOut From:=2, To:=2, Copies:=1 Next End Sub VBAを勉強するなら、参考にしてください。 エクセルシートには、Pagesオブジェクトは無いようだ。それで上記のようになる。 質問者が言っている、質問の「ページ」という言葉は俗語的で(エクセルでは正確な用語でなく)まぎらわしいと思う。

az4242
質問者

お礼

回答ありがとうございます。 皆様の回答を参考に試してみます! ページは紛らわしいですか(>_<) すみませんでした。

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

コンピュターにからんだ処理なので、 (1)手作業で印刷範囲を設定して印刷する <--エクセル本来の仮定 (2)プログラムで行う (3)出来合いのソフトを見つけてそれを使う。 質問の程度では、プログラムを作っても簡単で、お金を取って販売できるようなものにはならないので、WEBなどでも見つかりにくいだろう。VECTORなどWEB照会したら近い内容のソフトが、あるかもしれない。 ーー しかないが、質問者はどれほどのエクセルの技量なのかな。 シートとページを同じにみているようなレベルで、エクセルも、余り使用経験は多くないと想像する。VBAもやったことがあるのかな。質問のしぶりからないのだろうな。もしそれなら読み飛ばしてください。 でもVBAができる人はこれに類したことをやっていると思う。 >フォルダ内の全てのExcelファイルの全てのシートを一括印刷は出・・ プログラム(VBA、ABSなど)では、エクセルのファイル=ブックを1つ捉えたときに さらに、 Sub test01() For Each sh In Worksheets MsgBox sh.Name sh.Range("A1:B2").PrintOut Next End Sub ’--印刷も含めると 3つあるシート(aaa,bbb,ccc)のうち,2(bbb,ccc)つ印刷例。 Sub test02() sht = Array("bbb", "ccc") For Each sh In Worksheets 'MsgBox sh.Name For i = 0 To 1 If sh.Name = sht(i) Then MsgBox sh.Name sh.Range("A1:B2").PrintOut End If Next i Next End Sub 後者のコードでは、ブックごとに、印刷するシートをプログラムの中で、指定するのが面倒。 シートのどこかに印刷すべきか、どうかの判別が、決まったセルの内容で判別できれば コードは簡単になる。そういうことも質問に書いてないが。 印刷するシート数の散らばり具合など、質問に量的なことも書いておくべき。 (上記はヒント用、テスト用で質問の回答そのものではない) をヒントにして、そのコードを(フォルダのエクセルファイルを捉えるプログラムの箇所に)入れ子にすれば、シート名を指定しなくても、すべて印刷できる。 あとシート内の印刷範囲などは質問に言及されていない(質問がお粗末)ので何とも 言えないが。Currentregionででも済ませられるのか? 質問に関連する事項だけなら、VBAも簡単なので勉強したら。

az4242
質問者

お礼

回答ありがとうございます。 質問がお粗末ですか。勉強中の身ですので、専門的、具体的な内容で質問できず、すみませんでした。変な質問をしてしまいましたね、勉強します。

  • Prome_Lin
  • ベストアンサー率42% (201/470)
回答No.4

追伸です。 もし、プリントアウトするのが、必ず、そのファイルをダブルクリックして開いたとき、最初に表示されるシートなら、もっとプログラムが簡単になりました。 Option Explicit Dim a, b, w, x, y, z Set w = CreateObject("Scripting.FileSystemObject") Set x = w.GetFolder(".") Set y = CreateObject("Excel.Application") For Each a In x.Files b = w.GetExtensionName(a.Name) If b = "xls" or b = "xlsx" Then Set z = y.Workbooks.Open(x & "\" & a.Name) z.ActiveSheet.PrintOut() z.Close Set z = Nothing End If Next Set y = Nothing Set x = Nothing Set w = Nothing MsgBox("Finished!") 以上のプログラムを、テキストエディタかメモ帳に貼り付け、「~.vbs」(例えば「PrintExcel.vbs」)という名前で、プリントアウトしたいエクセルのファイルがあるフォルダに保存します。 「PrintExcel.vbs」をダブルクリック(「シングルクリック」→「Enter 」の方が確実)すると、冒頭述べたとおり、エクセルのファイルをダブルクリックして開いたとき、最初に表示されるシートのみが次から次へとプリントされます。 注意事項としては、関係の無いエクセルのファイルが、そのフォルダ内にあると、そのファイルもプリントしてしまいますので、絶対に不要のエクセルファイルは、そのフォルダに入れないでください。

az4242
質問者

お礼

回答ありがとうございます。 皆様の回答を参考に試してみます!

  • Prome_Lin
  • ベストアンサー率42% (201/470)
回答No.3

VBScriptでプログラムを書きました。 質問者の望んでおられることに反していれば、無視してください。 プログラムは2つあります。 Option Explicit Dim a, b, c, v, w, x, y, z Set v = CreateObject("Scripting.FileSystemObject") Set w = v.GetFolder(".") Set x = CreateObject("Excel.Application") Set y = x.Workbooks.Add Set z = y.Worksheets(1) c = 0 For Each a In w.Files b = LCase(v.GetExtensionName(a.Name)) If b = "xls" or b = "xlsx" Then c = c + 1 z.Cells(c, 1).Value = a.Name End If Next y.SaveAs(w & "\FileNames.xlsx") y.Close x.Quit Set z = Nothing Set y = Nothing Set x = Nothing Set w = Nothing Set v = Nothing MsgBox("Finished!") 以上が1つ目のプログラムです。 テキストエディタやメモ帳に貼り付け、「~.vbs」(例えば「FileNames.vbs」)という名前で、これからプリントアウトしたいエクセルのファイルがあるフォルダに保存します。 このプログラムは、そのフォルダにあるエクセルのファイルリストを作り、「FileNames.xlsx」という名前で、同じフォルダに保存しています。 プログラムの動かし方は、単に「FileNames.vbs」ファイルをダブルクリックするだけですが、「シングルクリック」→「Enter」の方がより確実です。 処理が終了すると、画面に「Finished!」が表示されます。 できた「FileNames.xlsx」の「B」列にそれぞれのファイルのプリントアウトしたいシートを入力するのですが、このとき、入力するのは、左から何番目かです。 すなわち、一番左端のシートは「1」で、そのとなりは「2」です。 入力したら、保存して、閉じておいてください。 次のプログラムです。 Option Explicit Dim i, u, v, w, x, y, z Set u = CreateObject("Scripting.FileSystemObject") Set v = u.GetFolder(".") Set w = CreateObject("Excel.Application") Set x = w.Workbooks.Open(v & "\FileNames.xlsx") Set y = x.Worksheets(1) For i = 1 to y.Range("A1").End(-4121).Row Set z = w.Workbooks.Open(v & "\" & y.Cells(i, 1).Value) z.Worksheets(y.Cells(i, 2).Value).PrintOut() z.Close Set z = Nothing Next x.Close w.Quit Set y = Nothing Set x = Nothing Set w = Nothing Set v = Nothing Set u = Nothing MsgBox("Finished!") 上記を、さきほどと同じように、テキストエディタかメモ帳に貼り付け、やはり、同じフォルダに「~.vbs」(例えば「PrintOut.vbs」)保存します。 先ほどと同じように、ダブルクリックするか、「シングルクリック」→「Enter」で走らせると、指定されたシートを、上のファイルから順番にプリントアウトしてゆきます。 なお、プリンタの指定などはできませんので、あらかじめ「通常使うプリンタ」で出力するプリンタを設定しておいてください。 このプログラムの利点としては、一覧を作成しているので、そのエクセルファイルを自分の好きなような順番に書き換えたり、同じファイルの複数のシートを出力するように、手作業で設定する事ができることです。 難点は、ファイルが非常に多い場合、手作業が大変なのと、一切のエラー処理を行っておりませんので、存在しないシート、例えば「4」シートしかないのに、「5」を入力した場合、どうなるか分かりません(自己責任でお願いします)。

az4242
質問者

お礼

回答ありがとうございます。 皆様の回答を参考に試してみます!

  • naoto0216
  • ベストアンサー率46% (183/391)
回答No.2

実際に使ったことはないですが、このフリーツールで いけそうですよ。 印刷するシートを指定できるようです。 オフィス文書自動一括印刷ツール(OfficeAutoPrint) http://www.vector.co.jp/soft/winnt/util/se503674.html

az4242
質問者

お礼

回答ありがとうございます。 皆様の回答を参考に試してみます! フリーツールがあるんですね。

  • Gletscher
  • ベストアンサー率23% (1525/6504)
回答No.1

そのようにプログラムを組めば可能です。 どんなOSやアプリケーションでやろうとしているのですか? UnixやLinuxならshellで組んだらどうでしょう?

az4242
質問者

お礼

回答ありがとうございます。 皆様の回答を参考に試してみます!

関連するQ&A

専門家に質問してみよう