|
ボタンは不要です。Sheet1 のシートモジュールに、以下のイベントマクロを
入れて下さい。
E2:E31 の範囲で単一のセルに数値を入力したとき、その行のデータを
チェック & 取得して自動的に Sheet2 の適切なセル位置へ転記します。
Sheet2 は IV列 を作業列とします。ここへ入力された品番と照らし合わせ、
転記しようとしている品番が見つからないときは、IV列の最終入力行の
一つ下の行の A:L列 へ転記します。逆に品番が見つかったときは、その行の
K列 の数量のみを更新して終わります。
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Num As Long, Amot As Long
Dim Gods As String, CkV As String
Dim CkR As Variant
Const PsLine As String = _
"[x][x][x][x][x][x][x][x][x]"
If Intersect(Target, Range("E2:E31")) _
Is Nothing Then Exit Sub
With Target
If .Count > 1 Then Exit Sub
If IsEmpty(.Value) Then Exit Sub
If Not IsNumeric(.Value) Then Exit Sub
If WorksheetFunction _
.CountA(.Offset(, -4).Resize(, 5)) < 5 Then Exit Sub
Num = .Offset(, -4).Value
Gods = .Offset(, -3).Value
CkV = .Offset(, -2).Value
Amot = .Value
End With
With Worksheets("Sheet2")
CkR = Application.Match(CkV, .Range("IV:IV"), 0)
If IsError(CkR) Then
With .Range("IV65536").End(xlUp)
.Offset(1).Value = CkV
.Offset(1, -255).Value = Num
.Offset(1).Parse PsLine, .Offset(1, -254)
.Offset(1, -245).Value = Amot
.Offset(1, -244).Value = Gods
End With
Else
.Cells(CkR, 11).Value = Amot
End If
End With
End Sub
|
|