Количество значений/элементов между двумя датами
При работе с наборами данных, может возникнуть необходимость посчитать количество значений/элементов между двумя датами. Решить подобную задачу с помощью встроенных функций в 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.
Написать формулу для подсчета значений между двумя датами, еще проще. Нет необходимости использовать дополнительные функции, такие как «ДАТА» и «КОНЦМЕСЯЦА». Достаточно в условиях указать ссылки на ячейки, содержащие начальную и конечную дату диапазона.
Кстати, не во всех языках программирования есть стандартные функции для определения последнего дня месяца. При этом существуют стандартные функции для работы с датами, а именно для сложения и вычитания дат, и значений к датам. Так что, одним из приемов получения последнего дня месяца, является вычитание одного дня из первого дня следующего месяца.