|
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Dim scr As Integer
If Target.Count > 1 Then Exit Sub
If Target.Address(0, 0) <> "C2" Then Exit Sub
If Target.Value = "" Then Exit Sub
If Application.IsNumber(Target.Value) = False Then Exit Sub
If Target.Value < 40 Then
scr = 40
Else
scr = Target.Value
End If
Application.EnableEvents = False
kns = "OFFSET(Sheet21!A1,MATCH(A2,Sheet21!A:A,0)-1," & _
"MATCH(" & scr & "+19,Sheet21!1:1,1)-1,1,1)"
ans = Application.Evaluate(kns)
Range("D2").Value = ans
Application.EnableEvents = True
End Sub
上はこれ↓のエクセル関数をマクロで実行しただけ。(ちょっと違うけど)
=IF(C2<40,OFFSET(Sheet21!A1,MATCH(A2,Sheet21!A:A,0)-1,
MATCH(40+19,Sheet21!1:1,1)-1,1,1),OFFSET(Sheet21!A1,
MATCH(A2,Sheet21!A:A,0)-1,MATCH(C2+19,Sheet21!1:1,1)-1,1,1))
要は、MATCHで目的の値を検索して、A1セル基準にOFFSETで、右に〇個、下に×個づらした所を参照しているだけです。
+19は、よく解ってないけど最小の近似値を拾ってくれているみたいなので....。
50+19=69 で、50
51+19=70 で、70
69+19=88 で、70
70+19=79 で、70
71+19=80 で、80
|
|