Добрый день! Прошу совета по экселю. Есть данные за период 01.04 по 30.04.2018 посещение ресурса клиента. Нужно по индивидуальному ID вычислить за определенный промежуток времени в какие дни был произведен вход. Дано: лист 1 ФИО, индивидуальный ID, дата начала, дата окончания. лист 2 дата и время, индивидуальный ID. Задача: Найти и подставить в (столбец Е) сколько раз клиент посещал за определенный период с даты начала(столбец С) по дату окончания(столбец D). Лист2 данные посещения за период 01.04 по 30.04.2018. Если подымалась аналогичная тема, прошу дать ссылку. Пример в файле. Спасибо.
Добрый день! Прошу совета по экселю. Есть данные за период 01.04 по 30.04.2018 посещение ресурса клиента. Нужно по индивидуальному ID вычислить за определенный промежуток времени в какие дни был произведен вход. Дано: лист 1 ФИО, индивидуальный ID, дата начала, дата окончания. лист 2 дата и время, индивидуальный ID. Задача: Найти и подставить в (столбец Е) сколько раз клиент посещал за определенный период с даты начала(столбец С) по дату окончания(столбец D). Лист2 данные посещения за период 01.04 по 30.04.2018. Если подымалась аналогичная тема, прошу дать ссылку. Пример в файле. Спасибо.Keks
Я не правильно поставил вопрос. мне нужно узнать по ID(логину) когда были произведен вход в период с 16.04.2018 29.04.2018 до и после нужно отсекать. И так по каждому ID.
Я не правильно поставил вопрос. мне нужно узнать по ID(логину) когда были произведен вход в период с 16.04.2018 29.04.2018 до и после нужно отсекать. И так по каждому ID.Keks
Сообщение отредактировал Keks - Понедельник, 07.05.2018, 16:34
Уже ближе, но у каждого ID свой интервал времени в столбце С и D, для каждого ID и нужно вычислить в его периоде входил или не входил. В листе1 строка 2 пример f.zadrigailov с даты 16.04.2018 по 29.04.2018 входил 10 раз (даты входа 17.04.2018 8:58, 18.04.2018 9:14, 19.04.2018 9:06, 20.04.2018 9:00, 23.04.2018 8:58, 24.04.2018 8:47, 25.04.2018 8:52, 26.04.2018 10:39, 27.04.2018 9:00, 28.04.2018 9:15)
Уже ближе, но у каждого ID свой интервал времени в столбце С и D, для каждого ID и нужно вычислить в его периоде входил или не входил. В листе1 строка 2 пример f.zadrigailov с даты 16.04.2018 по 29.04.2018 входил 10 раз (даты входа 17.04.2018 8:58, 18.04.2018 9:14, 19.04.2018 9:06, 20.04.2018 9:00, 23.04.2018 8:58, 24.04.2018 8:47, 25.04.2018 8:52, 26.04.2018 10:39, 27.04.2018 9:00, 28.04.2018 9:15) Keks
Особо тестировать некогда, посмотрите, вдруг подойдет
[vba]
Код
Public Sub Fill()
Dim Str As String, D, D1, D2 As Date
For i = 2 To Worksheets("лист1").Cells(Rows.Count, 1).End(xlUp).Row Str = Worksheets("лист1").Cells(i, 5).Value For j = 1 To 100 TZ = InStr(Str, ":") If TZ = 0 Then Exit For L = TZ + 2 D1 = Worksheets("лист1").Cells(i, 3).Value D2 = Worksheets("лист1").Cells(i, 4).Value D = Left(Str, L) If (D >= D1) And (D <= D2) Then Counter = Counter + 1 Worksheets("Лист3").Cells(Counter, 1).Value = Left(Str, L) Worksheets("Лист3").Cells(Counter, 2).Value = Worksheets("лист1").Cells(i, 2).Value End If If L = Len(Str) Then Exit For Str = Right(Str, Len(Str) - L - 1) Next j Next i
End Sub
[/vba]
Макрос подвешен на Ctrl+q. Заполняет пустой лист Лист3
Особо тестировать некогда, посмотрите, вдруг подойдет
[vba]
Код
Public Sub Fill()
Dim Str As String, D, D1, D2 As Date
For i = 2 To Worksheets("лист1").Cells(Rows.Count, 1).End(xlUp).Row Str = Worksheets("лист1").Cells(i, 5).Value For j = 1 To 100 TZ = InStr(Str, ":") If TZ = 0 Then Exit For L = TZ + 2 D1 = Worksheets("лист1").Cells(i, 3).Value D2 = Worksheets("лист1").Cells(i, 4).Value D = Left(Str, L) If (D >= D1) And (D <= D2) Then Counter = Counter + 1 Worksheets("Лист3").Cells(Counter, 1).Value = Left(Str, L) Worksheets("Лист3").Cells(Counter, 2).Value = Worksheets("лист1").Cells(i, 2).Value End If If L = Len(Str) Then Exit For Str = Right(Str, Len(Str) - L - 1) Next j Next i
End Sub
[/vba]
Макрос подвешен на Ctrl+q. Заполняет пустой лист Лист3abtextime
Function Daty(Baz_ As Range, ID_, d0_, d1_) d0_ = CDate(d0_) d1_ = CDate(d1_) Baz1_ = Baz_.Value For i = 1 To UBound(Baz1_) If Baz_(i, 2) = ID_ Then If CDate(Baz_(i, 1)) >= d0_ Then If CDate(Baz_(i, 1)) <= d1_ Then t_ = t_ & vbLf & Baz_(i, 1) End If End If End If Next i Daty = Mid(t_, 2) End Function
[/vba]
Пользовательская функция [vba]
Код
Function Daty(Baz_ As Range, ID_, d0_, d1_) d0_ = CDate(d0_) d1_ = CDate(d1_) Baz1_ = Baz_.Value For i = 1 To UBound(Baz1_) If Baz_(i, 2) = ID_ Then If CDate(Baz_(i, 1)) >= d0_ Then If CDate(Baz_(i, 1)) <= d1_ Then t_ = t_ & vbLf & Baz_(i, 1) End If End If End If Next i Daty = Mid(t_, 2) End Function