Worksheet_Change(ByVal Target As Range)・・・End sub
・VBAシステム(仕入管理1)
・VBAシステム(仕入管理2)
・VBAシステム(仕入管理3)
につづいて
Worksheet_SelectionChange(ByVal Target As Range)・・・End sub
を解説していきます。
・Worksheet_Changeはワークシートのセル内容に変更があったときにプログラムが実行されます。
・Worksheet_SelectionChangeはセルの選択が現在のセルから他のセルに変更されたときにプログラムが実行されます。
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Application.EnableEvents = False
cr1 = Target.Row
cc1 = Target.Column
‘伝票日付の取得
If cr1 = 5 And cc1 = 5 Then
Cells(cr1, cc1) = Mid(Date, 1, 4) & Mid(Date, 6, 2) & Mid(Date, 9, 2)
End If
‘納期
If cr1 = 5 And cc1 = 15 Then
CalenderS
End If
‘候補選択
If cc1 = 1 And cr1 > 4 Then
If Cells(cr1, cc1).Value <> “” Then
Select Case Cells(4, 1).Value
Case “納期”
Cells(5, 15).Value = Cells(cr1, cc1).Value
Case “商品CODE”
ClrForm
’CODEで仕入商品呼出
cnt = UCase(Target.Value)
PickC1 (cnt)
End Select
End If
End If
‘進捗状況の変更
If cc1 = 17 Then
If cr1 > 6 And cr1 < 33 Then
Select Case Cells(cr1, cc1).Value
Case “注文書発行”
Cells(cr1, cc1).Value = “入荷済”
Cells(cr1, cc1 – 2).Value = Mid(Date, 1, 4) & Mid(Date, 6, 2) & Mid(Date, 9, 2)
Case “入荷済”
Cells(cr1, cc1).Value = “発注予約”
Case “発注予約”
Cells(cr1, cc1).Value = “注文書発行”
End Select
Cells(cr1, cc1 + 1).Select
End If
End If
Application.EnableEvents = True
End Sub
動作の説明
1. カーソルがE5セルに移動したときに伝票日付の欄に今日の日付を取得します。
2. カーソルがO5セルに移動したときに納期の候補がA6セル以下に表示されます。(下図の状態)
3. A6セル以下に候補がリストアップされた状態で納期や商品CODEを選択すると入力欄に転記します。(下図ではA16セルをクリック、納期がO5セルに転記)
4. Q列7行目から33行目までのセルを選択すると“入荷済” ⇒”発注予約”⇒”注文書発行”とテキストが変更されます。
一節ずつ解説します。
Target
cr1 = Target.Row
cc1 = Target.Column
日付の取得
‘伝票日付の取得
If cr1 = 5 And cc1 = 5 Then
Cells(cr1, cc1) = Mid(Date, 1, 4) & Mid(Date, 6, 2) & Mid(Date, 9, 2)
End If
次に日付を文字列として変換しています。今日が2022年4月1日としてDateは2022/04/01、Mid(Date, 1, 4) & Mid(Date, 6, 2) & Mid(Date, 9, 2)は”20220401″となります。
Mid(Date, 1, 4)は2022/04/01を1文字目から4文字で“2022”
Mid(Date, 6, 2)は2022/04/01を6文字目から2文字で“04”
Mid(Date, 9, 2)は2022/04/01を9文字目から2文字で“01”
それを&で結んで”20220401″となります。
Range(“E5”).Value = でE5セルに”20220401″を代入します。
‘納期日付の取得
If cr1 = 5 And cc1 = 15 Then
CalenderS
End If
CalenderSで納期候補がA6セル以下に表示されます。 プロジャーCalenderSの内容は後で記述します。
値の代入
‘候補選択
If cc1 = 1 And cr1 > 4 Then
If Cells(cr1, cc1).Value <> “” Then
Select Case Cells(4, 1).Value
Case “納期”
Cells(5, 15).Value = Cells(cr1, cc1).Value
Case “商品CODE”
ClrForm
’CODEで仕入商品呼出
cnt = UCase(Target.Value)
PickC1 (cnt)
End Select
End If
End If
2. IF文でセル選択先テキストが””、空でないことを確認してSelect文に入っていきます。
3. 1列目、4行目のセル内容が“納期”であれば、選択した納期がCells(5, 15)O15セルに転記されます。
4. 1列目、4行目のセル内容が“商品CODE”であればPickC1 (cnt)が呼び出され、選択した商品情報が転記されます。
VBAシステム(仕入管理3)pickC2で1列5行目以降に商品リストが作成されていることが前提となります。
Select Case
‘進捗状況の変更
If cc1 = 17 Then
If cr1 > 6 And cr1 < 33 Then
Select Case Cells(cr1, cc1).Value
Case “注文書発行”
Cells(cr1, cc1).Value = “入荷済”
Cells(cr1, cc1 – 2).Value = Mid(Date, 1, 4) & Mid(Date, 6, 2) & Mid(Date, 9, 2)
Case “入荷済”
Cells(cr1, cc1).Value = “発注予約”
Case “発注予約”
Cells(cr1, cc1).Value = “注文書発行”
End Select
Cells(cr1, cc1 + 1).Select
End If
End If
1. IF文でセル選択列が17列目であること、
2. IF文でセル選択行が15行目から32行目内であること、
を確認してSelect Case構文処理を行います。
3. Cells(cr1, cc1 + 1).Selectでセル選択先をひとつ横に移動します。