前回までに注文書の発行まで進めてきました。このあと実業務として注文書がメールやFAXで注文先の送信され、材料が手配され、最終的には納品されます。納品された材料は注文内容と照合され計上処理されます。
システム上の処理の流れは、該当する行の「進捗状況」Q列をクリックして「注文書発行」から「入荷済」に変更します。数量や納入日に変更がある場合には直接セルの変更を行います。
続いて「計上」ボタンを押すと仕入実績にデータが転記されます。
「入荷済」処理のプログラムは「仕入管理4(Worksheet_SelectionChange)」後半部分で説明しています。
「計上」ボタンのmodule全体
Sub Reg_071() ‘仕入計上
Application.EnableEvents = False
‘仕入実績テーブル最下行の取得
Set DTH1 = Worksheets(“仕入実績”).Range(“A1”).CurrentRegion
rc1 = DTH1.Rows.Count + 1
‘ID番号の作成
Dim maxVal As Long
maxVal = Application.WorksheetFunction.Max(Range(DTH1.Cells(2,1), DTH1.Cells(rc1, 1)))
maxVal = maxVal + 1
‘データ登録(計上予約テーブルから仕入実績へ)
h = 7
f = 0
Do While Cells(h, 5).Value <> “”
If Cells(h, 17).Value = “入荷済” Then
DTH1.Cells(rc1, 1).Value = maxVal
For k = 5 To 16
DTH1.Cells(rc1, k – 3).Value = Cells(h, k).Value
Next
DTH1.Cells(rc1, 14).Value = Left(Cells(h, 15).Value, 6) ‘入荷月
maxVal = maxVal + 1
rc1 = rc1 + 1
Range(Cells(h, 2), Cells(h, 18)).Delete ‘予約リストから行削除
h = h – 1
f = f + 1
End If
h = h + 1
Loop
If f = 0 Then
MsgBox (“該当がありません。”)
Else
MsgBox (“登録されました。”)
End If
Application.EnableEvents = True
End Sub
一説ずつ解説していきます。
データ登録準備
仕入実績テーブル、データ範囲の設定
‘仕入実績テーブルデータ範囲最下行の取得
Set DTH1 = Worksheets(“仕入実績”).Range(“A1”).CurrentRegion
rc1 = DTH1.Rows.Count + 1
DTH1.Rows.Countで最下行を取得します。
最下行に1を足して、転記する行とします。
ID番号の作成
‘ID番号の作成
Dim maxVal As Long
maxVal = Application.WorksheetFunction.Max(Range(DTH1.Cells(2,1), DTH1.Cells(rc1, 1)))
maxVal = maxVal + 1
Application.WorksheetFunction.Max(Range(DTH1.Cells(2,1), DTH1.Cells(rc1, 1)))
最大値に1を足して新規のID値とします。
データ登録
その中から「入荷済」データを抽出してデータを転記しています。
Do While…Loop,IF…Then…End if
Do While Cells(h, 5).Value <> “”
If Cells(h, 17).Value = “入荷済” Then
(中略1)
End If
h = h + 1
Loop
仮に、手入力で空欄行があると、そこで処理が止まってしまいます。
入力修正を行うセルを除いて、ワークシートの保護を使うなど対策が必要です。
Q列の進捗状況「入荷済」を抽出してデータ登録します。
データ転記と消去
(中略1)の中身
DTH1.Cells(rc1, 1).Value = maxVal
For k = 5 To 16
DTH1.Cells(rc1, k – 3).Value = Cells(h, k).Value
Next
DTH1.Cells(rc1, 14).Value = Left(Cells(h, 15).Value, 6) ‘入荷月
maxVal = maxVal + 1
rc1 = rc1 + 1
Range(Cells(h, 2), Cells(h, 18)).Delete ‘予約リストから行削除
h = h – 1
DTH1には Set DTH1 = Worksheets(“仕入実績”).Range(“A1”).CurrentRegion
でワークシート「仕入実績」のデータ範囲が設定されています。
ではID番号
For k = 5 To 16
DTH1.Cells(rc1, k – 3).Value = Cells(h, k).Value
Next
では入荷処理した内容
DTH1.Cells(rc1, 14).Value = Left(Cells(h, 15).Value, 6)
では入荷日を利用して入荷月を作成、登録しています。
また、h = h – 1でDELETEした分hのカウントを一つ引きます。
登録完了メッセージ
f = f + 1
If f = 0 Then
MsgBox (“該当がありません。”)
Else
MsgBox (“登録されました。”)
End If
Application.EnableEvents = False
Application.EnableEvents = True
については「VBAプログラム(ワークシートイベント1)」Application.EnableEventsをご参照ください。