• ベストアンサー

エクセルVBAで他フォルダーにある書類を必要部数

印刷したいです Cドライブ直下にAというホルダーを作り 書類ができた順にAフォルダーに入ってきます 終了後 約50~60くらいBOOKが存在します そのブックを作成書類により 3枚~5枚印刷しています まずは3枚印刷の書類を作成しメッセージボックスで枚数を指定します フォルダーの中には印刷枚数が異なるものは存在しません 3枚印刷の書類を作成、印刷 4枚印刷の書類を作成、印刷 5枚印刷の書類を作成、印刷 としています。VBAで印刷ボタンを押して3~5枚を指定しAフォルダー内の50~60の書類を印刷といったものができたらと思っております。 VBAでフォルダー内のBOOKを数えて繰り返し印刷を行う様なものになると思われますが、 作成は可能でしょうか? お忙しいところ申し訳ございませんが、ご教示お願いいたします。

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

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

「VBScript」でプログラムを組みました。 従って、「Windows」専用です。 このプログラムでは、「A」フォルダの中にプログラムファイルを放り込んで、ダブルクリックすると、枚数をたずねてきますので、数字を入力すると、その枚数を、プログラムのあるフォルダ内のすべてのエクセルファイルのすべてのシートをプリントアウトします。 (こうしておけば、どのフォルダでも、汎用的に対応できますが、「C:\A」以外、あり得ないのでしたら、後ほど説明します。) 従って、前提条件としては、プリントアウトしたいプリンタを「通常使うプリンタ」に設定しておく必要があります。 以下のプログラムを、メモ帳かテキストエディタに貼り付け、「~.vbs」という名前で保存します。 「~」部分は、何でもかまいませんが、「.vbs」は、必ず半角でなければなりません。 Option Explicit Dim a, b, c, i, j, v, w, x, y, z Set v = CreateObject("Scripting.FileSystemObject") Set w = v.GetFolder(".") Set x = CreateObject("Excel.Application") c = InputBox("枚数 = ") For Each a In w.Files b = LCase(v.GetExtensionName(a.Name)) If b = "xls" or b = "xlsx" Then Set y = x.Workbooks.Open(w & "\" & a.Name) For i = 1 to y.Worksheets.Count Set z = y.Worksheets(i) For j = 1 to c z.PrintOut() Next Set z = Nothing Next y.Close Set y = Nothing End If Next x.Quit Set x = Nothing Set w = Nothing Set v = Nothing もし、「C:\A」以外、あり得ないのでしたら、4行目を Set w = v.GetFolder("C:\A") としてください。 次に、簡単なプログラムの説明です。 Set v = CreateObject("Scripting.FileSystemObject") ファイルやフォルダを扱えるようにしています。 Set w = v.GetFolder(".") プログラムファイルのあるフォルダを取得しています。 Set x = CreateObject("Excel.Application") エクセルを扱えるようにしています。 c = InputBox("枚数 = ") 枚数をたずねています。 For Each a In w.Files フォルダ内のすべてのファイルを順次処理します。 b = LCase(v.GetExtensionName(a.Name)) 拡張子を取得しています。 If b = "xls" or b = "xlsx" Then 拡張子が「xls」か「xlsx」の場合、 Set y = x.Workbooks.Open(w & "\" & a.Name) そのファイルを開いています。 For i = 1 to y.Worksheets.Count シートの数だけ処理します。 Set z = y.Worksheets(i) シートを設定して今s。 For j = 1 to c シートの数だけ順番に処理します。 z.PrintOut() そのシートをプリントしています。 従って、このプログラムでは、同じシートを枚数分プリントしてから、次のシートにいきます。 質問者にとって、このプロントが不適切な場合で、ファイル単位に必要枚数をプリントしたい場合は、 For i = 1 to c For j = 1 to y.Worksheets.Count Set z = y.Worksheets(j) としてください。 これで、ファイル単位になります。 以下は、閉じていたりするだけです。 もし、不明な点がありましたら、お知らせください。 できる限りの対応はさせて頂きます。

takechan0423
質問者

お礼

すごいです 汎用性もあってこんな形でもプログラムできるんだと初めて知りました 本当にありがとうございます

関連するQ&A