• ベストアンサー

教えてください!!

在庫管理表を作っています。 Excelワークシートにランダムにリスト化しました。 だけど、在庫先が複数ヵ所に渡るため これをマクロを使って在庫先毎のページ単位で表示、印刷したいのです。 無論、ページ単位で列見出しも表示できるようしたいんです。 どうやったらできるのでしょう? 難しい質問かもしれませんが、 識者の方、よろしくお願いします。 昨今、マクロの学習を始めたばかりの初心者です。

質問者が選んだベストアンサー

  • ベストアンサー
  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.1

在庫管理表がSheet1にあるとします。 (指定した1社を印刷するニーズの時) 最終行を知ります。明細行が第2行から始まるとして 第2行から最終行まで、指定した在庫先を探します。 見つかれば在庫先表(Sheet2とします)にその行のデ―タ を移し、最終行まで来ると、在庫先表Sheet2を印刷します。そしてSheet2の明細行をクリアします。 (全登録製品について在庫先別に印刷する場合) シートをコピーします。コピーしたシートを在庫先をキーとして、ソートします。Sheet1を1行ずつ読んで、1行ずつ在庫先が変るまで在庫先表Sheet2に製品データを移します。在庫先が変ると直前までのデータを(Sheet2を)印刷します。そしてSheet2の明細行をクリアします。最終行までこの繰り返しです。 在庫先別表の明細行を20行として、1在庫先で、それを越える数の在庫製品は無いものとします。ある場合であれば、在庫先表に明細を移したとき、20行を越えないか チェックし、超える直前で印刷し、そしてSheet2の明細行をクリアします。 前半だけコード例を上げます。 Sub test01() 'Sheet2のB2に1個在庫先指定入力して実行->1ページ印刷 'Sheet2の明細行はB,C,D列にデータがあるものとする '-----シートの識別用 Dim sh1 As Worksheet Dim sh2 As Worksheet Set sh1 = Worksheets("Sheet1") Set sh2 = Worksheets("Sheet2") '----- d = sh1.Range("A65536").End(xlUp).Row '最終行 j = 5 'Sheet2の明細開始行 For i = 2 To d '最終行まで各行について繰り返し If sh1.Cells(i, "C") = sh2.Cells(2, "B") Then sh2.Cells(j, "B") = sh1.Cells(i, "A") sh2.Cells(j, "C") = sh1.Cells(i, "B") sh2.Cells(j, "D") = sh1.Cells(i, "C") j = j + 1 'Sheet2に書き出す行を1行下へポイントする End If Next sh2.Range("A1:D25").PrintOut j = 5 sh2.Range("B5:D24").ClearContents End Sub

AstroGuy
質問者

お礼

遅くなってすみません。 詳しく回答くださってありがとうございました。 参考にさせてもらいます。

関連するQ&A

専門家に質問してみよう