|
▼β様
>マクロ処理をしなくても、手作業で、注文書シートの該当セルの書式を変更して>おけばいいのでは?
手作業でロックしたら、注文書Sheetに
'1 Sheet注文書(E2)コードを入力enterで
'2 Sheet詳細(E列コード),(F列品名)から
' Sheet注文書(E3)に品名を持ってくる
'Sheet注文書での処理
'3 D6に値が入ったら、C6にE3の品名が入るように。
'4 D7に値が入ったら、C7にE3の品名が入るように。
'5 D8に値が入ったら、C8にE3の品名が入るように。
'6 D9に値が入ったら、C9にE3の品名が入るように。
'7 D10に値が入ったら、C10にE3の品名が入るように。
'入力のあったセルが [E2]のときは (1) を実行し、
'[D6:D10]のときは (2)を実行するように If〜 Else〜 End If構文で分岐処理
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Rg As Range
Dim c As Range
'(1) -----------------------------------------------------------
If Target.Address(0, 0) = "E2" Then
Dim m As Variant
With Worksheets("詳細") '別シートのコード照合セル範囲
Set Rg = .Range("E2", .Cells(.Rows.Count, "E").End(xlUp))
End With
Application.EnableEvents = False
If IsEmpty(Target) Then
Target.Offset(1).ClearContents
Else
m = Application.Match(Target, Rg, 0) 'Match関数で検索
If IsNumeric(m) Then
Target.Offset(1).Value = Rg.Item(m, 2).Value
Else
Target.Offset(1).ClearContents
MsgBox "入力されたコードはありません"
End If
End If
Application.EnableEvents = True
'(2) -----------------------------------------------------------
Else
Set Rg = Intersect(Target, Range("D6:D10"))
If Rg Is Nothing Then Exit Sub
Application.EnableEvents = False
For Each c In Rg
If Not IsEmpty(c.Value) Then
c.Offset(, -1).Value = Range("E3").Value
End If
Next
Application.EnableEvents = True
End If
End Sub
が、作動しないのです。
Sheets("注文書")E2,E4,G4以外ロック。
Sheets"詳細")A1:F893にロック。
Private Sub Workbook_Open()
Sheets("注文書").Select
Range("A1").Value = Date
|
|