- ベストアンサー
Excelで大量に伝票を作成しPDFにしたい
お世話になります。 納品書フォーマットがあります。 データの注文ナンバーをB2セルに入力すると納品書が作成されるものです。 それを1枚ずつ入力ではなく、1度に大量に作成し、PDFにするにはどうすればよろしいでしょうか。 納品書を400枚作成し、PDFにしなければならず困っております。 せめて一回貼り付ければ40枚一括で納品書、PDFが作成できるようになれば有難いです。 ご教示宜しくお願いいたします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
マクロが初めてなら,まず開発タブを表示する必要がありますね. こちらを参考に. https://office-hack.com/excel/development-tab/ 次に,標準モジュールの追加は,こちらを参考にされると良いでしょう. こちらのホームページは,Excelマクロ(正しくは VBAと言います)を勉強するのに非常に役立ちますよ. http://officetanaka.net/excel/vba/beginner/10.htm
その他の回答 (2)
- imogasi
- ベストアンサー率27% (4737/17069)
>質問者はエクセルVBAはできない、らしいから、下記は無駄でしょうが(初心者ということは、回答直前に知った)、自分の勉強もかねてやってみたので挙げてみる。 またPDF印刷も含めて印刷完了までに時間がかかると思う。 また下記以外の処理ロジックもあると思う。 ーー データ例 原データ Sheet2 A2:D11 納品先名 製品名 単価 数量 日東興業 あ製品 23 4 日東興業 い製品 451 1 日東興業 う製品 312 1 日東興業 え製品 57 3 日東興業 お製品 6 12 根本産業 え製品 57 23 根本産業 お製品 8 14 東都運送 い製品 56 2 東都運送 え製品 113 2 請求先で並べ替えておくこと <--下記のやり方ではこの点が必須 ーー Sheet1 B4:E13 請求書の枠 東都運送 御中 <-B4とC4(御中) 納品物名 数量 単価 金額 <--B6:E6 い製品 56 2 112 <--B7:E13 枠を罫線で作る。 え製品 113 2 226 標準モジュールに Sub test01() Set sh1 = Worksheets("Sheet1") '請求書シート Set sh2 = Worksheets("Sheet2") '原データシート '---- Dim fileName As String '保存先フォルダパス&ファイル名 '---- mae = sh2.Cells(3, "A") '第I行目納品先名をセット k = 6 '請求書の明細行は第7行目から sh1.Range("B7:E12").ClearContents '請求書明細行をクリア sh1.Cells(4, "B") = sh2.Cells(3, "A") '請求書宛先名をセット s = 0 '金額累計を0 '--- lr = sh2.Cells(1000, "A").End(xlUp).Row 'データ最終行の取得 '----行ごと処理を繰り返す For i = 3 To lr If mae = sh2.Cells(i, "A") Then '1行前と納品先に変化ないか k = k + 1 '--請求書に明細データセット sh1.Cells(k, "B") = sh2.Cells(i, "B") '納品物名 sh1.Cells(k, "C") = sh2.Cells(i, "C") '数量 sh1.Cells(k, "D") = sh2.Cells(i, "D") '単価 sh1.Cells(k, "E") = sh2.Cells(i, "C") * sh2.Cells(i, "D") '金額 s = s + sh2.Cells(i, "C") * sh2.Cells(i, "D") '金額を加算し累計算出 mae = sh2.Cells(i, "A") Else '--納品先が変わった 作成中請求書印刷 sh1.Cells(13, "E") = s s = 0 '金額累計を0 'sh1.Range("B3:E14").PrintOut fileName = ThisWorkbook.Path & "\201603請求書_" & mae & "御中.pdf" MsgBox fileName sh1.ExportAsFixedFormat Type:=xlTypePDF, fileName:=fileName '--編集中セル範囲クリア sh1.Range("B7:E12").ClearContents '請求書明細部分クリア '--- sh1.Cells(4, "B") = sh2.Cells(i, "A") '請求先セット k = 7 '請求書明細開始行 sh1.Cells(k, "B") = sh2.Cells(i, "B") '納品物名 sh1.Cells(k, "C") = sh2.Cells(i, "C") '数量 sh1.Cells(k, "D") = sh2.Cells(i, "D") '単価 sh1.Cells(k, "E") = sh1.Cells(k, "C") * sh1.Cells(k, "D") '金額 s = s + sh2.Cells(i, "C") * sh2.Cells(i, "D") '金額を加算し累計算出 mae = sh2.Cells(i, "A") End If Next i 'データ行終了時処理 sh1.Cells(13, "E") = s 'sh1.Range("B3:E14").PrintOut '---PDFファイル出力 fileName = ThisWorkbook.Path & "\201603請求書_株式会社" & mae & "御中.pdf" MsgBox fileName sh1.ExportAsFixedFormat Type:=xlTypePDF, fileName:=fileName End Sub 実行すると、上記例データでは、得意先3社の請求書が3PDFファイルになってできる。 これをPDF文書を印刷するソフトで、印刷せねばならない。 あるいは各得意先に、通信を使って配るとすれば、大変なスキルが要ると思う。 PDFでなくて、シートを印刷するなら、PDFファイル作成行(2か所)消して sh1.Range("B3:E14").PrintOut(2か所)を生かせばよい。 == 明細の1ページあたりの行数をオバーする場合のことは上記では省略している。 === 請求書作成などは、会社の基幹業務で、普通は業者に頼むか、専用ソフトを使うだろう。 ーー VBAを使わないでやるのは現実的ではない。 使っても、上記は、おもちゃみたいなもの。実際は色々考慮すべき点があり、難しい。 上記も、ぼろが、あるかもしれないが。 ーー VBAなどを使うことを、甘く見てはいけないよ。小生の経験で、周りの人を見ていても、出来ないタイプの人は、出来ない。
お礼
マクロは全くわかりませんが、勉強しようと思います。 有難うございました。
- masnoske
- ベストアンサー率35% (67/190)
注文書フォーマットが Sheet1 にあるとします。 注文ナンバーのリストが Sheet2 のA1セルから下方向に空白セルなしで入力されているとします。 PDFのファイル名は 注文ナンバー.pdf とします。 標準モジュールに以下のコードを貼り付けて実行して下さい。 シート名とファイルの保存先は、適宜変更して下さい。 Public Sub Test() Const PDF_PATH = "D:\test" ' PDFファイルの保存場所 Dim shForm As Worksheet ' 納品書フォームのワークシート Dim shOrder As Worksheet ' 注文リストのワークシート Dim rngOrder As Range ' 注文ナンバーリストが入力されている範囲 Dim strFilename As String ' PDFファイル名 Dim rng As Range Set shForm = Worksheets("Sheet1") Set shOrder = Worksheets("Sheet2") Set rngOrder = Range(shOrder.Range("A1"), shOrder.Range("A1").End(xlDown)) For Each rng In rngOrder shForm.Range("B2").Value = rng.Value strFilename = shForm.Range("B2").Value & ".pdf" shForm.ExportAsFixedFormat Type:=xlTypePDF, Filename:=PDF_PATH & "\" & strFilename Next Set shForm = Nothing Set shOrder = Nothing Set rngOrder = Nothing Set rng = Nothing End Sub
お礼
ありがとうございます。 マクロは全然わからないのですが、やってみます!取り急ぎお礼まで☆
お礼
周りに助けられながらなんとかできました。 何度も、有難うございました!