Sub Test()
Dim coll As New Collection, rngResult As Range, arrIn(), arrOut(), iRow As Long, i As Long, j As Long, strFormula As String, v
strFormula = "=(VLOOKUP(V1,Sheet2!$A$2:$B$4,2,FALSE)+VLOOKUP(V2,Sheet2!$A$2:$B$4,2,FALSE)+VLOOKUP(V3,Sheet2!$A$2:$B$4,2,FALSE))"
With Range("A2:C" & Application.Max(Cells(Rows.Count, "A").End(xlUp).Row, 2))
iRow = .Row - 1
arrIn = .Value
For i = 1 To UBound(arrIn, 1)
On Error Resume Next
coll.Add key:=arrIn(i, 1), Item:=Array(arrIn(i, 1), New Collection)
On Error GoTo 0
j = InStrRev(arrIn(i, 1), ".")
If j Then coll(Left$(arrIn(i, 1), j - 1))(1).Add i
Next i
ReDim arrOut(1 To UBound(arrIn, 1), 1 To 1)
For i = 1 To UBound(arrOut, 1)
If arrIn(i, 3) = "Yes" Then
Set rngResult = Nothing
If coll(arrIn(i, 1))(1).Count Then
For Each v In coll(arrIn(i, 1))(1)
If rngResult Is Nothing Then Set rngResult = Range("G" & v + iRow) Else Set rngResult = Union(rngResult, Range("G" & v + iRow))
Next v
arrOut(i, 1) = "=MAX(" & rngResult.Address(0, 0) & ")"
Else
arrOut(i, 1) = Replace$(strFormula, "V1", "D" & i + iRow)
arrOut(i, 1) = Replace$(arrOut(i, 1), "V2", "E" & i + iRow)
arrOut(i, 1) = Replace$(arrOut(i, 1), "V3", "F" & i + iRow)
End If
Else
arrOut(i, 1) = "NO"
End If
Next i
.Resize(, 1).Offset(, 6).Formula = arrOut
End With
End Sub
Bookmarks