納品書を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品以上ある場合は別途納品内訳書というシートを作成してそこに商品名、重量、数量、単価、金額を表示するようにしたいのですが、どのように組めばいいかイメージがわきません。
どうかお力添えいただけないでしょうか。
お礼
ありがとうございました! 色々と辿ってみたところ 主人が加入しているネットワークサービスの関係者から購入していたみたいです。 スッキリしました! 本当にありがとうございました!
補足
ネットワークサービスではなくて ネットワークビジネスでした(TT)