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

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

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

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

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

Q&A

3回答

1104閲覧

VBA転記 帳票2枚を1枚に収める方法

asian-ayam

総合スコア8

VBA

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

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

0グッド

1クリップ

投稿2019/12/27 02:10

今まで仕事で手書きでエクセルシートで作成した帳票に詳細を書き込んでいたのですが、エクセルデータに入力した1行分を帳票1枚ずつに転記して帳票をPDF化したいと考えています。

帳票がA5サイズでA4サイズのプリントアウトをするとなると帳票2枚組になるのでそれらの帳票を一つのPDFファイルにしたいのですが、

案(1)エクセルシートを最初から帳票2枚組にしてエクセルデータの一行一行をループで帳票へ転記する
案(2)帳票は1枚ずつにしてPDF化するときに2枚組になるように設定する

のいずれかの案で考えているのですが、個人的には案(1)の方がやりやすいのかなと考えています。

その際、エクセルデータのデータから2枚目以降の帳票にループでエクセルデータを転記する方法(同じエクセルデータから1枚目の帳票に転記するコードと同じエクセルシートにある2枚目の帳票に転記するコードがバッティング?するのではと思い書き方に悩んでいます)と帳票を1つのPDFファイルに収める方法を教えていただけますと有難いです。

他にやりやすい方法がありましたらご教示のほどを宜しくお願い致します。

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

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

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

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

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

coco_bauer

2019/12/27 03:24

とにかく、作りかけのプログラムを質問に追加してください。 質問の文章だけでは、どんなことがしたいのか、何が問題なのか、といった事が読み取れません。
guest

回答3

0

こんにちは。よろしくおねがいいたします。
理解が間違っていたらごめんなさい。 私が理解しましたのは・・
以下のような”請求データ”シートがあって
イメージ説明
これを、以下のような「2段式」の請求書に転記して、個々にPDFで保存する、ということでよろしいですか?
イメージ説明

これで考えましたのが、以下のようなコードです。

VBA

1Option Explicit 2 3Sub CreateSeikyusho() 4 5Dim SeikyuDataSheet As Worksheet 6Set SeikyuDataSheet = ThisWorkbook.Worksheets("請求データ") 7Dim TemplateSheet As Worksheet 8Set TemplateSheet = ThisWorkbook.Worksheets("請求書テンプレート") 9 10Dim r As Range 11Dim i As Long 12Dim PDFFileName As String 13 14For i = 2 To SeikyuDataSheet.Cells(Rows.Count, 1).End(xlUp).Row Step 2 15 16With SeikyuDataSheet 17 '上段の請求書 18 TemplateSheet.Range("F4") = .Cells(i, 1).Value '請求書番号 19 TemplateSheet.Range("C6") = .Cells(i, 2).Value '請求先 20 TemplateSheet.Range("E8") = .Cells(i, 3).Value '請求金額 21 22 '下段の請求書 23 TemplateSheet.Range("F15") = .Cells(i + 1, 1).Value '請求書番号 24 TemplateSheet.Range("C17") = .Cells(i + 1, 2).Value '請求先 25 TemplateSheet.Range("E19") = .Cells(i + 1, 3).Value '請求金額 26 27'PDFのファイル名が重複しないように、とりあえず請求先名をファイル名にしました。 28 PDFFileName = "請求書" & .Cells(i, 2).Value & "-" & .Cells(i + 1, 2).Value & ".pdf" 29End With 30 31TemplateSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=PDFFileName 32 33Next I 34 35End Sub 36

これで生成されるPDFが、以下のようなイメージです。
イメージ説明

特段むずかしいことはしていません。”請求データ”シートから読みこむとき、2行をひとかたまりで読んでいるだけです。(なので for nextの部分が step 2にしています)

請求データが奇数のときは、下段の請求書は空白になってしまいますが。。それはしゃあないですね(苦笑)

投稿2020/02/15 19:03

AkiSaito

総合スコア110

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

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

0

![イメージ説明]

↑の表で、1列目に印を付けた行だけ、
テンプレートに転記してPDF化するマクロです。

仕事で個人で使うため用に作ったもの(ほぼ使い捨てるくらいの気持ちのもの)で、
誰に使ってもらうでもなく、見せる予定でもなかったので、
メッチャ雑に作ってます。^^;;
参考になれば。。。^^;

あ、1案で、2行づつ処理するように(偶数行はIF文で処理を飛ばすように)
改造したらいいかと思います。

ExcelVBA

1Option Explicit 2 3Sub test() 4 Dim Rng As Range 5 Dim r As Range 6 7 With Worksheets("一覧").Range("A1").CurrentRegion 8 Set Rng = Intersect(.Cells, .Offset(1), .Columns(1).SpecialCells(xlCellTypeConstants).EntireRow) 9 End With 10 Worksheets(Array("申請書", "申請区間")).Select 11 12 For Each r In Rng.Rows 13 With Worksheets("申請書") 14 Application.StatusBar = r.Cells(2).Value & "を出力中..." 15 .Range("K15").Value = r.Cells(3).Value 16 .Range("K17").Value = r.Cells(2).Value 17 .Range("E19").Value = r.Cells(4).Value 18 .Range("N19").Value = r.Cells(5).Value 19 Macro1 .Range("N19").Value 20 End With 21 Next 22 Application.StatusBar = False 23End Sub 24 25Sub Macro1(ByVal sName As String) 26 Dim sPath As String 27 28 sPath = CreateObject("WScript.Shell").SpecialFolders("Desktop") 29 30 On Error GoTo ErrH 31 32 ActiveSheet.ExportAsFixedFormat _ 33 Type:=xlTypePDF, _ 34 Filename:=sPath & "\" & sName & ".pdf", _ 35 Quality:=xlQualityStandard, _ 36 IncludeDocProperties:=True, _ 37 IgnorePrintAreas:=False, OpenAfterPublish:=False 38 On Error GoTo 0 39 Exit Sub 40 41ErrH: 42 Application.Wait [Now() + "0:00:00.5"] 43 Resume 44End Sub 45

参考になれば。。。

あぁ、見直したら、
For Each r In Rng.Rows
はまずいですね。
まぁ、自分用なら、
不具合がちょいちょいあっても文句言いようがないので、
不便でも対応していくしかないですね^^;
気付いたときに改良していく感じだけど、暇がないとなかなか難しいですね^^;
暇があればもうちょい真面目に作りたいのですが^^;

投稿2019/12/27 03:06

編集2019/12/27 03:16
mattuwan

総合スコア2136

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

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

0

一枚目の帳票出力のコードが書けたら、2枚目は出力開始セルをずらせばいいだけだと思います。
まずは、一枚目の帳票出力のコードを書いてみてはどうですか。
それで、その先が分からなければ、書いたコードを提示して、どの部分が分からないかピンポイントで質問するといいと思います。

投稿2019/12/27 02:55

hatena19

総合スコア33715

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問