Use this:
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 3 Then
Call lmp_Test_WithFormula
End If
End Sub
Code:
Sub lmp_Test_WithFormula()
Dim rngData As Range
Dim rngFindData As Range
Dim rngCell As Range
Const strShtName As String = "Sheet3"
Const strDataStartCell As String = "A2"
Const strValueToCheckCell As String = "C2"
Application.Calculation = xlCalculationManual
With ThisWorkbook
With .Worksheets(strShtName)
Set rngData = .Range(strDataStartCell)
Set rngData = rngData.Resize(.Cells(.Rows.Count, rngData.Column).End(xlUp).Row)
If WorksheetFunction.CountA(rngData) Then
Set rngFindData = rngData.Offset(, 2)
If WorksheetFunction.CountA(rngFindData) Then
For Each rngCell In rngFindData
rngCell.Offset(, 1).Value = vbNullString
If LenB(Trim(rngCell.Value)) > 0 Then
rngCell.Offset(, 1).FormulaArray = "=INDEX(" & rngData.Offset(, 1).Address & ", MIN(IF((" & rngData.Address & "=" & rngCell.Address(0, 1) & "),ROW(" & rngData.Address & "),""""))-1)"
rngCell.Offset(, 2).FormulaArray = "=MIN(IF((" & rngData.Address & "=" & rngCell.Address(0, 1) & ")," & rngData.Offset(, 1).Address & ",""""))"
rngCell.Offset(, 3).FormulaArray = "=MAX(IF((" & rngData.Address & "=" & rngCell.Address(0, 1) & ")," & rngData.Offset(, 1).Address & ",""""))"
rngCell.Offset(, 4).FormulaArray = "=INDEX(" & rngData.Offset(, 1).Address & ", MAX(IF((" & rngData.Address & "=" & rngCell.Address(0, 1) & "),ROW(" & rngData.Address & "),""""))-1)"
End If
Next rngCell
End If
End If
End With
End With
Application.Calculation = xlCalculationAutomatic
Set rngData = Nothing
Set rngFindData = Nothing
Set rngCell = Nothing
End Sub
Bookmarks