Excel公式将序列号分配给具有日期条件的重复项

时间:2019-01-27 18:26:16

标签: excel-formula numbers

我需要使用Excel公式为重复项分配序列号,但要按日期升序添加条件。

如果公式“ = 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 :(得分:1)

如果对数据进行排序,那么您拥有的公式将起作用。

如果您无法/不愿对数据进行排序,则可以使用此自定义公式...

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开始。

让我知道你的生活。