Если вы сортируете данные, у вас будет работать формула.
Если вы не можете / не хотите сортировать данные, вы можете использовать эту пользовательскую формулу ...
Public Function AssignSerialNo(ByVal strName As String, ByVal dtDate As Date, ByVal rngData As Range) As Long
Dim lngRow As Long, lngEmptyCount As Long, strThisName As String, dtThisDate As Date, strThisDate As String
Application.Volatile
AssignSerialNo = 1
' Process each row provided in the 3rd parameter. Give it 10 rows of blanks before exiting out
' and ending the process.
For lngRow = 1 To rngData.Rows.Count
strThisName = Trim(rngData.Cells(lngRow, 1))
strThisDate = rngData.Cells(lngRow, 2)
If strThisName = "" Then
lngEmptyCount = lngEmptyCount + 1
Else
lngEmptyCount = 0
If IsDate(strThisDate) Then
dtThisDate = rngData.Cells(lngRow, 2)
If UCase(strThisName) = UCase(strName) Then
' We have a match, determine if the date value is greater than or less than the parameter.
If dtThisDate < dtDate Then AssignSerialNo = AssignSerialNo + 1
End If
End If
End If
If lngEmptyCount >= 10 Then Exit For
Next
End Function
Добавьте следующую формулу в первую ячейку «Серийный номер» и заполните ...
=AssignSerialNo(A2,B2,A:B)
... все это при условии, что ваша таблица примеров (с заголовками) начинается с ячейки A1.
Дайте мне знать, как вы идете.