
office365を使用しています。
1行に1件ずつデータが入っているExcelファイルで,I2セルからI3セルで指定した範囲の行のデータを「様式」シートに順番に反映させながら,連続してPDFを作成するコードを以下のように作成しております。
以下のコードだと,PDFファイルが1件(1行)につき,一つずつ作成されますが,1つのファイルとして結合した状態で出力させるにはどのようなコードにしたら良いか,ご教示いただけないでしょうか。
おそらく,クリップボードのようなところで,1件(1行)のデータを様式シートに反映させたらそれを保存し,順次,次の行のデータを反映させてクリップボード上のデータに追加していくという動きのコードになると思うのではないかと思うのですが,調べてもわかりませんでした。
Sub 連続PDF作成()
Dim i As Long
Dim j, k As Long
Dim l As String
Dim myfolder As String
Application.ScreenUpdating = False
myfolder = ThisWorkbook.Path + "\"
j = Worksheets("回答").Range("I2").Value
k = Worksheets("回答").Range("I3").Value
For i = j To k
Worksheets("回答").Range("A5").Value = Worksheets("回答").Cells(i + 9, 1).Value
l = Sheets("回答").Range("N6").Value & "・" & Sheets("回答").Range("G6").Value & "・" & Sheets("回答").Range("D6").Value
Worksheets("様式").Select
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=myfolder & "回答\" & l & ".pdf", OpenAfterPublish:=False, IgnorePrintAreas:=False
Next i
Application.Goto Sheets("回答").Range("A5")
Application.ScreenUpdating = True
End Sub
No.3ベストアンサー
- 回答日時:
No2です。
>難しいのであれば今回はあきらめます。
「難しい」と書いた覚えはないのですが・・・?
具体的な説明が何も無いのでよくわかりませんけれど、以下のような感じでできませんか?
ただし、
・入力値の(=I2,I3)のチェックが何も無いので、ごく簡単なものを追加
・回答!A5セルに値をセットすれば、様式シートは自動計算されると仮定
・様式シートのコピーしたいセル範囲を、仮にA1:H40と設定
・出力ファイル名を何にするのか不明なので、仮に直接指定する方式
としてあります。
Sub 連続PDF作成()
Dim stK, stY, stD
Dim startN, endN, i As Long
Const AA = "A1:H40" ' ← コピー(転記)対象のセル範囲
Const fileName = "hoge" ' ← 作成するPDFファイル名
Set stK = Worksheets("回答")
Set stY = Worksheets("様式")
startN = stK.Range("I2").Value
endN = stK.Range("I3").Value
If Application.CountBlank(stK.Range("I2:I3")) > 0 Or _
Not (IsNumeric(startN) And IsNumeric(endN)) Then _
MsgBox "無効な入力です": Exit Sub
Application.ScreenUpdating = False
Application.DisplayAlerts = False
stY.Copy
With ActiveWorkbook
Set stD = ActiveSheet
For i = startN To endN
stK.Range("A5").Value = stK.Cells(i + 9, 1).Value
stD.Copy after:=.Worksheets(.Worksheets.Count)
.Worksheets(.Worksheets.Count).Range(AA).Value = stY.Range(AA).Value
Next i
stD.Delete
.ExportAsFixedFormat xlTypePDF, ThisWorkbook.Path & "\" & fileName
.Close False
End With
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub
遅くなってすみません。
書いていただいたコードは希望通りに動きましたが,内容が理解できずにお礼が遅くなってしまいました。
以下の部分について教えていただけると幸いです。コメントを付けましたが,流れも理解できていません。
-----------------------------------------------------
With ActiveWorkbook '開いているExcelファイルについて
Set stD = ActiveSheet '開いているシートをstDと定義
For i = startN To endN 'iに始点と終点を設定
stK.Range("A5").Value = stK.Cells(i + 9, 1).Value (ここはわかります)
stD.Copy after:=.Worksheets(.Worksheets.Count) (ここが特にわかりません。stDをワークシートナンバーが一番多いシートにコピぺ?)
.Worksheets(.Worksheets.Count).Range(AA).Value = stY.Range(AA).Value(ここはわかります)
Next i
stD.Delete (アクティブシートを削除?)
-----------------------------------------------------
No.2
- 回答日時:
No1です。
>いろいろなプロセスを行うコードが必要になるということですね。
意味がイマイチよくわかりませんけれど・・
要は、新規ブック(新規じゃなくて当該ブックでも良いですが)に結果を溜めておいて、出力はまとめて行えば良いのでは、というだけのことです。
あるいは、「一旦バラバラで出力してから、PDFを結合してまとめる」と言う方法もないことはないですが、こちらの方がハードルは高いはずです。
https://www.sejuku.net/blog/99185#google_vignette
ありがとうございます。
やはり難しそうですね。
簡単なコードの書き換えで実現できれば良いのですが,難しいのであれば今回はあきらめます。(希望のマクロが動くようになったときのメリットと比べて割に合わないため)
No.1
- 回答日時:
こんにちは
>おそらく,クリップボードのようなところで,1件(1行)のデータを
>様式シートに反映させたらそれを保存し~~
クリップボード利用でできるのかどうかは知りませんけれど、以下は、ひとつのアイデアです。
1)新規ブックを作成
2)様式シートを表示したら、順に上記ブックの新シートへ値をコピペ
(書式等もコピーする必要があるのなら、最初にシートを複製してテンプレート化しておく方が良いかも)
3)全シートを作成したら、ブックをまとめてPDF出力
4)作成した新規ブックを消去
という手順で、ご希望の結果を得られると思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 【VBA】マクロの入ったファイルと同じフォルダに,出力したファイルを保存するコードについて 3 2023/09/28 13:36
- Excel(エクセル) 【マクロ】ファイル名の日付によって、保管するフォルダを、自動選択したい 4 2023/08/16 11:24
- Visual Basic(VBA) VBAコードを張り付け後のエクセルの進め方 2 2023/02/07 18:24
- Visual Basic(VBA) 【VBA】カーソルのある行の1行目のセルをコピペし,最後にそのセルに戻る方法 3 2024/01/26 16:48
- Visual Basic(VBA) 【前回の続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/16 16:44
- Visual Basic(VBA) 【前回の続き続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/24 20:49
- Visual Basic(VBA) Excel VBA 文字列のセルを反映させたいです 2 2024/02/24 00:06
- Excel(エクセル) エクセルVBA、間違っているコード内容を正して頂けませんか? エクセルワークシートに納品書を作ったの 2 2023/08/02 21:13
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 2 2022/05/26 17:19
- Visual Basic(VBA) このVBAでExcelアプリケーションを作成は必要ですか? 3 2023/07/19 21:13
このQ&Aを見た人はこんなQ&Aも見ています
-
いちばん失敗した人決定戦
あなたの「告白」での大失敗を教えてください。
-
初めて自分の家と他人の家が違う、と意識した時
子供の頃、友達の家に行くと「なんか自分の家と匂いが違うな?」って思いませんでしたか?
-
"I love you" をかっこよく翻訳してみてください
あなたが考えるいちばんかっこいい "I love you"の訳を教えてください。
-
これ何て呼びますか Part2
あなたのお住いの地域で、これ、何て呼びますか?
-
人生で一番お金がなかったとき
人生で一番お金がなかったときって、どんなときでしたか?
-
Excel VBAで値を変えながら、pdf出力したい
Visual Basic(VBA)
-
【ExcelVBA】値を変更しながら連続でPDFを作成し,ファイル名を自動で付して出力するコード
Visual Basic(VBA)
-
【VBA】値を変更しながら連続でPDFを作成し,それらに印刷設定をした状態で結合するコード
Visual Basic(VBA)
-
-
4
エクセルマクロで差し込みしたものを1つのファイルでPDF化したいです
その他(Microsoft Office)
-
5
エクセルをPDFで保存し、ファイル名はA1セルを参照するVBAの記述を教えてください。
Excel(エクセル)
-
6
Excelマクロのエラーを解決したいです。
Visual Basic(VBA)
-
7
【マクロ】フォルダ内にあるPDFを合体させるには?有料版adobe必要?
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・昔のあなたへのアドバイス
- ・字面がカッコいい英単語
- ・許せない心理テスト
- ・歩いた自慢大会
- ・「I love you」 をかっこよく翻訳してみてください
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・はじめての旅行はどこに行きましたか?
- ・準・究極の選択
- ・この人頭いいなと思ったエピソード
- ・「それ、メッセージ花火でわざわざ伝えること?」
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・【お題】甲子園での思い出の残し方
- ・【お題】動物のキャッチフレーズ
- ・人生で一番思い出に残ってる靴
- ・これ何て呼びますか Part2
- ・スタッフと宿泊客が全員斜め上を行くホテルのレビュー
- ・あなたが好きな本屋さんを教えてください
- ・かっこよく答えてください!!
- ・一回も披露したことのない豆知識
- ・ショボ短歌会
- ・いちばん失敗した人決定戦
- ・性格悪い人が優勝
- ・最速怪談選手権
- ・限定しりとり
- ・性格いい人が優勝
- ・これ何て呼びますか
- ・チョコミントアイス
- ・単二電池
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・ゴリラ向け動画サイト「ウホウホ動画」にありがちなこと
- ・泣きながら食べたご飯の思い出
- ・一番好きなみそ汁の具材は?
- ・人生で一番お金がなかったとき
- ・カラオケの鉄板ソング
- ・自分用のお土産
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
XMLでデータとして画像を指定す...
-
C# DataTableに最後に追加した...
-
VBAでアクセスDBからデータの取...
-
ActiveReportのdetailをデータ...
-
VB2008,DateTimePickerで指定す...
-
VBAコンボボックスの内容が反映...
-
MSFlexGrid 行選択状態
-
エクセルのセル最終行取得
-
アクセスでウェブ上のデータを...
-
非同期のプロセス間通信(パイプ...
-
VB2010で、選択した系列を最前...
-
VB webデータの取得
-
【C#】textBoxの指定行のデータ...
-
[リボンのキーボード ショート...
-
クリスタルレポートでレコード...
-
【VB.NET】Excelの最終行までの...
-
DataGridView の読み書き
-
Excel VBA で日付を4ケタの数値...
-
access vba 『○○件づつ表示』を...
-
COBOL数値転記の仕様
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
XMLでデータとして画像を指定す...
-
C# DataTableに最後に追加した...
-
VBAでアクセスDBからデータの取...
-
【C#】textBoxの指定行のデータ...
-
VBAコンボボックスの内容が反映...
-
【VB.NET】Excelの最終行までの...
-
アクセスでウェブ上のデータを...
-
COBOL数値転記の仕様
-
「Nullの使い方が不正です」の...
-
Excel VBAでフォルダ内の全テキ...
-
【ExcelVBA】値を変更しながら...
-
Excel VBAでグループ毎に集計す...
-
クリスタルレポートでレコード...
-
VB2010で、選択した系列を最前...
-
Excel VBAで1週間毎にカテゴリ...
-
非同期のプロセス間通信(パイプ...
-
ADODBでの行番号の取得、もしく...
-
ListViewで表示されたデータの...
-
MSFlexGrid 行選択状態
-
batでレジストリキーから読み取...
おすすめ情報