- ベストアンサー
エクセルのマクロで会社別・商品別に納品書を出力したい
エクセル2000のマクロを使って納品書を自動出力したいと思っています。 下のように、一覧表に数値を入力してからそれをもとに納品書を出力する、というものです。 【シート1(一覧表)の内容】 烏龍茶 ビール 日本酒 A商事 3 10 B商事 5 1 C商事 2 【シート2(納品書)の内容】 A商事 御中 「烏龍茶」 3ケース 例えば、「A商事」向けに「烏龍茶」と「ビール」の納品書を1部ずつ印刷します。 過去ログもいろいろ調べてみたのですが、なかなか良いヒントが得られませんでしたのでご教授よろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
マクロは、次の通り。 Sub test() For i = 2 To 4 For j = 2 To 4 Sheets("sheet1").Select If Cells(i, j) <> "" Then Sheets("sheet2").Cells(1, 1) = Cells(i, 1) & "御中" Sheets("sheet2").Cells(3, 1) = "「" & Cells(1, j) & "」" Sheets("sheet2").Cells(3, 2) = Cells(i, j) & "ケース" Sheets("sheet2").Select Worksheets.Print End If Next Next End Sub
その他の回答 (1)
- imogasi
- ベストアンサー率27% (4737/17070)
例 データ Sheet1 A1:D4 納品先 商品 烏龍茶 ビール 日本酒 A商事 3 10 B商事 5 1 C商事 2 ーーー Sheet2 12 月分 納品書 A1,B1,C1 下記の通り納品します B2 C商事 御中 A3,B3 空白行 商品名 数量 単価 金額 B5からE5 烏龍茶 2 B6-E6 Sheet2のA1は=MONTH(NOW())を設定してます。 ーーーーー 標準モジュールに Sub test01() Dim sh1 As Worksheet Dim sh2 As Worksheet Set sh1 = Worksheets("Sheet1") Set sh2 = Worksheets("Sheet2") '------ For i = 2 To sh1.Range("A65536").End(xlUp).Row For j = 2 To 4 If sh1.Cells(i, j) <> "" Then sh2.Cells(3, "A") = sh1.Cells(i, "A") 'A2会社名 sh2.Cells(6, "B") = sh1.Cells(1, "B") 'B5品名 sh2.Cells(6, "C") = sh1.Cells(i, j) 'C5数量 sh2.Cells(6, "D") = sh1.Cells(i, "F") 'D5単価 sh2.Cells(6, "E") = sh2.Cells(6, "C") * sh2.Cells(6, "D") 'E5金額 '--印刷 sh2.Range("A1:F10").PrintOut '---クリア(会社名以外) sh2.Cells(6, "B") = "" 'B5 sh2.Cells(6, "C") = "" 'C5 sh2.Cells(6, "D") = "" 'D5 sh2.Cells(6, "E") = "" 'E5 End If Next j '次列へ行き繰り返し '----クリア(変動セル全て) sh2.Cells(2, "A") = "" 'A2 sh2.Cells(6, "B") = "" 'B5 sh2.Cells(6, "C") = "" 'C5 sh2.Cells(6, "D") = "" 'D5 sh2.Cells(6, "E") = "" 'E5 Next i '次行へ行き繰り返し End Sub (行が変わる時の、後半クリアC,D,E列は不要かも) ーー とりあえず、上記簡単データでテストしてみてください。 5枚シートが印刷され出てくるはず。 ーーー (チューニング) まづSheet2の印刷項目が本番ではどうなるか決めて、テストの コードのどの部分に影響する(当然追加もある)か考えること。 Sheet2の不動文字(見出し、罫線、項目見出し)の内容、位置 フォントや書式(色、サイズ、種類、配置)など手作業かVBAで設定のこと。 変動セルの数量セルと得意先名セルは表示形式を手作業かVBAで設定のこと。フォント、行高、列幅、罫線なども同じ。 これらのコードは操作をして、マクロの記録をとればわかります。 ページ設定についても、マクロの結果の該当部分を、本件向きに適当に修正してください。(上記コードには、全く含めていません) 印刷範囲はSheet2が完成すれば自ずと決まる。 Sheet1が上例と変わるとどこが変わるか、じっくり考えてください。 ーーー しかし、単価のない納品書など許されるの? 単価が得意先別に品物別に決まるなら、事ですぞ。 本格的なACCESSでも使う勉強をしてください。 その点、判らないので、とりあえず上の例では、ほったらかしています。 一般に仕事に関連した、この程度のものをエクセルVBAで作るのは 余程VBAのベテランでないと難しいのでは。 アクセスを使うのが適当と思うが、これも難物。
お礼
分かりやすい説明ありがとうございます! 実は納品書ではないのです。ごめんなさい。 FAXの送付状のような書類を作成したいと思っていたのです。 書類が「A商事」向けに何件、「B商事」向けに何件という内容ですが、ネット上のサンプルを見て納付書がイメージに近いと思い、質問させて頂いた次第です。 これを機にいろいろと勉強していきたいので、よろしくお願いします。
お礼
ありがとうございました。まさにこれです! 思い通りに実現することができました。 一つひとつの意味も大体解り、自身の業務向けにアレンジしているところです。