Всем добрый день. Не могу сообразить как сделать такую вещь: Имеется список номеров с датой и временем.
Нужно пронумировать их по группе "Номера" и по условию. Если от 1 номера у последующих номеров прошло менее 24 часов, то нумирация идет в обычном режиме 1, 2, 3, 4 и тд. Но если более 24 часов, первый же номер после этой отметки будет так же первым и последющие будут сравниваться уже с ним.
79999999999
18.09.2019 16:07
1
79999999999
18.09.2019 17:10
2
79999999999
18.09.2019 17:17
3
79999999999
20.09.2019 17:18
1
79999999999
20.09.2019 17:19
2
79999999999
22.09.2019 17:21
1
79999999999
25.09.2019 17:21
1
Своими силами сделать не выходит, надеюсь смог более менее понятно описать. Файл во прилагаю
Интересное решение. А если номера разные?) Т.е. надо еще по номерам группировать
Я написал конечно макрос под это дело, но чисто академический интерес как это можно сделать функциями экселя
Код
Private Function Numeric_By_Groups()
Application.ScreenUpdating = False
Dim r As Long, _
LastRow As Long, _
MemDate As Date, _
Iterator As Long
Iterator = 1
Columns(8).Clear
With ActiveSheet.UsedRange
LastRow = .Rows.Count - .Row + 1
End With
For r = 2 To LastRow
With Cells(r, 2)
If Not .Value = .Offset(-1, 0).Value Then
Iterator = 1
MemDate = .Offset(0, 2).Value
.Offset(0, 6).Value = Iterator
End If
If .Value = .Offset(1, 0).Value Then
If DateDiff("h", MemDate, .Offset(0, 2).Value) < 24 Then
Iterator = Iterator + 1
.Offset(1, 6).Value = Iterator
Else
Iterator = 1
MemDate = .Offset(1, 2).Value
.Offset(1, 6).Value = Iterator
End If
Else
.Offset(1, 6).Value = Iterator
End If
End With
Next r
End Function
Не жмите бездумно на кнопку цитирования. Не пишите через строку [МОДЕРАТОР]
В целом работает, решение классное. Странно, что я изначально не додумался до этого.
Но на боевом файле не корректно сработал. Приложил пример где работает неккоректно. К сожалению приложить полный боевой файл не могу из-за соображения, что имеются конф информация. В файле 170к строк