Формула Excel для присвоения серийного номера дубликатам с критериями даты - PullRequest
0 голосов
/ 27 января 2019

Мне нужна формула Excel, чтобы присвоить серийный номер дубликатам, но с добавленными критериями для дат в порядке возрастания.

Формула Count if "= COUNTIF ($ A $ 1: A1, A1)" назначит номерв порядке возрастания на основе строки для данных столбца A, но не на основе даты.

У меня есть таблица ниже в столбцах A и B и ожидаемый результат в столбце C

Name         Date       Serial number(Expected Result)
Apple        1/1/2019   1
Orange       2/1/2019   1
Lemon        4/1/2019   2
Banana       5/1/2019   2
Apple        8/1/2019   3
Watermelon   1/1/2019   1
Lemon        1/1/2019   1
Orange       4/1/2019   2
Banana       2/1/2019   1
Apple        5/1/2019   2

Если вы видите, что первое Apple равно 1, но следующее не 2, поскольку дата является 8-й, так что это третья дата, основанная на возрастающем порядке даты, следовательно, ее 3 и последнее Apple равны 2. Надеюсь, я ясно, чтоЯ спрашиваю.Извиняюсь за неудобства в письменной форме, так как это мой первый вопрос, и я все еще учусь.

1 Ответ

0 голосов
/ 28 января 2019

Если вы сортируете данные, у вас будет работать формула.

Если вы не можете / не хотите сортировать данные, вы можете использовать эту пользовательскую формулу ...

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.

Дайте мне знать, как вы идете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...