• 締切済み

エクセルで印刷時に、ページ毎にPDF保存するマクロ

エクセルで印刷時にPDF保存をしたいですのですが、ページ毎に名前を変えて保存をしたいです。 例えば、 For i = 1 To 50 Application.ActivePrinter = "Microsoft Print to PDF on Ne02:" ActiveSheet.PrintOut From:=i, to:=i Next i であれば、1ページずつ保存は出来るのですが、ファイル名もセルを参照しながら変えていきたいです。 具体的には、G列の1行名から50行目まで取引先の名前を入れていて 印刷毎に、取引先名でPDFを保存します。 Activesheet.ExportAsFixedFormat Type:=xlTypePDF, _ Filename:=ActiveWorkbook.Path & "\" & fName & ".pdf" のような方法は、ネットにもありますが、これだとページ毎にファイル名を変えられないので困っています。 よろしくお願いいたします。

みんなの回答

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

質問には何も説明されていないが、 下記例で言えば、下記の点は、すでに上手く行っているのか?  全般に小生が、勘違いしている(とか、そんなことをしなくてよい)かもしれないので、その際はごめんなさい。 でも関連する難しいこと(点)を、質問には触れてないので、大丈夫かと思った。 (質問者のVBAの技量のことを、普通は質問に述べないので、いつも回答に気がかりが残る。) 下記VBAコードのテスト例では、 (1)共通部分 第1行からー第6行目までとしている (2)名前ごとに15行明細行があるとしている例 この15行に当たる部分は、各名前ごとに、一定数の行数か?  バラバラだと、改ページを探すという、コード的に、手を加えないといけないと思うが。 こういう心配はいらないのか。 Sub 改ページ2() Dim i As Long Dim 最終行 As Long 最終行 = Cells(Rows.Count, 1).End(xlUp).Row For i = 6 To 最終行 Step 15 ActiveSheet.Rows(i).PageBreak = xlPageBreakManual Next i End Sub ==== ページ区切りごと印刷 Sub test02() Range("A1:E45").PrintOut End Sub 以上は、印刷 区分的には、思い通り印刷するようだ。 == Sub test03() 'ページ区切り行を取得 For i = 1 To ActiveSheet.HPageBreaks.Count MsgBox i j = ActiveSheet.HPageBreaks(i).Location.Row - 1 MsgBox j Next i End Sub を改修して、各ページの行範囲(スタート行とエンド行を取得) == この範囲のデータを、コピーし、別ブック(1ブックまたは名前の個別に)、(別シート=>1シートのみ)にエクセルファイルにする。 ーー 其の後これらのファイルをPDFファイルに変換する。 うまくPDFファイルで保存のVBAが見つかれば、エクセルファイルを作らず、直接PDFファイルが作れる。

全文を見る
すると、全ての回答が全文表示されます。
  • HohoPapa
  • ベストアンサー率65% (454/692)
回答No.3

#2です。ごめんなさい、50ページあるんでしたね。直します。 Sub sample()  Dim i As Long    For i = 1 To 50   ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, _   Filename:=Cells(i, 7).Value, _   Quality:=xlQualityStandard, _   IncludeDocProperties:=True, _   IgnorePrintAreas:=False, _   From:=i, _   to:=i, _   OpenAfterPublish:=False  Next i   End Sub

全文を見る
すると、全ての回答が全文表示されます。
  • HohoPapa
  • ベストアンサー率65% (454/692)
回答No.2

以下のコードでイケると思います。 Sub sample()  Dim i As Long    For i = 1 To 2   ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, _   Filename:=Cells(i, 7).Value, _   Quality:=xlQualityStandard, _   IncludeDocProperties:=True, _   IgnorePrintAreas:=False, _   From:=i, _   to:=i, _   OpenAfterPublish:=False  Next i   End Sub

全文を見る
すると、全ての回答が全文表示されます。
回答No.1

fName = Cells(i, "G") ですかね

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • VBAでPDFを保存する

    Excel2013です。VBAでPDFで保存するコードを書きたいのですが、通常の名前をつけて保存のように保存先とファイル名をその都度変更できるウィンドウを出したいのですが、どのようにすればいいのでしょうか?保存先とファイル名をあらかじめ指定する方法はネット検索でヒットするのですが、そうでない方法が探せません。 以下は現在のコードです。 Sub PDF保存() ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _ "c:\\xxx.pdf", Quality:= _ xlQualityStandard, IncludeDocProperties:=True, _ IgnorePrintAreas:=False, _ OpenAfterPublish:=False End Sub

  • Excelマクロで1シートの中身変えて一冊のPDF

    ExcelのPDF出力で教えてください シート1に帳票テンプレートを作りまして、連番印刷しておりました。 雰囲気でこんな感じで Sub Macro1() ' Macro1 印刷 Dim i As Integer For i = 1 To 10 Range("a1").Value = Format(i, "0000") Sheets(1).PrintOut Next End Sub #例として1~10としましたが、本当は別シートの台帳の連番で #次は11から10枚とか50枚とか変数で指定してますです。 これをPDF出力へと変えようとして次のように変えようと考えました Sub Macro2() ' Macro2 PDF Dim FilePath As String FilePath = "C:\Temp\" Dim FileName As String Dim i As Integer For i = 1 To 10 Range("a1").Value = Format(i, "0000") FileName = "Temp" & i & ".pdf" Sheets(1).ExportAsFixedFormat Type:=xlTypePDF, _ FileName:=FilePath & FileName, _ Quality:=xlQualityStandard, _ IncludeDocProperties:=False, _ IgnorePrintAreas:=False, _ OpenAfterPublish:=False Next End Sub で、ここからが相談なんですが、これだとPDFファイルが10個出来ますよね? そうではなく、一冊の10ページのtemp.pdfとしたい場合はどのようにしましょうか? 一旦ズラズラズラーとPDF作ってからのPDF連結ソフト立ち上げての 手作業とかじゃ面倒なので、全自動でVBA処理で出来ればいいなと思っています。 Sheets(1)に0001作ってSheets(2)に複写 Sheets(1)に0002作ってSheets(3)に複写 Sheets(1)に0003作ってSheets(4)に複写 ・・・ Sheets(2)~Sheets(11)まで選択してあげてのPDFエクスポート Sheets(2)~Sheets(11)削除 という流れを構想してみたのですが 他にも、こうすると簡単だよとかいうアドバイスなどありましたら ぜひともご教示くださいませ♪ Sheets(Array("Sheet2", "Sheet3",・・・)).Select ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF~ ActiveWindow.SelectedSheets.Delete という感じ 一挙にいきなりいっぱいシート生成していくのも見た目びっくりだし 配列にシート名入れていくのも面倒だし、どうしてやるのがベターなのかな?と 思案中です

  • Excel2007 VBA で2ページ目PDF

    印刷をする場合なら 例えば、印刷範囲がA1:V60 で1ページだったとすれば A61:V120は2ページ目で印刷されると思います。 もちろん、これはペーパーに印刷した場合です。 これをVBAでPDFにする場合、PDFにしたい範囲が A1:V60 だけなら、1ページとしてPDF化されます。 以下のようなコードで ActiveSheet.ExportAsFixedFormat xlTypePDF, "e:\hogehoge.pdf", xlQualityStandard, True, True またPDFにしたい範囲がA1:V120の時は上記trueをfalseにすることで 1ページに収めたり、A1:V60だけPDF化したりはできます。 そこで、やりたいことですが、 1つのPDFファイルに2ページ 1ページ目はA1:V60 2ページ目はA61:V120 としたいのです。 どなたか教えて頂けると助かります。

  • エクセルのマクロでのプリンタ自動切替について

    エクセルのマクロ初心者ですが、ご教示いただければ幸いです。 業務で日々使用する様式をボタン一つで印刷できるよう、マクロを作成中です。 エクセルのファイルは共有ファイルサーバーに保存していて、各端末(例:WS0001、WS0002、WS0003…)から印刷したいと考えています。 各端末の「通常使うプリンタ」はPR0001なのですが、この様式はWS0001のUSBポートに繋がったPR0002から出力する必要があります。 WS0001とWS0002他から見た場合にプリンタのパスが異なるため、現状では ActiveSheet.PrintOut ActivePrinter:="pr0002" ActiveSheet.PrintOut ActivePrinter:="\\Ws0001\pr0002" と2つのマクロを別々のボタンに割り当てていますが、ボタンを押し間違えることがあり、何とか1つのマクロにできないかと考えています。 例えば「"pr0002"が無い場合は"\\Ws0001\pr0002"から出力しなさい」といような記述は可能でしょうか? On Error でできるのかと考え、 On Error GoTo 0 ActiveSheet.PrintOut ActivePrinter:="pr0002" On Error GoTo 0 ActiveSheet.PrintOut ActivePrinter:="\\Ws0001\pr0002" あるいは On Error GoTo 0 ActiveSheet.PrintOut ActivePrinter:="pr0002" ActiveSheet.PrintOut ActivePrinter:="\\Ws0001\pr0002" と記述してみましたが、何故かPR0001とPR0002と2枚出力されて、上手くいきません。 ネットワーク上のプリンタ出力先の記述は、 Application.ActivePrinter = "\\Ws0001\pr0002 on NeXX:" ExecuteExcel4Macro _ "PRINT(1,,,1,,,,,,,,2,"""\\Ws0001\pr0002 on NeXX:"",,TRUE,,FALSE)" と記述した方が確実なようですが、端末によってXXの数字が異なるようで、エラーになることがあります。 何卒よろしくお願いいたします。

  • PDF化に関するマクロを教えてください。

    初めまして。どなたかご親切な方、教えてください。 エクセルのファイルに、約50のシートがあります。すべて同じ形式で、A4縦1枚に収まるサイズです。それぞれのシートに、外部からのリンクで数値が入るようになっています。このファイルを開いて、 ・シートごとに ・シートの名前をファイル名として ・PDF化 したいのです。 例)シート「A商事」→「A商事.pdf」 シートごとにPDF化するところまでは自力で組めたのですが、シートの名前を自動でPDFファイルの名前にする工程がうまく行きません。 なお、作業環境はWindows2000pro、Microsft Office Excel 97、Adobe PDF Writerです。派遣社員で、派遣先の環境のため、バージョンアップしたり新しいソフトを(フリーソフトでも)ダウンロードすることはできません。注文が多くて申し訳ありません。 下記に自分で組んだマクロを記述します。アドバイスよろしくお願いいたします。 Sub PDF化() Application.ActivePrinter = "Adobe PDF on Ne01:" For i = 1 To ActiveWorkbook.Sheets.Count Sheets(i).Activate ActiveWindow.SelectedSheets.PrintOut Copies:=1, ActivePrinter:= _ "Adobe PDF on Ne01:", Collate:=True Next i End Sub

  • VBAでExcelファイルのPDF自動化

    表題の通りの事をしたいと思っています。とあるサイトで参照したvbaコードで、デスクトップにファイルをExcelのブック名と同じ名前でPDFに変換するところまで出来ました。あと自動でやりたいことは2つあり、(1)とあるセルの情報を読み込み保存名にしたい【○○○.pdfという具合に】、(2)生成したpdfファイルの保存先をマクロ内に設け指定したいです。【\\サーバー名\○○\△△\□□などのように】 現状までのコードを表記します。わかる方いらっしゃいましたら、お手数ですがアドバイスお願いします。 自分はマクロは手を出したばかりで、初心者です。宜しくお願いします。 Sub pdf() Dim i As Integer Dim s_prn As String, oldprn As String, flg As Boolean On Error Resume Next s_prn = "Adobe PDF" 'インストールされているPDFプリンタの名前 oldprn = ActivePrinter 'アクティブプリンタを取得 If InStr(oldprn, s_prn) = 0 Then '切替えたいプリンタがアクティブプリンタでない場合 flg = False 'プリンタ切替フラグ For i = 0 To 99 ActivePrinter = s_prn & " on Ne" & Format(i, "00") & ":" '「"プリンタ名"on NeXX:」形式PC用 ActivePrinter = "Ne" & Format(i, "00") & ": の " & s_prn '「NeXX: の "プリンタ名"」形式PC用 If ActivePrinter <> oldprn Then flg = True 'プリンタ切替成功 Exit For End If Next i If flg = False Then 'プリンタ切替失敗の場合 MsgBox "プリンタ名:" & s_prn & " が見つかりません。" Exit Sub End If End If ActiveSheet.PrintOut ActivePrinter = oldprn 'アクティブプリンタを元に戻す MsgBox "終了しました。" End Sub

  • エクセルのマクロでシートの指定範囲をセル名で保存

    いつもお世話になっております。 だいぶ前に下記のコードを教わってあまりの便利さに非常に多くのファイルで多用しているのですが今回エクセルシートのまま保存したく。 2か所のPDFとpdfをxlmsに変更してみたのですが何故か必ずpdfで保存されるのです。 尚、保存ファイルは印刷範囲で指定でした範囲で、ページ設定通りに印刷されることも必要なので合わせてよろしくお願いします。 更に、問題ないと思うのですが、保護の範囲&編集許可の範囲指定も保持したファイルにしたいのでこれも合わせてお願い致します。 Sub 保存() Sheets("成績表(提出)").ExportAsFixedFormat Type:=xlTypePDF, _ Filename:="\\Sav01\成績書\原紙\1.成績表" & "\" & Range("E20") & ".pdf" End Sub

  • エクセル2007 印刷マクロ

    A1からE25までを印刷したいのですが,現在このようにしています。 ActiveSheet.PageSetup.PrintArea = "$A$1:$E$12" ActiveWindow.SelectedSheets.PrintOut Copies:=1 ActiveSheet.PageSetup.PrintArea = "$A$13:$E$25" ActiveWindow.SelectedSheets.PrintOut Copies:=1 これを,ActiveSheet.PageSetup.PrintArea = "$A$1:$E$25" にすると,1枚目と2枚目の区切りが自分の思うようになりません。 改ページプレビューを使って,ページ区切りを設定するのではなく, マクロで何とかしたいと考えています。 1枚目はA1:E12,2枚目はA13:E25に固定する方法を教えて下さい。

  • 違うシートのデータを1つのPDFファイル保存VBA

    Sub データPDFファイル化() If MsgBox("ファイルをPDF化し過去データとして保存します。よろしいでしょうか?", vbYesNo) = vbNo Then End End If If Range("L2").Value <> "" Then Dim Fn As String Fn = Format(Range("L2"), "yyyy年m月d日") & ".pdf" ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, _ Filename:="D:\フォルダB\過去記録データ保存用フォルダ\データ\" & Fn Else MsgBox "セルL2にファイル名が入力されていません。", vbExclamation End If End Sub この様なコードがあります。エクセル2003では使用出来ないのでエクセル2007以降の使用です。 これはシート名「A」にコマンドボタンを設置し、そのコマンドボタンを押すとPDF化して保存するマクロです。 そこで質問ですがコマンドボタンを押すとシート名「A」と隣にあるシート名「B」をまとめてPDFファイルで保存する方法はどの様にすれば良いのでしょうか? PDF化した際は1ページ目がシート名「A」で2ページ目がシート名「B」を表示させ、名前はシート名「A」のL2(yyyy年m月d日)で保存します。

  • エクセル マクロの印刷を手差しにする

    先日印刷時にハイフンを入れる質問をし以下の方法を教えて頂きました。 Sub test01B() For i = 1 To 200 Range("BA2") = "1409" & format(i,"-000") ActiveSheet.Range("A1:BL61").PrintOut Next i End Sub 専用用紙を使用する事になり、手差し印刷に変更したいのですが、 上記のマクロでは通常の給紙トレイから印刷されてしまいます。 手差し印刷にする方法をお教え下さい。 よろしくお願い致します。

専門家に質問してみよう