• ベストアンサー

エクセル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

  • EXCEL VBAについて

    お世話になります。 EXCEL VBAで指定したフォルダのEXCELブックが1つでもオープンされているかどうか知りたいのですが、可能でしょうか。 よろしくお願いいたします。

  • 同一フォルダ内で、エクセルを自動リンクさせる方法

    同一フォルダ内で、エクセルを自動リンクさせる方法を教えて下さい。 デスクトップ>書類>データ の順にフォルダを作成し、 「データ」フォルダの中に、Excelのブックを複数作っています。 「データ」フォルダ内に、 Book1、Book2、Book3、Book4があるとして、 Book1の情報を更新すれば、Book2、Book3、Book4も関数を介して全て変わるようにしたいです。 [BOOK1.xls]で、他のBookに反映するようにしたところ、 Book1の情報を読み込むために、ルート(デスクトップ¥書類¥データ)まで遡るため、 処理に時間がかかります。 同じフォルダ内のため、「データ」フォルダを基点に、自動リンクを指定できないものでしょうか。 条件: それぞれのBookには、複数のシートを作成しているため、同じBook内に全て入れることが出来ません。 WIndows XPでExcel 2000を使用しています。 軽く処理出来るようにしたいので、 他にやり方があれば、どのような方法でも構いませんので教えて頂けると助かります。 何卒、宜しくお願い致します。

  • エクセルVBA自動ハイパーリンクフォルダー指定場所

    管理台帳を作成したく、下記のVBAを作りました。 マクロ内容は、Aセルに管理番号を入力しマクロ実行ボタンにて、 入力した番号と同じフォルダーを作成しハイパーリンクする自動フォルダー作成&ハイパーリンクマクロです。 現在のフォルダー作成場所はローカルのDドライブ直下に作る様に指定しているのですが、 エクセルVBAがある場所と同じ場所に、上記のマクロで作るフォルダーが出来る様にしたいのですが、 見よう見まねでVBAを何とか作ったのですが、知識がなくこれ以上が解りません。 出来れば、下記のVBAを編集して頂、教えて頂いたVBAをそのままコピペすれば使える状態で教えて頂ければ助かります。 宜しくお願い致します。 Sub MakeHyLink() Const path As String = "D:\" Dim wkStr As String If ActiveCell.Column = 1 Then wkStr = path & ActiveCell.Value If Dir(wkStr, vbDirectory) = vbNullString Then MsgBox wkStr & "フォルダがありません。作成します。" MkDir wkStr Else MsgBox wkStr & "フォルダは存在します。" End If ActiveSheet.Hyperlinks.Add Anchor:=ActiveCell, Address:=wkStr End If

  • ExcelのVBAで。

    BOOK1とBOOK2にそれぞれ表があります。 例としてBOOK1には No | 商品名 | 値段 | 品番 1  | みかん |  80 | 11111 2  | りんご |  100 | 22222 とあり、 「No」と「枚数」を入力してボタンを押すと、 BOOK2に情報を反映させるといった形です。 BOOK2の方の表は、BOOK1と同じですが、全部で表が3枚あり、 それぞれに反映させたあと、印刷させます。 「枚数」が1枚ならそのまま反映させればいいのですが、 2枚以上になると、品番の最後にアルファベットをつけなくてはならないのです。 例えば、「No=1」「枚数=3」とした場合には、 1 | みかん | 80 | 11111A というものを反映させ印刷させたあと、 1 | みかん | 80 | 11111B とし、さらに印刷をし、また 1 | みかん | 80 | 11111C として印刷をして完了です。 これをどのようにしてやっていいのかまったくわかりません。 Accessのコードなら触ったことがあるのですが、Excelは今回が ほとんどはじめてといっていいです。 マクロも自動で組むことができるくらいです。 ぜひお願いします。 # わからないことがあったら補足しますので、要求お願いします。

  • EXCEL VBAについて

    VBAでCSVファイルをテンプレートのBBOKに読込むコードを 作り、CSVファイルから読込んだBOOK1データを集計する BOOK2を作成しています。 BOOK1・11/21・・・11/21・・・11/22・・・11/23と続きます      A     B     C      D 1  ID     店名   売上    日付 2 1104567   渋谷店  190,809   11/21 3 1102031   新宿店  209,808   11/21 4 1103450   横浜店  108,765   11/21 BOOK2・集計      A    B    C       D       E 1  ID   店名   11/21    11/22     11/23 2 1104567  渋谷店  190,809   203,487 3 1102031  新宿店  209,808   340,876 4 1103450  横浜店  108,765   547,627 ※BOOK1とBOOK2のIDの並び順は一致していません。 上記のBOOK1のデータをBOOK2に読込ませたいと考えています。 VLOOKUPやINDEX関数を使用しようかと考えたのですが、日付毎に ファイル名が違うのと、集計のファイルには外部参照をさせたくないと 考えています。 VBAで作成したいコードはBOOK1からBOOK2の日付のセルにIDを検索条件として日付毎のファイルを読込ませたいです。 フォームで日付を入力し、コピーするBOOK2のセルを指定後、BOOK1を選択するためにダイアログボックスを出したいです。 BOOK2のIDを検索条件としてBOOK1から一致する売上セルを抽出するコードだけでもわかれば何とか作成できそうなのですが、 ご教授いただけませんでしょうか?

  • エクセルvba. PDF保存 フォルダ内の順番

    エクセルVBAでPDFを作成すると、保存されたフォルダ内での順番が マクロ実行順から変わってしまいます。 Sheet1 顧客情報 Sheet2 請求書 Sheet1のA列の顧客名順でSheet2に差し込み保存した請求書PDFを フォルダ内でもA列の順番にする方法を教えてください。 よろしくお願いします。

  • エクセルVBA 一覧にあるブックを順に印刷するには

    こんばんは。ブック名の一覧の中から指定したものを順に印刷をしていく方法を教えてください。 D10から下にブック名が書いてあります。 その横(C列)に“印刷”と入力してあるブックのシートすべてを順に印刷をしたいと思っています。 ただし、シート名に「保存」という名前を含んだものについては印刷対象から除きたいというわがままなものなのです。 ブックはすべてマクロ実行のファイルと同じフォルダの中にあります。 これ、可能でしょうか?よろしくお願いします。

  • EXCELでのVBAでダイアログボックスの表示方法

    EXCELで簡単なVBAを作成しています。単純に特定のファイルを読み込み 書式設定を変更して印刷をかけるだけのものなのですが、 この変更したEXCELデータをフォルダやファイル名を使用者側で指定できるよう、ダイアログボックスを使用したいと思っていますが、 VBAの記述方法がわかりません。どうかよろしくご指導お願いします!

  • エクセル vbaについて その2

    前回質問させていただき問題が解決しました。 さらにいろいろ付け加えたいので質問させていただきます。 前回のマクロです。 Private Sub TextBox1_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer) If KeyCode = 13 Then n = TextBox1.Value For i = 1 To n Cells(10, "A") = i TextBox1.PrintObject = False 'テキストボックスは印刷しない Range("a1:j10").PrintOut '範囲は適当に修正のこと MsgBox i '確認用 Next i End If End Sub 今回作成したいものが、両面シールで通し番号を打ちますが、100枚あれば表面に1から50裏面に51から100としたいのです。 印刷枚数を指定して且つ裏印刷の時には、51からのようにしたいと思っております。 どの様に上記vbaに組み込めばよろしいでしょうか? よろしくお願いいたします。

  • フォルダ名だけを取得するVBA

    VBAを使ったエクセルテンプレート適用ツールを作成しているのですが そのVBAのことで教えてください。 現在自作のフォーム上にあるテキストボックスにフルパスが入っているとします(添付図参照)。 *この前提は必須と考えてください。 次に作成ボタンをクリックすると Step1 新しいブックが開かれ行幅や書式などが自動で調整されます。 Step2 ブックの保存ダイアログが自動で開きます。     ただし、保存ダイアログが開いた時点で自作フォーム中の     テキストボックスで指定したフルパスに移動しており、     且つ移動先のフォルダ名(<-注意!!フルパス名ではありません!!)と     同じ文字列をファイル名入力欄に自動で入力されるようにします。    ex) D:\MyProject\Project01\TaskA\にブックを作成し保存する場合、      保存ダイアログのファイル名欄にTaskAとだけ書く。 マクロ自体はここでストップし、これ以降はユーザーがそのファイルメモで 保存してよいかどうかを判断し、問題なければ手動でダイアログ上の「保存」ボタンを押します。 問題はStep2で、保存先のフォルダ名と同じ文字列を保存ダイアログのファイル名に記入するには どのようなコードを書いたらよいでしょうか。 私自身としては下記の二案を考えているのですがそれぞれについて疑問があるので教えてください。 案1 作成ボタンを押した時点でテキストボックスに書かれているフルパスの文字列から   末尾にあるフォルダ名だけを取得して変数に代入し、これを保存ダイアログの   ファイル名欄に反映させる。   疑問:テキストボックスのValue値に書かれているフルパスを示す文字列から      末尾のフォルダ名だけを取得するためのコードは何と書けばよいのでしょうか? 案2 ブックの保存ダイアログが開いて保存先のパスに移動してから今保存ダイアログで    開いているフォルダ名を取得する。    疑問:今アクティブになっているブックが保存されているフォルダ名だけを取得する    方法なら確かあったような気がしています。    しかし今保存ダイアログで表示されているフォルダ名を取得するコードは何と    書けばよいのでしょうか?    そもそもそういったコードや操作自体VBAにあるのでしょうか?

専門家に質問してみよう