• 締切済み

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 という感じ 一挙にいきなりいっぱいシート生成していくのも見た目びっくりだし 配列にシート名入れていくのも面倒だし、どうしてやるのがベターなのかな?と 思案中です

みんなの回答

  • HohoPapa
  • ベストアンサー率65% (454/692)
回答No.1

ExcelにPFD/XPSの作成機能があるものの ActiveSheet.ExportAsFixedFormat ごとに印刷ジョブが作成され (印刷ジョブ:印刷開始命令から印刷終了命令までの1塊) お話の通り、印刷ジョブ単位にPDFファイルが分かれてしまいます。 また、お話の通り、複数シートを選択しておいて ActiveSheet.ExportAsFixedFormat を実行すれば 印刷ジョブが1つになるので、 1つのPDFファイルの中に複数ページ(複数シート)が含まれ 期待の結果になります。 >どうしてやるのがベターなのかな? 世にはPDF化するツールは沢山あり、 中にはPDFファイルとして出力しようとしたときに 作成先に同名のファイルがあると追記する仕様のものもあります。 そのようなツールであれば、 印刷ジョブが分かれても、PDFファイルを1つにすることができます。

関連するQ&A

  • エクセルのマクロでシートの選択について

    よろしくお願いします WinXP SP3でEXCEL 2003を使用しています ブック名がtest.xls シートが("目次", "1", "2", "3", "4", "5") とあります ここでは仮に"5"までシートがありますが本来は変数であり、n + 1のように扱いたいです 以下のマクロで"目次"以外の全てのシートを選択しました ~~~~~ Sub Macro1() Dim i As Integer i = 2 Sheets(i).Select For i = i To 6 Sheets(i).Select False Next i End Sub ~~~~~ このマクロですとArrayを使わずとも、"目次"以外のシートを選択できますが For i = i To 6 の6を7以上にするとエラー終了します そこで以下の条件にてシートの選択を行いたいのですが方法がわからず困っております 1・シートの数が多くても"目次"以外のシートを全て選択したいです 2・iがシートの数を超えた場合はエラー終了せず、マクロを終了させたいです 3・Sheets(Array( "1", "2", "3", "4", "5")).Select のようなマクロは組みたくないです 大変恐縮ですが、教えていただけますでしょうか できればマクロをVBEにコピー&ペーストするだけで実行できるような 状態にしていただきますと非常に幸いです 何卒、よろしくお願いいたします

  • Excel エクセル マクロ VBA

    エクセルマクロで指定したシート(2シート目)から末尾のシートまで印刷したい場合、下記のようなコードで良いでしょうか? Sub Sample1() Dim i As Long For i = 2 To Sheets.Count ActiveWorkbook.Sheets(i).Select (Replace:= False) Next i Activesheet.PrintOut Preview:=True End Sub

  • マクロ

    色々やってみたものの… これ以上できません。 やりたいこと↓ 例)シート2のA~Zにデータがあります (1)シート2、A1~24をシート1、D2に貼り付ける (2)シート1を印刷、PDFでフォルダに保存(保存名は【シート2、A25】又は【シート1、D3&"_"&D4】) (3)シート2のA列を削除、シート1の(1)で張り付けたものを消す ※これをシート2、A列のデータがなくなるまで繰り返す。  ・(※)の繰り返すやり方がわからない  ・下記で実行を何度かやると印刷は上手く行くんですが   保存する時にファイル名が最初のファイル名のままで中身が上書きされてしまいます… Sub カード() ' ' カード Macro ' ' Keyboard Shortcut: Ctrl+a ' Sheets("Sheet2").Select Range("A1:A24").Select Selection.Cut Sheets("Sheet1").Select Range("D2").Select ActiveSheet.Paste Sheets("Sheet2").Select Range("A25").Select ActiveCell.FormulaR1C1 = "" Sheets("Sheet1").Select ChDir "C:\Users\sinnbasi\Desktop\カード" ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _ "C:\Users\sinnbasi\Desktop\カード\RON37806_4021489.pdf", Quality:= _ xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, _ OpenAfterPublish:=False ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True, _ IgnorePrintAreas:=False Range("D2:D25").Select Selection.ClearContents Sheets("Sheet2").Select Columns("A:A").Select Selection.Delete Shift:=xlToLeft Sheets("Sheet1").Select End Sub 詳しい方教えて頂けないでしょうか。 宜しくお願い致します。

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

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

  • エクセルシートをVBAでPDFファイルで保存する

    いつもお世話になっております。 先日ここで、(1)エクセルシートから自動でPDFファイルを作成し、(2)所定のフォルダに自動で保存し、(3)作成されたPDFファイルを決まった宛先に自動送信する、というVBAのコードを教わって非常に満足して使い始めたのですが、使ってみたらどんどん欲が出てきて3度目の質問です。 上記のコードでは、PDFファイルが「送信.pdf」で上書きされてしまう事は分かっていたのですが、メールの送信日時で区別できるので送信BOXから手動で専用BOXに移動すれば良いと思ったのですが、やはりPDFファイルを所定のフォルダーに自動で保存できれば一気に完了するので何とかならないかと。 一応NETで「日付をファイル名にする」といういくつかのコードを調べて種々試行錯誤してみたのですが、当方の実力では下記のVBAコードに組み込むことはできないとの結論に至りました。(情けない限り) 追加したいことは自動作成されるpdfファイルを上書きされずに所定のフォルダに自動保存する、です。 ファイル名としては特定のセルの値(これがbest)、もしくは日付(yyyy/dd/mm)でも十分です。 とにかく自動作成されるPDFファイルが所定のフォルダに上書きされずに保存されればOKなのですが。 本当に何度も追加質問をすることになってしまって申し訳ないのですが宜しくお願いいたします。 Sub Test() Dim FilePath As String, strSub As String Dim OutlookApp As Object Dim OutlookMail As Object 'On Error Resume Next FilePath = "\\ABC\123\あいう\アイウ\サンプル名\結果報告書\送信.pdf" 'Sheet3の結果報告書の特定のセルに品名 strSub = Worksheets("結果報告書").Range("E14").Value & "XXXX" & "LOT " & Range("E19") Worksheets("結果報告書").ExportAsFixedFormat Type:=xlTypePDF, Filename:=FilePath Set OutlookApp = CreateObject("Outlook.Application") Set OutlookMail = OutlookApp.CreateItem(0) With OutlookMail .To = "*****@xxxxx.co.jp" .CC = "" .BCC = "" .Subject = strSub .Body = "表題の件添付の通りです。" .Attachments.Add FilePath .Send End With   MsgBox "送信完了" End Sub

  • マクロの動作不良

    エクセルに下のようなボタンマクロを設定しています。 内容は、inpシートに設定している開始番号と終了番号を入力するとその番号分だけreceptシートのでーたを入れ替えてPDFで吐き出すというコードです。 問題なく動いていたのですが、先日、PCを入れ替えた際に確認したところ、pdfが出力されなくなりました。特にエラーはでることなく完了するのですがファイルができません。 変な質問ですが、原因がつかめず困っております。 このエクセルファイルは旧PCでも、新PCでもSDカードに保存して使用しております。 宜しくお願い致します。 Sub ボタン6_Click() Dim s As Long Dim e As Long Dim i As Long Dim outputFilePath As String Dim outputFileName As String On Error Resume Next s = InputBox("開始No.を入力して下さい。") If s = 0 Then Exit Sub e = InputBox("終了No.を入力して下さい。") If e = 0 Then Exit Sub ' PDFの保存先フォルダを指定する outputFilePath = Environ("USERPROFILE") & "\Desktop\" For i = s To e ' 出力するファイル名を指定する outputFileName = "recept_" & i & ".pdf" ' 対象の番号を設定する Worksheets("Inp").Range("C1").Value = i ' PDF出力を行う With Worksheets("Recept").Range("A36:J74") .ExportAsFixedFormat Type:=xlTypePDF, _ fileName:=outputFilePath & outputFileName, _ Quality:=xlQualityStandard, _ IncludeDocProperties:=True, _ IgnorePrintAreas:=False, _ OpenAfterPublish:=False End With ' 作成したファイル名を表示する MsgBox "PDFファイルを作成しました: " & outputFilePath & outputFileName Next i End Sub

  • エクセル VBA シート保存ボタン

    Sheet上にボタンを作成 ボタンを押すと保存するようにしています! 以前ここでSheet2枚をコピー出来るような 記述教えてもらったのですが・・ 1枚ならどう変化して良いか・・ 記述を書きましたが 何処が違うか教えて下さい! Private Sub CommandButton1_Click()   Dim FileName  As String   Dim FileExt   As String   Dim BkName   As String   Dim OldWkbook  As Workbook   Dim NewWkbook  As Workbook   Const StName1  As String = "ko"      '   Application.DisplayAlerts = False   Set OldWkbook = ActiveWorkbook   '   'ファイル名を取得   BkName = OldWkbook.Sheets(StName1).Range("A1").Value   FileName = BkName & Format(Now, "yyyy-mm") & ".XLS"   '   FileName = InputBox(FileName & "と言う名前で保存します" & vbCr & "よろしければこのままOKをクリックしてください", "保存ファイル名の確認", FileName)   If FileName = "" Then     Exit Sub   Else     If Right(FileName, 4) <> ".XLS" Then       MsgBox "ファイル名が異常です。"       Exit Sub     End If   End If   '   OldWkbook.Sheets(Array(StName1)).Copy   Set NewWkbook = ActiveWorkbook   For wIx = 1 To NewWkbook.Sheets(1).Shapes.Count     NewWkbook.Sheets(1).Shapes(wIx).Delete    Next   NewWkbook.Sheets(1).Name = StName1   '   FileName = "D:\保存\計画\" & FileName   '   If Dir(FileName) <> "" Then     '##ファイルが既に存在する     If MsgBox("既に指定のファイルが存在します。 置き換えますか?", vbOKCancel, "置き換えの確認") = vbCancel Then       NewWkbook.Close savechanges:=False       '##保存せずに終了       Exit Sub     End If     '##指定ファイル置き換え保存     NewWkbook.SaveAs FileName:=FileName   Else     '##ファイルを新規保存     NewWkbook.SaveAs FileName:=FileName   End If   '   NewWkbook.Close savechanges:=False   Application.DisplayAlerts = True End Sub 教えて下さい!

  • VBEでの引数を書き方について

    VBE の pdf の出力をする構文の書き方についての質問です。 構文は ExportAsFixedFormat (Type, FileName, Quality, IncludeDocProperties, IgnorePrintAreas, From, To, OpenAfterPublish, FixedFormatExtClassPtr) かと思いますが, Webサイトなどで,調べていると Sheets(ShtName).ExportAsFixedFormat Type:=xlTypePDF, _ FileName:=MyPath & "\" & Sheets(ShtName).Name & ".pdf" のように書かれていて,引数の部分に( ) が使われていません。 なぜでしょうか?

  • VBA中の”シート名”を”アクティブシート”に変更

    いつもお世話になっております。 非常に初歩的な質問なのですが、下記の2つのVBA中のシート名をアクティブシートに変更したいのですが、 sheetName = ActiveSheet.Name で試行錯誤するもうまくいきません。 実際のコードは下記の通りです。 これらのシート名”申請書”をアクティブシートに変更したいのです。 このコードは過去にここで教えて頂いたコードで出来ればこれを修正したいので宜しくお願いします。 1.Sub 申請書登録() Dim NewBookName As String With ThisWorkbook.Sheets("申請書") Windows("1.新規・変更登録申請書(原紙)・リスト②T用.xlsm").Activate For i = 5 To Sheets("規格登録・変更リスト").Range("A1048576").End(xlUp).Row + 1 If Sheets("規格登録・変更リスト").Range("B" & i).Value = "" Then With Sheets("規格登録・変更リスト") .Range("A" & i).Value = Sheets("申請書").Range("E3").Value .Range("B" & i).Value = Sheets("申請書").Range("O3").Value .Range("C" & i).Value = Sheets("申請書").Range("E4").Value ・・・・・・・・・・・・・・・・・・・ 2.Sub 申請書保存() Dim NewBookName As String With ThisWorkbook.Sheets("申請書") NewBookName = .Range("F22").Value & " " & .Range("E4").Value & " " & .Range("A2").Value & " " & .Range("A1").Value Worksheets("申請書").ExportAsFixedFormat Type:=xlTypePDF, Filename:="\***\XXXX\1.申請書\申請書" & "\" & NewBookName End With End Sub

  • VBA  PDF ファイル名をセルからつける

    ExcelでPDFを出力するときに、たとえばB1のセルに入力されているものを、ファイル名の一部として出力する方法がわかりません。 例えばB1に「資料1」と入力されていた場合で、PDFのファイル名を[TEST資料1.pdf]にしたい場合、下記に何かを足すだけでできますでしょうか? ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _ "I:\補TEST\TEST.pdf", Quality:=xlQualityStandard, _ IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:= _ True End Sub できれば、解説もいただけると助かります。よろしくお願いします。

専門家に質問してみよう