Количество значений/элементов между двумя датами

При работе с наборами данных, может возникнуть необходимость посчитать количество значений/элементов между двумя датами. Решить подобную задачу с помощью встроенных функций в Excel, не так уж и трудно. Чаще всего такая задача возникает при формировании отчета по набору аналогичных записей.

Исходные данные

Возьмем в качестве примера такие данные.

Пример данных для подсчета количества элементов между двумя датами

Значения в первом столбце нам не важны, используем их в данном примере только как ориентиры. Потому для нас интерес представляет столбец «C» содержащий даты. Подсчет будет осуществляться по датам, так что будут отражать/представлять/указывать даты не важно. Например, пусть в первом столбце ФИО посетителей, во втором столбце даты их посещения.

Количество значений/элементом меду двумя датами, будем находить при помощи двух функции Excel, «СЧЕТЕСЛИМН» и «ДАТА». Однако использование функции «ДАТА» будет зависеть от контекста подсчёта.

Так, например, для подсчета количества элементов в рамках года или полугодия, использование функции «ДАТА» необходимо. Однако при подсчёте количества элементов за квартал или месяц можно использовать только ссылки на значения в ячейках. Возможен и комбинированный вариант применения, всё зависит от представления данных в таблице.

Подсчёт данных в пределах года

Введем в ячейку F3 формулу =СЧЁТЕСЛИМН($C$3:$C$18;»>=»&ДАТА(E3;1;1);$C$3:$C$18;»<=»&ДАТА(E3;12;31))

Количество значений между двумя датами

Разберем как работает формула:

Отличие функции «СЧЕТЕСЛИМН» от «СЧЕТЕСЛИ» заключается в возможности указания нескольких условий фильтрации. Как следствие множественная фильтрация, обеспечивает возможность подсчета значений в диапазоне.

$C$3:$C$18 – указание на диапазон ячеек, в котором будет производится подсчет. В примере задано условие фильтрации в пределах 2016 и 2017 года, в отдельности. Вводя формулу в ячейку F3 мы подсчитываем результат для 2016 года, что указано в ячейке E3. Для расчета за 2017 год, необходимо ввести формулу в ячейку F4, самый простой способ сделать это, скопировать ее из ячейки F3. В примере используются абсолютные ссылки на ячейки, потому при копировании не произойдет сдвиг ячеек, в которых осуществляется подсчет значений.

После указания диапазона, указывается логическое условие. В формуле используется строковое определение условия с добавлением к нему результата функции «ДАТА». Начало диапазона задается как «>=»&ДАТА(E3;1;1), конец диапазона как «<=»&ДАТА(E3;12;31). Знак «&» в формуле используется для соединения двух строковых значений, условия и результата функции «ДАТА».

Для того чтобы определить две даты мы используем функцию «ДАТА», первое значение функции ссылается на ячейку с данными, в нашем случае ячейки содержат года «2016» и «2017». Второй параметр функции определяет порядковый номер месяца, третий число месяца.

Таким образом результатом вычисления функции «ДАТА» в условии получаются значения первого дня года и последнего дня года. ДАТА(E3;12;31) – E3 ссылка на ячейку содержащую значение 2016. Второй параметр функции номер месяца, а третий параметр число. Соответственно результатом вычисления функции будет 31 декабря 2016 года.

В результате выполнения функций логические условия будут читаться следующим образом, например, для 2016 года: >=01.01.2016 – больше или равно 1 января 2016

<=31.12.2016 – меньше или равно 31 декабря 2016

Таким образом подсчитываться будут только те даты, которые попадают в диапазон фильтра, в текущем примере в целый год.

Подсчет данных в пределах месяца

Пример данных для подсчета количества значений между двумя датами за месяц

Для подсчета значений в месяц мы будем ссылаться не только на год, но и на месяц. В целом формула для подсчета значений за месяц похожа на подсчет за год. Отличие только в диапазоне. Проблема заключается только в определении последнего дня месяца.

Дату начала месяца определить легко, указав в функции «ДАТА» ссылки на год и месяц, а день задать константой — цифрой 1. Однако же, последний день месяца зависит от месяца, в феврале последний день может быть 28, и 29, в остальные месяцы 30 или 31 число. Поэтому для определения последнего дня лучше всего использовать функцию «КОНМЕСЯЦА». Первым параметром функции будет результат вычисления функции «ДАТА», а значение второго параметра будет равно 0.

Таким образом, формула будет иметь вид:

=СЧЁТЕСЛИМН($C$3:$C$18;»>=»&ДАТА(E7;F7;1);$C$3:$C$18;»<=»&КОНМЕСЯЦА(ДАТА(E7;F7;1);0))

Что соответствует описанию: подсчитать все значения в диапазоне $C$3:$C$18. Удовлетворяющие условию фильтра: больше или равно 1 числу месяца, номер которого указан в ячейке F7, год которого указан в ячейке E7. Притом значение должно быть меньше или равно последнему дню месяца, первое число которого вычисляется функцией и соответствует первому числу месяца, номер которого указан в ячейке F7, год указан в ячейке E7.

Написать формулу для подсчета значений между двумя датами, еще проще. Нет необходимости использовать дополнительные функции, такие как «ДАТА» и «КОНЦМЕСЯЦА». Достаточно в условиях указать ссылки на ячейки, содержащие начальную и конечную дату диапазона.

Кстати, не во всех языках программирования есть стандартные функции для определения последнего дня месяца. При этом существуют стандартные функции для работы с датами, а именно для сложения и вычитания дат, и значений к датам. Так что, одним из приемов получения последнего дня месяца, является вычитание одного дня из первого дня следующего месяца.

Добавить комментарий