Solução VBA:
Aqui está uma solução do VBA usando o evento Worksheet_Change conforme sugerido. Isso lerá a entrada do usuário de F1 e colocará a saída em F2. Presume-se que os dados estejam nas colunas A e B. Para alterar esses locais, você precisará substituir cada instância de cada um com seus endereços de entrada, saída e dados desejados.
Private Sub Worksheet_Change(ByVal Target As Range)
Dim userInput As Variant, codeTable() As Variant, maxDate As Long
Application.EnableEvents = False
'Make sure worksheet change affected user input cell
If Not Intersect(Range("F1"), Target) Is Nothing Then
userInput = Range("F1").Value
If userInput = "" Then
Range("F2") = ""
Else
'Store table data in an array for fast processing
codeTable = Range("A2", Range("B1").End(xlDown)).Value
maxDate = 0
'Find max date for input code
For i = LBound(codeTable, 1) To UBound(codeTable, 1)
If codeTable(i, 2) = userInput Then
maxDate = Application.WorksheetFunction.Max(maxDate, codeTable(i, 1))
End If
Next i
'Print output to sheet
If maxDate = 0 Then
Range("F2") = "No records"
Else
Range("F2") = Format(maxDate, "m/d/yyyy")
End If
End If
End If
Application.EnableEvents = True
End Sub
Solução de fórmula:
Você pode obter o mesmo resultado com uma fórmula de matriz - não é necessário adicionar o VBA à sua pasta de trabalho.
Na sua célula de saída desejada, cole o seguinte na barra de fórmulas e depois pressione Ctrl + Deslocar + Enter .
=MAX(($B$2:$B$21=F1)*A2:A21)
Nesta fórmula, B2:B21
mantém seus códigos de ação e A2:A21
são as datas associadas.
Exemplo de saída (ambas as soluções):