- 締切済み
納品書をExcelVBAで作成したいです。
初めて質問いたします。 ExcelVBAマクロで納品書を作成使用と思っております。 シートは納品一覧というシートとSetting(開始行を設定するシート)と納品書の雛形シートの3つがあります。 納品一覧シートに納品書番号、発行日、納品日、販売店、商品、重量、数量、単価、金額(金額は自動計算)を入力。 Seettingシートは開始行と使用済み納品書番号(使用済み番号は自動で入ります。) 納品書雛形はA5サイズで9品まで表示することができます。 下記のようなコードを作成しましたが、ご質問したい事があります。 Option Explicit Const Maxrow = 10000 '共通変数定義 Public wsData As Worksheet '納品データを入れる変数 Public wsRiminder As Worksheet '納品書雛形 Public wsSetting As Worksheet 'セッティング用シート Public RowsData As Long '納品データの行 Public NouhinNum As Long '納品書番号 Public r, rr, r1, r2, r_to As Integer 'for文用カウンター Public previousCilient As String Public clientname As String 'シート初期化 Sub clear_Sheet() wsRiminder.Rows("15:23").Hidden = False '隠れている行を再表示する。 wsRiminder.Range("B15:X23").Value = "" '納品書の項目、数量、単価の部分を初期化 End Sub Sub Copy_Sheet() wsRiminder.Copy before:=wsRiminder '納品書雛形をコピーする ActiveSheet.Name = NouhinNum 'シート名を納品番号にする。 Set wsRiminder = ActiveSheet 'シートをコピーすると新しくできたシートがアクティブになる。 End Sub Sub Create_Riminder(r1, r2) '請求書作成 wsRiminder.Cells(2, 30).Value = NouhinNum '納品書番号 wsRiminder.Cells(3, 30).Value = wsData.Cells(r1, 2).Value '発行日 wsRiminder.Cells(4, 30).Value = wsData.Cells(r1, 3).Value '納品日 wsRiminder.Cells(6, 1).Value = wsData.Cells(r1, 4).Value '顧客名 r_to = 15 '納品書の項目名の最初の行番号 For r = r1 To r2 With wsRiminder .Cells(r_to, 2).Value = wsData.Cells(r, 5).Value '商品名 .Cells(r_to, 20).Value = wsData.Cells(r, 6).Value '重量 .Cells(r_to, 24).Value = wsData.Cells(r, 7).Value ' 数量 .Cells(r_to, 28).Value = wsData.Cells(r, 8).Value '単価 r_to = r_to + 1 End With Next wsData.Cells(r2, 10).Value = "済" End Sub Sub Createlist_Riminder(r1, r2) '請求書の項目の部分のみ作成 For r = r1 To r2 With wsRiminder .Cells(r_to, 2).Value = wsData.Cells(r, 5).Value '商品名 .Cells(r_to, 20).Value = wsData.Cells(r, 6).Value '重量 .Cells(r_to, 24).Value = wsData.Cells(r, 7).Value ' 数量 .Cells(r_to, 28).Value = wsData.Cells(r, 8).Value '単価 r_to = r_to + 1 End With Next wsData.Cells(r2, 10).Value = "済" End Sub Sub Process_Riminder() Dim BlnRtn As Boolean Set wsData = ActiveWorkbook.Worksheets("納品一覧") Set wsSetting = ActiveWorkbook.Worksheets("Setting") Set wsRiminder = ActiveWorkbook.Worksheets("納品書雛形") RowsData = wsData.Cells(Rows.Count, 2).End(xlUp).Row 'リストの最終行番号を取得 NouhinNum = wsSetting.Cells(2, 1).Value 'for文用カウンターの定義(r1=2行目から始める,r2はリストの行数) r1 = wsSetting.Cells(2, 1).Value r2 = r1 + 1 Do While Len(Trim(wsData.Cells(r1, 4).Value)) <> 0 And wsData.Cells(r1, 9).Value <> "済" '会社名が空欄ではない場合ループする previousCilient = wsData.Cells(r1 - 1, 4).Value clientname = wsData.Cells(r1, 4).Value If wsData.Cells(r1, 9).Value <> "済" Then 'リストが作成済みになっていないもの '会社名によって初期設定される雛形シートが違う If wsData.Cells(r1, 1).Value <> wsData.Cells(r1 - 1, 1).Value Then '納品書番号が次の行と違うとき NouhinNum = wsData.Cells(r1, 1).Value For r = r1 To r2 - 1 Call clear_Sheet '雛形シートを初期化 現在の納品書の雛形ですと9品までしか表示できないので 9品以上ある場合は別途納品内訳書というシートを作成してそこに商品名、重量、数量、単価、金額を表示するようにしたいのですが、どのように組めばいいかイメージがわきません。 どうかお力添えいただけないでしょうか。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- imogasi
- ベストアンサー率27% (4737/17070)
- BarcodeMaster
- ベストアンサー率73% (17/23)
補足
回答ありがとうございます。 申し訳ございません。 以前別の質問をした時に、ソースコードもわからないのにイメージだけで回答はできないとの回答をいただいたことがあり、 その時の回答者様のとおり長いソースコードを載せてしまいました。 このプログラムは個人で作成しています。 用途は友人からの依頼なので私も帳票関係は詳しくなく、友人のイメージをただエクセルで完結するように起こしただけです。 画像の帳票もネットにあるテンプレートです。 メッセージボックスが出ることを好まない方なのでメッセージボックスは極力使うなと言われています。 そのためのセッティングシートです。 やはり帳票は行数の限界があるんですね。 プログラミングは授業で習った程度と個人で簡単に使う程度しか組んだことしかありません。 友人ともう一度帳票をしっかり勉強して再度質問したいと思います。 ありがとうございました。