我需要使用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 。
希望我清楚我的要求。很抱歉给您带来书面上的不便,因为这是我在这里的第一个问题,我仍在学习中。
答案 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开始。
让我知道你的生活。