Месяц по дням в экселе. Функции времени год, месяц, день в excel. Остаток от деления: mod и ⌊⌋

(Часть I ), а также авторским к нему дополнением (Часть II ). Не следует относиться к материалу серьёзно, а скорее как к разминке для ума, требующей не более чем школьных знаний арифметики и не имеющей практического применения. Всем приятного чтения!

Часть I

Вступление

Недавно, после очередной бессонной ночи, я размышлял о методах запоминания количества дней в каждом месяце года. Для этого есть считалочка, а также способ считать на костяшках пальцев, но ни то, ни другое меня не устроило. Я задумался, а не существует ли какой-нибудь математической формулы для решения такой задачи, и - не обнаружив при беглом изучении таковую - бросил себе вызов её создать.

Формализуя Другими словами, необходимо найти функцию f , такую, что значение f(x) для каждого месяца x , представленного числом от 1 до 12, равняется количеству дней в этом месяце. Таблица значений аргумента и функции :

Пример: рассчитать разницу между двумя датами

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

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

x 1 2 3 4 5 6 7 8 9 10 11 12
f(x) 31 28 31 30 31 30 31 31 30 31 30 31

Если у вас возникло желание попробовать самому до прочтения моего решения, то сейчас самое время. Если же вы предпочитаете немедленно увидеть готовый ответ, то посмотрите под спойлер.

Ответ


Ниже следуют мои шаги по нахождению решения.

Математический аппарат

Сначала бегло освежим в памяти два жизненно необходимых в решении этой задачи оператора: целочисленное деление и остаток от деления.

Целочисленное деление это оператор, применяемый во многих языках программирования при делении двух целых чисел и отбрасывающий от частного дробную часть. Я буду изображать его как . Например:

Остаток от деления это оператор, находящий остаток от деления. Во многих языках программирования применяется символ % , я же буду использовать конструкции вида , например:

Замечу, что остаток от деления имеет равный с делением приоритет.

Стандартизируя количество дней в месяц, компании могут ежемесячно или год за годом проводить сравнения, которые обычно не были бы возможны, учитывая, что количество дней в месяц может составлять от 28 до 31 года. Эти сравнения могут относиться к прибыли, расходам или, в случае с финансовой сферой, сумме процентов, полученных от инвестиций.

Остаток от деления: mod и ⌊⌋

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

Основы

Итак, применим наш математический аппарат для получения базовой формулы. В обычном месяце 30 или 31 день, так что мы можем использовать для получения поочерёдно 1 или 0, а затем просто прибавить к этому числу константу:

Получаем таблицу, полужирным выделены корректные значения:
x 1 2 3 4 5 6 7 8 9 10 11 12
f(x) 31 30 31 30 31 30 31 30 31 30 31 30

Неплохое начало! Уже есть правильные значения для января и для месяцев с марта по июль включительно. Февраль - особый случай, и с ним мы разберёмся чуть позже. После июля для оставшихся месяцев порядок получения 0 и 1 должен быть изменён на обратный.
Для этого мы может прибавить к делимому 1:

x 1 2 3 4 5 6 7 8 9 10 11 12
f(x) 30 31 30 31 30 31 30 31 30 31 30 31

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

Наложение маски

Для этого необходима кусочно-заданная функция, но - так как мне это показалось скучным - я задумался о другом пути решения, использующем одну часть функции на одном интервале, другую - на другом.
Полагаю, что проще всего будет найти выражение, равное 1 в одной области применения и 0 - в остальной. Метод, в котором умножая аргумент на выражение мы исключаем его из формулы вне области его применения, я назвал «наложением маски», потому такое поведение подобно некой битовой маске.
Для применения этого метода в последней части нашей функции необходимо найти выражение, равное 1 при , и - так как значения аргумента всегда меньше 16 - для этого прекрасно подходит целочисленное деление на 8.
x 1 2 3 4 5 6 7 8 9 10 11 12
x ⁄ 8 ⌋ 0 0 0 0 0 0 0 1 1 1 1 1

Теперь с помощью этой маски, используя в делимом выражение вместо 1, мы можем заменить порядок получения 0 и 1 формуле на обратный:

x 1 2 3 4 5 6 7 8 9 10 11 12
f(x) 31 30 31 30 31 30 31 31 30 31 30 31

Эврика! Всё правильно, кроме февраля. Сюрприз-сюрприз.

Февраль

В любом месяце 30 или 31 день, кроме февраля с его 28 (високосный год выходит за рамки этой задачи). На текущий момент по нашей формуле в нём 30 дней, поэтому неплохо бы вычесть выражение, равное 2 при .
Лучшее что мне удалось придумать это , что накладывает маску на все месяцы после февраля:
x 1 2 3 4 5 6 7 8 9 10 11 12
2 mod x 0 0 2 2 2 2 2 2 2 2 2 2

Изменив базовую константу на 28 с добавлением 2 к остальным месяцам получим формулу:

x 1 2 3 4 5 6 7 8 9 10 11 12
f(x) 29 28 31 30 31 30 31 31 30 31 30 31

К сожалению, январь теперь короче на 2 дня. Но, к счастью, получить выражение, которое будет применяться только для первого месяца очень легко: это округлённое вниз обратное к число. Умножив его на 2 получаем окончательную формулу:

x 1 2 3 4 5 6 7 8 9 10 11 12
f(x) 31 28 31 30 31 30 31 31 30 31 30 31

Послесловие

Вот она - формула для получения количества дней в любом месяце года, использующая простейшую арифметику. В следующий раз когда вы будете вспоминать сколько же дней в сентябре, просто выполните с помощью этой однострочной функции на JavaScript:

Function f(x) { return 28 + (x + Math.floor(x/8)) % 2 + 2 % x + 2 * Math.floor(1/x); }




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

Если количество введенных месяцев превышает декабрь, то год будет автоматически увеличен, на самом деле. Если вместо этого вы хотите вычесть месяцы, ничего не остается, как вставить отрицательное число в параметр месяцев. Фактически, наиболее распространенная ошибка заключается в том, чтобы добавить 365 дней, умноженных на количество лет до даты таким образом. Этот метод неверен, потому что в случае високосных лет он также изменит день, а иногда и месяц и год.

Часть II

Вступление

В первой части была получена короткая и даже немного изящная формула, основными достоинствами которой являются простота математического аппарата, отсутствие ветвлений и условных выражений, лаконичность. К недостаткам - кроме того, что вы не будете применять её в вашем проекте - можно отнести отсутствие проверки на вискокосный и не високосный год.
Поэтому я поставил перед собой задачу создать функцию f , такую, что значение f(x, y) для каждого месяца x , представленного числом от 1 до 12 и года y , большего 0, равняется количеству дней в месяце x в году y .
Для нетерпеливых под спойлером находится готовый ответ, остальных же прошу следовать за мной.

Ответ

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

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

Остаток от деления: mod и ⌊⌋

Для визуальной наглядности договоримся, что в некоторых формулах оператор деления с остатком заменён нижними скобками, там где это показалось мне необходимым:

Високосный год

В високосный год вводится дополнительный день календаря: 29 февраля. Как известно, високосным является год, кратный 4 и не кратный 100, либо кратный 400. Запишем тождественное этому высказыванию выражение:

Для приведения этого выражения в алгебраическое, необходимо применить к результату выражения инъекцию вида:

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

И с этой целью первая часть операций по датам, мы увидим, как работать с разницей между двумя датами и тем, как действовать в часы и минуты. Он является частью так называемых «условных» функций, поскольку он возвращает результат, основанный на условии, которое мы устанавливаем.

Что позволит получить 1 при делении без остатка и 0 при делении с остатком, чтобы использовать её в формуле определения количества дней в месяце.

В качестве функции g" можно использовать 1 минус остаток от деления для :

x 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14
g"(x) Infinity 1 0 0 0 0 0 0 0 0 0 0 0 0 0

Легко заметить, что увеличив делимое и делитель на 1 мы получим правильную формулу при :
x 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14
g"(x) 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0

Таким образом выражение запишем как:

Эта операция должна быть вставлена ​​вместо второго параметра функции. Эта операция вместо этого будет вставлена ​​в третий параметр. Итак, в конце наша функция написана. Предположим, что мы должны оценить кандидатов, которые сдавали тесты, чтобы быть допущенными к определенному курсу. Наша цель состоит в том, чтобы узнать, допущено или не допущено к участию в курсе от среднего числа голосов. Мы создаем таблицу в электронной таблице, где мы укажем имена кандидатов и баллы, полученные в каждом тесте.

Указывает одну или несколько ячеек, которые должны быть подсчитаны, содержащие числа или имена, массивы или ссылки, содержащие числа. Номер, выражение, ссылка на ячейку или текстовая строка, которая определяет, какие ячейки будут подсчитываться. В критериях можно использовать подстановочные знаки, то есть знак вопроса и звездочку, которые соответственно представляют один символ и последовательность символов.

  • Пустые ячейки и текстовые значения будут игнорироваться.
  • Обязательные критерии.
  • Если вы хотите найти знак вопроса или звездочку, прикрепите тильду к символу.
  • Критерии не чувствительны к регистру.
Мы хотим моделировать график рабочего времени.


А выражение запишем как:

Применяя этот подход получим следующую функцию g(y) , значением которой будет 1, если год високосный, или 0 в обратном случае:

y 1990 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000
g(y) 0 0 1 0 0 0 1 0 0 0 1
y 2000 2100 2200 2300 2400 2500 2600 2700 2800 2900 3000
g(y) 1 0 0 0 1 0 0 0 1 0 0

Полужирным выделены високосные года.

Напоминаю, что в рамках принятой договорённости оператор получения остатка от деления может быть изображен как mod , так и ⌊⌋.

Значение Это значение для поиска в первом столбце массива. Значение может быть значением или ссылкой. Используйте ссылку на диапазон или имя диапазона. Прописные и строчные буквы эквивалентны. Если точное совпадение не найдено, возвращается следующее наибольшее значение ниже значения. Давайте посмотрим на возможную примерную таблицу: мы хотим подсчитать, сколько продуктов «яблоки» поступает из Италии.

Как вы можете видеть, только дважды сочетается присутствие «яблок» с «Италией». Однако, если мы хотим решить одну функцию и использовать только одну ячейку, мы можем использовать следующую матричную формулу. В этих таблицах каждая строка представляет собой однородный набор информации, и каждый столбец является конкретным полем, которое составляет и определяет часть информации.

Наложение маски

В формуле часть является поправкой, прибавляющей 2 дня к январю. Если убрать множитель 2 и в числителе заменить 1 на 2, тогда эта формула будет прибавлять 2 дня к январю и 1 день к февралю, что даёт нам ключ к добавлению дня в високосном году. Для наглядности используем в формуле промежуточное значение g(y) и в качестве y используем 2000 (високосный) и 2001 (не високосный) годы:

Или:

x 1 2 3 4 5 6 7 8 9 10 11 12
f(x, 2000) 31 29 31 30 31 30 31 31 30 31 30 31
f(x, 2001) 31 28 31 30 31 30 31 31 30 31 30 30

Заключение

В результате получена уже значительно более громоздкая, но более универсальная формула, которую также можно использовать для получения количества дней в месяце определённого года:

Function f(x, y) { return 28 + ((x + Math.floor(x / 8)) % 2) + 2 % x + Math.floor((1 + (1 - (y % 4 + 2) % (y % 4 + 1)) * ((y % 100 + 2) % (y % 100 + 1)) + (1 - (y % 400 + 2) % (y % 400 + 1))) / x) + Math.floor(1/x) - Math.floor(((1 - (y % 4 + 2) % (y % 4 + 1)) * ((y % 100 + 2) % (y % 100 + 1)) + (1 - (y % 400 + 2) % (y % 400 + 1)))/x); }
Пример на C# ideone.com/fANutz .

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

После выбора команды выберите вкладку «Лист» и в появившемся диалоговом окне, чтобы заполнить строки, чтобы они повторялись вверху. В этой статье мы создадим график управления просроченными счетами, которые должна собрать воображаемая компания. Мы увидим, по истечении установленного срока, какая сумма счетов истекает через 30 дней, 60 дней, 90 дней и так далее.

1 . Я не умею пользоваться подобной мнемоникой, поэтому подсмотрел табличку в интернете.
2 . «Основы», или «Правило С Многими Исключениями», как и большинство правил.
3 . Изначально в римском календаре февраль был последним месяцем года, поэтому есть логика в том, что он короче всех остальных. Также есть логика в добавлении или удалении дня именно в конце года, поэтому его длина является переменной.

График просроченных счетов-фактур

Подпишитесь сейчас с ежемесячным или ежегодным решением. Мы будем работать с файлом расписания, который находится в книжном магазине книги, из которой эта статья взята. Этот файл состоит из двух листов, один из которых, Список кулаков, показанный на рисунке 1, показывает, что счета-фактуры истекли и еще не обналичены.

Создайте список уникальных данных

Здесь нас ждут расширенные фильтры. Затем перейдите на вкладку «Данные» и в группе «Сортировка и фильтр» нажмите кнопку «Дополнительно». Появится окно расширенного фильтра, показанное на рисунке 3. Выберите «Копировать» в другое место, затем в поле «Диапазон списка» выберите столбец А. Оставьте поле «Критерии» пустым. К сожалению, невозможно скопировать отфильтрованные данные в лист, отличный от активного. После того, как вы получите уникальный список клиентов, мы скопируем его в лист расписания счетов.

Upd. 1:
Альтернативный перевод первой части в

Добрый день уважаемый пользователь!

В этой статье мы поговорим о трёх основных функций дат, это функция ГОД , функция МЕСЯЦ и . Это три составляющие любой даты и теперь рассмотрим, как с ними работать и для чего это нам надо. В первую очередь, эти функции служат для извлечения определенного параметра из имеющейся даты, мы может отдельно изъять год, числовую последовательность месяца или дня. Использование этих функций будет актуально когда, к примеру, нужно будет поделить ваши данные по временным отрезкам по годам, по месяцам или по дням. Часто использование этих функций оправдано при работе со , когда их применение улучшают показатели анализа.

Вычислите, сколько истек срок действия счета

Результат показан на рисунке 4. Теперь, когда мы добавили наш список клиентов в наш график, мы переходим к тому, чтобы рассчитать, сколько из наших счетов-фактур истекло. Для удобства вычислений удобно предоставить ячейке, которая содержит эту дату, имя, которое мы затем можем использовать в формулах.

Помните, что для назначения имени ячейке или диапазону ячеек после их выбора вы должны перейти на вкладку «Формулы» и в группе «Определенные имена» нажмите кнопку «Определить имя». В появившемся окне укажите новое имя. На этом этапе мы возвращаемся к Листу кулаков: нам нужно добавить столбец, в котором мы вычисляем дни, из которых истекает срок действия счета. Результат, показанный на рисунке 6, будет датой, поскольку ячейки, участвующие в формуле, содержат даты, но достаточно применить общий численный формат для удовлетворения требуемого результата.

Теперь давайте рассмотрим каждую из функций времени по отдельности:

Функция ГОД в Excel

Является возврат года, который будет соответствовать указанной дате. Сам год будет определять функция ГОД как целое число в диапазоне от 1900 года до 9999 года.

Очень простой:

=ГОД(указаная_дата_в_числовом_формате) , где:

Что клиент выбран; что дата истечения срока действия находится в заданном диапазоне. Давайте попробуем эту функцию немедленно. Однако структура этих аргументов всегда одна и та же. Это означает, что аргументы должны быть указаны как в следующей таблице. Окно «Аргументы функции» должно быть скомпилировано, как показано на рисунке 7.

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

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

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

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

Условия по номерам между двойными кавычками

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

Все даты MS Excel хранит как последовательные числа и именно это позволяет нам работать с ними и использовать в своих вычислениях. По умолчанию первая дата под номером 1, это 1 января 1900 года, а вот, к примеру, 1 января 2018 года будет предоставлен числом 43101, так разница между этими двумя датами будет составлять 43101 день.

Функция МЕСЯЦ в Excel

Главная особенность, как используется , это возврат значения месяца из даты, который заданный как числовой формат. Месяц будет возвращен функцией как целое число в диапазоне чисел от 1 до 12, что соответствует месяцам от января до декабря.

Синтаксис, который использует , простой и незатейливый:

=МЕСЯЦ(ваша_дата_в_числовом_формате) , где:

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

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

Функция ДЕНЬ в Excel

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

Синтаксис, который использует , так же не отличаеться обилием аргументов:

=ДЕНЬ(ваша_дата_в_числовом_формате) , где:

  • Дата_в_числовом_формате , является обязательным аргументом и представляет собой дату, день которой следует вычислить. Даты нужно вводить при помощи функции ДАТА, указывать ссылкой на ячейку, которая содержит дату в соответствующем формате или это будет результат отдельных расчётов иных функций и формул. Важно! В случае, когда дата будет введена как текст, это приведёт к ошибкам и проблемам.

Как и предыдущие функции, функция ДЕНЬ в Excel хранит даты как последовательные числа и значения которые она возвращает, соответствуют датам григорианского календаря.

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

Для работы с датами также вам будет полезно, ознакомится со статьями: « » и « ».

Ну, вот и всё что я, пока, хотел вам рассказать о таких функциях работы с датами как функция ГОД , функция МЕСЯЦ и функция ДЕНЬ . Очень надеюсь, что моя статья вам помогла в решении вашей проблемы. Жду ваши лайки и комментарии, делитесь статьей с друзьями и коллегами, пусть нас будет много!

"Я хочу жить как бедный человек с деньгами.
"
Пабло Пикассо