質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

解決済

2回答

7803閲覧

EXCEL VBA pdfを複数作成する場合に、ファイルを1つに結合する

lyzmfeqpxs54

総合スコア237

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2019/02/25 06:45

いつもお世話になっております。

VBAはほとんど触ったことがないため、間違ったことを言っているかもしれませんがご容赦下さい。

VBAでエクセル内のページを変数で値を変えながら、pdfを作成できるように以下のように記述しております。

「印刷」ボタンを押すと、印刷シートの内容を順に、1.pdf、2.pdf、3.pdf…… というように
「C:\Users\xxxxxx\Downloads\sagyou\」フォルダの中にpdfが作成されていくようにしております(アカウントデータシートに書かれたデータの数だけ作成されれる)。

現在のやり方ですと、ファイルが複数作られてしまいますが、これを一つのpdfとして作成するには、どのようにすればよろしいでしょうか。

ご教示いただけますと幸いです。
よろしくお願いいたします。

VBA

1Sub 印刷() 2 Dim LastRow As Long 3 Dim i As Long 4 Dim myNo As Long 5 6 If vbNo = MsgBox("pdfを作成開始していいですか?", vbYesNo) Then Exit Sub 7 8 With Worksheets("アカウントデータ") 9 LastRow = .Cells(.Rows.Count, "A").End(xlUp).Row 10 11 For i = 1 To LastRow 12 13 myNo = .Range("A" & i).Value 14 15 Worksheets("印刷シート").Range("J4").Value = myNo 16 17 Dim fileName As String 18 fileName = "C:\Users\xxxxxx\Downloads\sagyou\" & CStr(i) & ".pdf" 19 20 21 Worksheets("印刷シート").PageSetup.PrintArea = "A1:F30" 22 Worksheets("印刷シート").ExportAsFixedFormat Type:=xlTypePDF, fileName:=fileName, IgnorePrintAreas:=False 23 24 Next i 25 End With 26 27 MsgBox "印刷が終わりました" 28 29End Sub

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

VBAで複数のPDFドキュメントを一つに結合するには、こちらの無料ライブラリーSpire.PDF for .NETを利用することもいい方法かもしれません。次のコードを参照してドキュメントを結合することができます:

Imports Spire.Doc Imports Spire.Xls Imports Spire.Pdf Namespace MergeMultiTypestoOnePDF Class Program Private Shared Sub Main(args As String()) Dim documents As PdfDocument() = New PdfDocument(3) {} Using ms1 As New MemoryStream() Dim doc As New Document("01.doc", Spire.Doc.FileFormat.Doc) doc.SaveToStream(ms1, Spire.Doc.FileFormat.PDF) documents(0) = New PdfDocument(ms1) End Using Using ms2 As New MemoryStream() Dim docx As New Document("02.docx", Spire.Doc.FileFormat.Docx2010) docx.SaveToStream(ms2, Spire.Doc.FileFormat.PDF) documents(1) = New PdfDocument(ms2) End Using Using ms3 As New MemoryStream() Dim workbook As New Workbook() workbook.LoadFromFile("03.xls", ExcelVersion.Version97to2003) workbook.SaveToStream(ms3, Spire.Xls.FileFormat.PDF) documents(2) = New PdfDocument(ms3) End Using documents(3) = New PdfDocument("04.pdf") For i As Integer = 2 To -1 + 1 Step -1 documents(3).AppendPage(documents(i)) Next documents(3).SaveToFile("Result.pdf") End Sub End Class End Namespace

ご参考になればなによりです。

投稿2022/03/09 08:25

enj0ylife

総合スコア41

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

印刷用にワークシートを作成して、そこに全データを作成→そのシートをPDFに出力→シートを削除、みたいにするしかないかと。

投稿2019/02/25 06:56

ttyp03

総合スコア16996

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

lyzmfeqpxs54

2019/02/25 07:10

早速のご回答ありがとうございます。 そういった手法が一般的なのですね。 お手数をおかけして申し訳ございませんが、どちらか参考になるサイト等、ご教示いただくことは可能でしょうか。
shinobu_osaka

2019/02/25 07:17

普通に新規シート作成して、そこにコピーして貼り付け…を繰り返して、それからその新規シートを印刷、で、そのシートを削除、するだけです。
lyzmfeqpxs54

2019/02/25 07:31

shinobu_osaka様 ご回答ありがとうございます。大変お恥ずかしい話ですが、VBAは始めたばかりで、ご教示いただいた「普通に新規シート作成して、そこにコピーして貼り付け…を繰り返して」部分のイメージすらわかない状況です。 もし、数行で済むレベルでしたらコードをご教示いただくことは可能でしょうか。 不勉強で申し訳ございませんが、よろしくお願いいたします。
shinobu_osaka

2019/02/25 07:36

マクロ保存を開始して、新規シートを作って、コピペして、新規シートを削除して、保存を終了して、保存したマクロを参考にしてください。ここは「わからない事を聞く」ところであり代わりにコードを書いてもらったり調べればわかることを調べずに教えてもらったりすることろではありませんので…。
ttyp03

2019/02/25 08:39

shinobu_osakaさん> 不在中の対応ありがとうございます。 lyzmfeqpxs54さん> もうひとつ案がありました。 今確認したところ、シートを複数選択すれば、その選択したシートをpdfに出力することができました。 なので、ひとつのシートにまとめるのではなく、シートを複製→そのシートを修正、を繰り返す。 最後に複製したシートを全部選択してpdfに出力する、という流れの方が作りやすいかもしれません。 shinobu_osakaさんが仰っているように、ここはわからないことを聞く場です。 ちょっとしたものなら時間に余裕があれば作成することもありますが、それなりの規模の場合はやはりご自分で解決するべきです。 2つ案を出しましたが、どちらか決めてまずは作ってみてください。 その上でわからないことがあれば、また別途質問を挙げてください。
lyzmfeqpxs54

2019/02/26 03:55

ご回答ありがとうございます。 一度作製し改めてコードを書き込みます。 その際はまたご教示いただけますと幸いです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問