- ベストアンサー
エクセルマクロによる大量ファイルの一括印刷方法
Excel 2007の印刷マクロについて御教示ください。 <実行したいこと> ○ 数百に及ぶエクセルファイル(すべて単一シートからなる同一セル構成)を、逐一個別のファイルを開いて印刷するのではなく、一度だけエクセルをロードして一挙にこれらを印刷したい。 <環境・条件> ・印刷したいファイル名称は、D:\FILENAMES.TXTに、1ファイル一行単位で記録されている。 D:\DATA\01A001.XLS D:\DATA\01A002.XLS D:\DATA\02A010.XLS … ・印刷の順序は、D:\FILENAMES.TXTに書き込まれているとおりとする。 ・各エクセルファイルは、すべて単一シートの構成である。 ・使用するエクセルは2007、OSはWinXP ※ エクスプローラで印刷したいエクセルファイル名を名称の上昇順に表示させ、これらを一括して範囲指定し右クリックして印刷を指定すると印刷はできますが、印刷の順序が必ずしも上昇順ではなくなってしまい、私の場合この機能は使えません。エクセルのマクロで処理するのが適当なのではないかと考えていますが、エクセルのマクロは使ったことがありません。よろしくお願いします。
- Dauphin
- お礼率88% (108/122)
- オフィス系ソフト
- 回答数3
- ありがとう数4
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。 >エクセルのマクロは使ったことがありません。 VB系のプログラミングの経験はあるのでしょうか?もし、ご存知ないようでしたら、どこかのサイトで、設定の仕方とか調べてください。生のコードを扱うには、基本的な知識が必要です。 また。この手のマクロというのは、PCの周辺状況の見えない部分があるので、実際には100個のファイルをきちんと処理できるか分かりません。いきなり実行せずに、プレビューやファイル数を減らし、試験的にやってみて、行けると思ったら、本格的にマクロを実行してください。 一応、プリンタのオプションとして、Wait を入れてみました。Wait は、印刷には直接関係ありませんが、マクロは一旦中断されます。印刷の命令が速過ぎて、印刷が遅い場合、プリンタ・バッファに溜まりすぎてしまうのを、防ぐためのものです。 Application.Wait Now + TimeSerial(0, 0, 3) '3秒 ←この部分で、一つのファイルを印刷する平均的な時間を入れてあげると、PCの負担が少なくてすみます。 プリンタの性能にもよりますが、出来れば、100個のファイルを一気に印刷せずに、30個ぐらいに分散したほうが安全です。 '------------------------------------------- Sub TestMacro1() Dim fName As String Dim fNo As Integer Dim TextLine As String Dim ArFNames() As String Dim i As Long, j As Long Dim fn As Variant ''------------------------------------------- fName = Application.GetOpenFilename("テキストファイル(*.txt),*.txt") If VarType(fName) = vbBoolean Then Exit Sub ''------------------------------------------- 'fName = "D:\FILENAMES.TXT" '固定ファイルなら上の2行は不要 fNo = FreeFile() Open fName For Input As #fNo Do While Not EOF(fNo) Line Input #fNo, TextLine If Len(TextLine) > 2 Then ReDim Preserve ArFNames(i) ArFNames(i) = Trim(TextLine) i = i + 1 End If Loop Close #fNo '印刷 Application.Calculation = xlCalculationManual On Error Resume Next For Each fn In ArFNames If Dir(fn) <> "" Then With Workbooks.Open(fn) If Err.Number = 0 Then 'プレビューを入れる場合、「'」を外す .ActiveSheet.PrintOut 'Preview:=True j = j + 1 .Close False ''プリンタの性能によって、ウェイトを3秒入れる ''ウェイトを入れる場合は「'」を外す 'Application.Wait Now + TimeSerial(0, 0, 3) Err.Clear End If End With End If Next fn On Error GoTo 0 Application.Calculation = xlCalculationAutomatic MsgBox j & " 個のファイルを処理しました。", vbInformation End Sub
その他の回答 (2)
- imogasi
- ベストアンサー率27% (4737/17068)
D:\FILENAMES.TXTを1行読んでは印刷の方法もあるが、先に一旦、 D:\FILENAMES.TXT全行をエクセルブックのSheet1に読み込む(操作で読み込めるでしょう) するとD:\FILENAMES.TXTは、用は無くなり、エクセル側に集中できる。 そのブックの標準モジュールに、この質問の印刷するVBAコードをつくり、それを行数分繰り返して印刷。 開くブック名は上記エクセルに読み込んだシートの行のA列のセルの値を使う。 最終行まで繰り返す(最終行を捕まえるコードはわかりますよね) 各ブックのシートは1シートしかないということなので、全ブックブック名.Worksheets(1).PrintOutでよかろう。シートの印刷範囲指定する必要があるかどうか、最初のブックでテスト敵に確認。 印刷後読み込んだブックはClose。 今回1回だけなら、数百ブックを1回に印刷印刷し、用紙が出終わった事を確認後、順次印刷したほうが、印刷トラブルなどに柔軟に対処できるのでは。 まづ2ブックぐらいでテストして、ブック数を増やすのがコツだろう。For i=1 to 2で2行だけ対象に出来る。 ーー 以上だが、何も難しい点は見つからない。 質問しているということは、何処が判らないのか絞らないと。現状では丸投げである。
- rivoisu
- ベストアンサー率36% (97/264)
Sub 連続印刷() Dim i As Long i = 1 '変数iを1にする While Cells(i, 1) <> "" 'セル(i,1) A列i行目が空白になるまで繰り返す Workbooks.Open (Cells(i, 1)) ’セル(i,1)の名前のファイルをOpen ActiveSheet.PrintOut ' 印刷 ActiveWorkbook.Close ’Close i = i + 1 '次の行に移る Wend ’ここまでが繰り返し End Sub A1から空白なしに印刷対象ファイルが入っているとしています。 このマクロで動くと思います。 マクロの登録、マクロの起動については調べてね。
お礼
詳細なアドバイス、ありがとうございました。 すったもんだした挙げ句、諸般の事情によりこの処理は沙汰やみとなりました。 なお、マクロは参考とさせていただきます。 お礼が遅れて申し訳ありません。重ね重ねありがとうございました。
関連するQ&A
- エクセルでのファイル名の一括変更 マクロ
皆様お世話になります。 あるフォルダーの下位にユニークに名前の付けられた900個ほどのフォルダーがあり それれぞれの、フォルダーの中にA,Bというフォルダーがあります。 その中にa.xls,b.xlsなどというファイルが存在しています。 そのa.xlsやb,xlsの名称を変換したいのですが数量が非常に多いためマクロか、何かで変更する方法がありますか? ファイル名の条件として 開いたエクセルのC,4とH,4を合体させたファイル名にすると、非常にありがたいのですが。 よろしくお願いします。
- ベストアンサー
- オフィス系ソフト
- フォルダを指定し、複数のエクセルファイルの情報を別ファイルに保存したい。
エクセルのマクロで以下の実装を行いたいと思っています。 -------------------------------------------------------------- 1.あるフォルダを指定 2.そのフォルダの中に入っているエクセルファイルの特定列複数行(行数不明、データがなくなるまで)の情報を抜き出す 3.2で抜き出した情報を別ファイル(テキスト形式)に保存 -------------------------------------------------------------- ・2で指定するフォルダには複数ファイルがあります ・3で保存するファイル名は2で開いたファイル名と同じ名称にしたい(拡張子は別) フォルダの状態は以下のようになっています。 editor.xls ←マクロを組みたいエクセルファイル L folderA L A1.xls L A2.xls L A3.xls : L folderB L B1.xls L B2.xls L B3.xls : L forlerTextfile L A1.txt ←作りたいファイル L A2.txt 〃 L A3.txt L B1.txt L B2.txt L B3.txt : 分かりづらくて申し訳ありませんが、どなたかご教授いただけないでしょうか。 宜しくお願いいたします。
- ベストアンサー
- オフィス系ソフト
- エクセルのマクロでファイルを開く
エクセルの「ファイルを開く」ダイアログボックスを使用してファイルを開き、その開いたファイルに対してとあるマクロを実行させたいと思っています。 エクセルの「ファイルを開く」ダイアログボックスでパス取得までは理解出来たのですが、その先の処理が分かりません。 「ファイルを開く」と言うのは、「現在アクティブになっているシートにデータを貼り付けて」の処理でも構いません。 Dim Ret As Variant Ret = Application.GetOpenFilename("Excel ブック (*.xls), *.xls, テキストファイル(*.txt),*.txt") If Ret = False Then MsgBox "キャンセルが選択されました。" Exit Sub Else 'ここにRetで取得しているパスのファイルを開いて、sub_WAITのマクロを実行させたいです。 sub_WAIT.Show End If End Sub
- ベストアンサー
- オフィス系ソフト
- エクセルマクロでマクロをアクティブにしたくない
エクセルのマクロをひとつの「マクロA」という名前で、データーファイルからセルに入っている内容などを呼び出しながらまくろAのシートにデーターを貼り付けながら作業をしています。 Workbooks.Open Filename:= _ "C:\Documents and Settings\owner\My Documents\マクロ.xls" Application.Run "マクロ.xls!マクロ" と記載すると、マクロXLSがアクティブになってしまいます。 その為記載に'ActiveWindow.WindowState = xlMinimized と入れたりするのですが、アクティブになるシートがマクロ以外にうまくいかないことがあるのです。 データーシートは、毎回データーが変わる関係で、DATA.xlsがAのときやBのときが発生します。
- ベストアンサー
- Excel(エクセル)
- エクセルのマクロでテキストファイルを生成するには?
いつもお世話になっております。 マクロで エクセルのSheet1上のA1:A5のデータをコピーして 『吐き出し.txt』というテキストファイルを生成したいのです。 どのようなマクロを書けばよいかご教示ください。 通常の「txt形式で保存」ですと、 データ内に「,」があるため、 テキストファイルだとデータの両端に「"」がついてしまうため 不具合が発生するのです。 なんとかなりませんでしょうか。 よろしくお願いいたします。
- ベストアンサー
- オフィス系ソフト
- マクロを生かしてファイルをコピーする術エクセル
お世話になっております。 マクロを組み込んだ、ファイルA.xls を作成しました。 誤って消してしまっては大変ですので、ファイルをコピーして コピーファイルA.xls というものを作成しました。 ただ、こちらのコピーファイルA.xls というもので、マクロを実行しようとすると エラーが出てしまします。 コピーファイルA.xls がファイルAと全く同じマクロを実行してもエラーが出ない ように、ファイルA.xls をコピー(保存)する術はございますでしょうか? ちなみにWINDOWSXPでエクセル2003を使用しております。 マクロ、エクセルに関する知識が乏しいため、質問の仕方に問題があるかも しれませんが、何卒、ご指導のほどよろしく御願い申し上げます。
- ベストアンサー
- オフィス系ソフト
- Excelファイルの一括作成方法
お世話になります。 Excelファイルの一括作成方法というのがあれば教えていただきたいと思い投稿させて頂きます。 具体的な内容ですが、次のような事をしたいと考えています。 1.同じ内容のExcelファイルを別名で複数個一括作成(200個等)したい 2.さらに「1」は、外部TXTファイル等に記述された1行 ごとの記述をそれぞれファイル名にしたい。 例えば、Txtファイルの1,2行目がそれぞれ a,b な らば、Excelファイル名はそれぞれ「a.xls」「b.xls」 とする できれば、1.2.全てを実現したい所ですが、いずれ かでも方法ががおわかりの方。また、別のアプローチがあ る等ございましたら、ぜひ教えていただきたいと思いま す。 宜しくお願い致します。
- ベストアンサー
- オフィス系ソフト
- エクセルファイルの一括変換・処理方法について
エクセルファイルの一括変換・処理方法についてお聞きしたいことがあります。100行3列の数値データを持つエクセルファイルがあるとします。4列目に計算式例えば、D1=A1*B1をD列にフィルする作業を自動的に行い、かつ複数の、同様なデータを持つエクセルファイルにも一括して同一作業を行う方法を、どなたかご教授くださいませんでしょうか?おそらくマクロを使うこととなるかもしれませんが、もしそうでしたらそのマクロについてもお教えいただけるとありがたいです。よろしくお願いいたします
- ベストアンサー
- オフィス系ソフト
- VBA マクロ付きExcelファイルを無効で開く
タイトルの通り、マクロを含むExcelファイルを、マクロ無効でオープンしたいのですが、そういうことは出来るでしょうか? 新規ファイル作成.xlsというマクロがあって、temp.xlsというマクロを含んだファイルをnew.xlsというファイル名でコピーし、それをオープンしてデータを追加して終了。 次にそのnew.xlsをオープンした時にはtemp.xlsに含まれるマクロが実行される・・・ というようなことをしたいと思っています。 もしくは新規ファイル作成.xlsのマクロから、直接new.xlsのファイルにコーディングが可能であれば、それでも良いのですが・・・ データベースから表を作成し、作成後の変更データを再度データベースへ戻す、ということがやりたいのですが、上記の方法しか思いつきません。 もし上記の方法が出来ない場合は、別の方法がありますでしょうか? どなたかアドバイス、よろしくお願いします。
- ベストアンサー
- オフィス系ソフト
- excelで最初に開いたファイル名称を覚えておく様な処理は可能ですか?
excelで最初に開いたファイル名称を覚えておく様な処理は可能ですか? 1.最初の処理 (1)A.xlsのファイルを開く (2)マクロ:2010.xlsのファイルを開く (3)マクロ:チェックのシートをA.xlsの明細のシートの前に追加 (4)マクロ:チェックのシート名称をコピーした日付と時間のシート名に変更 (5)マクロ:2010.xlsのファイルをディスクトップ上から削除 2.後から追加する処理 (6)B.xlsのファイルを開く (B.xlsは、A.xlsとは異なるフォルダを作成し、A.xlsの特定のセルの中身の名称でファイル名保存されます。名前が異なるだけでマクロの中身はA.xlsと同じ) (7)マクロ:2010.xlsのファイルを開く (8)マクロ:チェックのシートをB.xlsの明細のシートの前に追加 (9)マクロ:チェックのシート名称をコピーした日付と時間のシート名に変更 (10)マクロ:2010.xlsのファイルをディスクトップ上から削除 上記を対応する為に下記の様なマクロ((6)(7)の部分を抜粋)を設定しています。 '2010.xlsのファイルを開く(2010.xlsのファイルは適宜、ディスクトップにコピーされます) Workbooks.Open FileName:="C:\Documents and Settings\ID\デスクトップ\2010.xls" 'チェックのシートを現在のブックの明細の前にコピーする。 Windows("2010.xls").Activate Sheets("チェック").Copy before:=Workbooks(1).Sheets("明細") 単独でA.xlsやB.xlsのファイルが開かれている場合には、 上記の対応で問題ないのですが、A.xls、B.xls以外のexcelファイルが開かれていると、 実行時エラーが出てしまいます。 Workbooks(1)の部分で最初に開いたexcelのファイル名称を指定しているのが 影響しているのはわかるのですが、ここの処理をなんとかしたいというおもいです。 つまり、複数のexcelファイルが開かれていて、A.xlsやB.xlsのファイルを後から開いても エラーがでない様にするには、どの様な処理にしたらよいのか教えて頂きたく。 マクロを実行したexcelのファイル名を覚えておいて、その名前が(1)に置き換わる 様な処理が望まれる処理です。
- ベストアンサー
- オフィス系ソフト
お礼
詳細なアドバイス、ありがとうございました。 すったもんだした挙げ句、諸般の事情によりこの処理は沙汰やみとなりました。 なお、マクロは参考とさせていただきます。 お礼が遅れて申し訳ありません。重ね重ねありがとうございました。