Страницы: 1
RSS
Создание выборки по датам из одного списка дат
 
Уважаемые гуру! доброго времени суток!
столкнулся с необходимостью из достаточного большого объема дат (исходная таблица содержит результаты экзамена, специальность и очень много разной другой инфы, которая на прямую не нужна в отчете о проведенных экзаменах) делать периодическую выборку о количестве проведенных экзаменах за разные периоды времени. но вот дела- то что получается - нагружает таблицу еще больше преобразованием даты в недели /месяц /квартал /год и при этом просчитывается и те диапазоны которые не должны попадать в отчет. пример во вложении  
 
ФВЛ, чет тяжеловато описание, в файле покажите исходные данные и рядом результат который должен получится.
Не бойтесь совершенства. Вам его не достичь.
 
ФВЛ, используйте сводную таблицу
 
работа только с датами без доп столбцов в зеленых ячейках
Лень двигатель прогресса, доказано!!!
 
Mershik, даты от которых отталкиваемся в колонке АА, результат должен попасть в таблицу с количеством экзаменов за период
Dark1589, нагружть таблицу нет желания и так уже нагружена, хоть и линейно но массив довольно большой
 
Цитата
ФВЛ написал:
при этом просчитывается и те диапазоны которые не должны попадать в отчет
не совсем понятно про диапазоны, но если это касается попадания данных за другой год, то вот так можно отсечь
для недель
Код
=СУММПРОИЗВ((НОМНЕДЕЛИ(--ё;2)=I16)*(ГОД(ё)=N16))
для месяцев
Код
=СУММПРОИЗВ((МЕСЯЦ(ё)=K16)*(ГОД(ё)=N16))
Лень двигатель прогресса, доказано!!!
 
Добрый день!
Посмотрите, пожалуйста, решение макросом.
Проверяйте.
Код
Public Sub Report()

LRow = Cells(Rows.Count, 1).End(xlUp).Row 'последняя заполненная строка в столбце с датами
arr = Range(Cells(1), Cells(LRow, 1))
For i = 1 To UBound(arr)
    If arr(i, 1) <> "" And DatePart("yyyy", CDate(arr(i, 1))) = DatePart("yyyy", Date) Then
        If CDate(arr(i, 1)) = Date Then
            TodayEx = TodayEx + 1
        End If
        If DatePart("ww", CDate(arr(i, 1)), vbMonday) = DatePart("ww", Date, vbMonday) And CDate(arr(i, 1)) <= Date Then
            ThisWeekEx = ThisWeekEx + 1
        End If
        If DatePart("ww", CDate(arr(i, 1)), vbMonday) - DatePart("ww", Date, vbMonday) = -1 Then
            PrevWeekEx = PrevWeekEx + 1
        End If
        If DatePart("m", CDate(arr(i, 1))) = DatePart("m", Date) And CDate(arr(i, 1)) <= Date Then
            ThisMonthEx = ThisMonthEx + 1
        End If
        If DatePart("m", CDate(arr(i, 1))) - DatePart("m", Date) = -1 Then
            PrevMonthEx = PrevMonthEx + 1
        End If
        If DatePart("q", CDate(arr(i, 1))) = DatePart("q", Date) And CDate(arr(i, 1)) <= Date Then
            ThisQuarterEx = ThisQuarterEx + 1
        End If
        If CDate(arr(i, 1)) <= Date Then
            ThisYearEx = ThisYearEx + 1
        End If
    End If
Next

Cells(18, 8) = TodayEx
Cells(18, 9) = ThisWeekEx
Cells(18, 10) = PrevWeekEx
Cells(18, 11) = ThisMonthEx
Cells(18, 12) = PrevMonthEx
Cells(18, 13) = ThisQuarterEx
Cells(18, 14) = ThisYearEx


End Sub
Изменено: Smurov - 08.10.2019 14:10:21
 
всем спасибо за ответы!
Smurov, спасибо за макрос, но я вообще далек от макросов
Сергей, отдельное СПС, Ваши формулы работают, есть загвоздка, не могу разобраться с синтаксисом "ё" таблица с данными находится на другом листе, и подвязать массив в которых находятся даты экзамена не получается, может подскажите, а то гуглю, а результатов нет :(
Изменено: ФВЛ - 09.10.2019 04:26:08
 
Ё это именнованая формула загляните в диспечер имен
Лень двигатель прогресса, доказано!!!
 
спасибо ,всё получилось!
Страницы: 1
Наверх