D1 — начало периода
D2 — конец периода
Option Explicit
Private Sub KolDays()
Dim i As Long
Dim j As Long
Dim n As Integer
Dim a
a = Array(«Пн», «Вт», «Ср», «Чт», «Пт», «Сб», «Вс»)
Range(«D3:D9»).ClearContents
j = 0
For i = CDate(Range(«D1»)) To CDate(Range(«D2»))
n = Weekday(Range(«D1») + j, 2)
Select Case n
Case «1»
Cells(3, 4) = Cells(3, 4) + 1
Case «2»
Cells(4, 4) = Cells(4, 4) + 1
Case «3»
Cells(5, 4) = Cells(5, 4) + 1
Case «4»
Cells(6, 4) = Cells(6, 4) + 1
Case «5»
Cells(7, 4) = Cells(7, 4) + 1
Case «6»
Cells(8, 4) = Cells(8, 4) + 1
Case «7»
Cells(9, 4) = Cells(9, 4) + 1
End Select
j = j + 1
Next i
Cells(3, 3).Resize(UBound(a) + 1) = Application.Transpose(a)
End Sub
На чтение 5 мин Просмотров 2.1к. Опубликовано 27.02.2022
Итак, мы имеем несколько серьезных функций, для того чтобы рассчитать кол-во дней между двумя датами, причем с разными параметрами (такими как выходные дни, праздники и так далее).
В этой статье я продемонстрирую вам разные ситуации, где нужно посчитать кол-во дней между датами. Все они будут с разными «уклонами», в одной ситуации нужно посчитать без выходных, в другой количество понедельников и так далее.
Содержание
- Стандартный расчет количества дней
- С помощью функции ДНИ
- С помощью функции РАЗНДАТ
- Расчет кол-ва рабочих дней
- Расчет кол-ва неполных рабочих дней между двумя датами
- Количество понедельников между двумя датами
Стандартный расчет количества дней
Итак, в Excel есть две функции для вычисления кол-ва дней.
С помощью функции ДНИ
Чтобы получить результат от функции нам понадобится дата начала и дата конца.
Итак, вы указываете эти две даты в аргументах функции и получаете количество дней между ними.
Хороший пример вы можете видеть на картинке ниже:
Используем эту формулу:
=ДНИ(B2;B1)
Также вы можете вручную прописать даты в функции (без указания ячеек), но тогда вам нужно заключить их в кавычки.
Эта функция вычислит количество дней между этими датами, но если вы хотите чтобы расчет велся «включительно» с датами начала и конца, то добавьте к результату + 1 (просто пропишите это в функции).
С помощью функции РАЗНДАТ
Эта функция аналогична, её отличие в том, что можно указать больше параметров. То есть больше «подстроить» под ситуацию.
Также можно вычислить кол-во месяцев или лет между датами.
Допустим, мы имеем то что указано на картинке ниже:
Пропишем формулу:
=РАЗНДАТ(B1;B2;"D")
Эта функция использует три наших аргумента:
- Дата начала — B1
- Дата окончания — B2
- «D» — текстовая строка
Важный момент: этой функции не будет в подсказке при написании названия функции, т.е. если вы будете писать РАЗНДАТ, Excel будет вести себя так, как будто он не знает что это за функция, но это не так.
Функция РАЗНДАТ больше подходит для ситуаций, когда нужно вычислить кол-во лет или месяцев между датами, в других ситуациях удобнее применять ДНИ (функцию).
Вот формула, которая даст результат по месяцам, которые будут между датами:
=РАЗНДАТ(B1;B2;"M")
А эта формула, тоже самое что и прошлая, только вычисляет кол-во лет:
=РАЗНДАТ(B1;B2;"Y")
Расчет кол-ва рабочих дней
Итак, рабочие дни можно вычислить двумя способами:
- Функция Excel ЧИСТРАБДНИ — ее следует использовать, если выходные дни — суббота и воскресенье.
- Функция Excel ЧИСТРАБДНИ.МЕЖД — используйте ее, когда выходные дни отличаются от субботы и воскресенья.
Сначала быстро рассмотрим синтаксис и аргументы фунции ЧИСТРАБДНИ.
Функция Excel ЧИСТРАБДНИ
=ЧИСТРАБДНИ(нач_дата, конеч_дата, [праздники])
- нач_дата — это дата начала отсчета.
- end_date — это конечная дата отсчета.
- [праздники] — (Необязательно) Отдельная дата или диапазон дат, которые не будут учитываться в расчетах.
Посмотрим на стандартный пример, когда нужно посчитать кол-во рабочих дней.
Мы будем использовать эту формулу:
=ЧИСТРАБДНИ(B2;C2;$F$2:$F$6)
Такая вариация этой функции даст то что вам нужно, если вам нужно посчитать рабочие дни без субботы и воскресенья.
Но бывают и другие ситуации, к примеру, в разных странах выходные на неделе строятся по-разному, это может быть пятница и так далее.
Именно для таких ситуаций и появилась функция ЧИСТРАБДНИ.МЕЖД.
Посмотрим что из себя представляет эта функция.
Функция Excel ЧИСТРАБДНИ.МЕЖД
=ЧИСТРАБДНИ.МЕЖД(нач_дата; конеч_дата; [выходные]; [праздники])
- нач_дата — значение даты, представляющее собой начальную дату.
- конеч_дата — значение даты, представляющее дату окончания.
- [нерабочие дни] — (Необязательно) в этом аргументе указываются исключительные дни(праздники и т.д.), если аргумента не будет, выходные останутся по-стандарту(суббота и воскресенье).
А сейчас, попробуем посчитать кол-во рабочих дней, если выходными будут пятница и суббота.
Допустим, таблица такая же как и в прошлом примере:
Будем использовать формулу:
=ЧИСТРАБДНИ.МЕЖД(B2;C2;7;$F$2:$F$6)
3 аргумент в функции сообщает Excel, что пятница и суббота выходные.
Также, мы можем использовать ЧИСТРАБДНИ.МЕЖД для расчета выходных между двумя датами.
Она конечно вычисляет кол-во рабочих дней, но мы можем адаптировать это «под себя».
Допустим, таблица все та же:
Формула, которая нам подойдет:
=ДНИ(C2;B2)+1-РАЗНДАТ(B2;C2)
Расчет кол-ва неполных рабочих дней между двумя датами
Также, к примеру, можно использовать эту же функцию для расчета неполных рабочих дней.
Допустим, у нас есть похожая таблица с данными:
Формула, для нашего случая, будет такой:
=ЧИСТРАБДНИ.МЕЖД($B$3;$C$3;"1010111";$E$3:$E$7)
Для обозначения выходных дней, мы использовали «1010111».
- 0 — рабочий день
- 1 — неполный рабочий день
Первая цифра из этого числа — понедельник, последняя — воскресенье
Грубо говоря, «0000011» значит, что с понедельника по пятницу — рабочие дни, а суббота и воскресенье — нерабочие (выходные).
По той же логике, «1010111» означает, что только вторник и четверг являются рабочими, а остальные 5 дней — нерабочими.
Если вам нужно исключить какие-то дни из расчетов, можете исключать их таким образом.
Количество понедельников между двумя датами
Для поиска количества понедельников мы можем использовать ту же логику, которая использовалась выше при подсчете неполных рабочих дней.
Функция, которая выведет кол-во понедельников:
=ЧИСТРАБДНИ(B2;C2;"0111111")
В этой формуле «0» означает рабочий день, а «1» — нерабочий день.
Формула рассчитывает количество рабочих дней, с учетом того что единственный рабочий день — это понедельник.
Аналогичным образом можно рассчитать количество любых, интересующих вас дней, между двумя датами.
Количество определенных дней недели в месяце
Автор dvi73, 16.09.2014, 21:06
« назад — далее »
Подскажите пожалуйста, как определить количество, например, вторников в текущем месяце в Excel 2003. Заранее благодарю за ответы.
А у меня такое родилось:
=ИЛИ(ДЕНЬНЕД(КОНМЕСЯЦА(A1;0)-{0;1;2};2)*(ДЕНЬ(КОНМЕСЯЦА(A1;0))>{28;29;30})=B1)+4
A1 — дата, B1 — день недели (число)
=ЕСЛИ(ДЕНЬ(КОНМЕСЯЦА(C1;0))-ДЕНЬ(C1)+1-(ЦЕЛОЕ((ДЕНЬ(КОНМЕСЯЦА(C1;0))-ДЕНЬ(C1)+1)/7)*7)>=2;ЦЕЛОЕ((ДЕНЬ(КОНМЕСЯЦА(C1;0))-ДЕНЬ(C1)+1)/7)+1;ЦЕЛОЕ((ДЕНЬ(КОНМЕСЯЦА(C1;0))-ДЕНЬ(C1)+1)/7))
где С1-начальная дата
С уважением, ZS5
С учетом того, что в любом месяце (даже в феврале) может быть либо 4, либо 5 «вторников» в зависимости от того, с какого дня недели начинается месяц и каким днем недели он заканчивается, то решение задачи можно решить «в лоб»:
=3+(ДЕНЬНЕД(КОНМЕСЯЦА(B1;-1)+1;2)<=A1)+(ДЕНЬНЕД(КОНМЕСЯЦА(B1;0);2)>=A1)
здесь:
— в ячейке А1 записано число от 1 до 7 (1 => ПН)
— в ячейке B1 записана любая дата интересующего нас месяца, например =СЕГОДНЯ()
— функции ДЕНЬНЕД(КОНМЕСЯЦА(…);2) — возвращают порядковые номера первого и последнего дня выбранного месяца
— функция сравнения возвращает значение ИСТИНА при выполнении соответствующего условия или ЛОЖЬ в противном случае. В математических выражениях этим значениям соответствуют значения 1 и 0.
IKor, формула не учитывает вариант, когда три последних дня месяца Сб, Вс и Пн (в 2014 это март и июнь)
Согласен…
Придется модифицировать функцию…
=4+(ДЕНЬНЕД(КОНМЕСЯЦА(B1;-1)+1;2)<=A1)*(ДЕНЬНЕД(КОНМЕСЯЦА(B1;0);2)>=A1)
Огромное спасибо всем за ответы, буду с этим разбираться!
Но, к сожалению, я неправильно сформулировал мою задачу. Мне надо узнать сколько вторников осталось до конца месяца начиная с текущего дня. Может быть поможете мне найти решение. Заранее благодарю всех за советы.
IKor, в такой редакции не всегда правильно определяются понедельник и суббота.
в A1 дата, в B1 — день недели (от1 до 7)
=СУММПРОИЗВ(--(ДЕНЬНЕД(СТРОКА(ИНДЕКС(A:A;A1):ИНДЕКС(A:A;ДАТА(ГОД(A1);МЕСЯЦ(A1)+1;)));2)=B1))
MCH, огромное спасибо! Все работает.
Еще вариант (более предпочтительный)
=ЦЕЛОЕ((ДАТА(ГОД(A1);МЕСЯЦ(A1)+1;7)-A1-ОСТАТ(B1-A1+1;7))/7)
=ЕСЛИ(ДЕНЬ(КОНМЕСЯЦА(ТДАТА();0))-ДЕНЬ(ТДАТА())+1-(ЦЕЛОЕ((ДЕНЬ(КОНМЕСЯЦА(ТДАТА();0))-ДЕНЬ(ТДАТА())+1)/7)*7)>=B1;ЦЕЛОЕ((ДЕНЬ(КОНМЕСЯЦА(ТДАТА();0))-ДЕНЬ(ТДАТА())+1)/7)+1;ЦЕЛОЕ((ДЕНЬ(КОНМЕСЯЦА(ТДАТА();0))-ДЕНЬ(ТДАТА())+1)/7))
или
=ЦЕЛОЕ((ДАТА(ГОД(ТДАТА());МЕСЯЦ(ТДАТА())+1;7)-ТДАТА()-ОСТАТ(КОНМЕСЯЦА(ТДАТА();0)-B1+1;7))/7)
где В1- день недели
Цитата: vikttur от 17.09.2014, 20:52
IKor, в такой редакции не всегда правильно определяются понедельник и суббота.
Ну так ведь спрашивали про вторники же!!!
К сожалению, для учета второй области возможных пятых_дней_недели приходится значительно увеличивать количество символов формулы… поэтому красивого решения пока не получается. Жаль
- Профессиональные приемы работы в Microsoft Excel
-
►
Обмен опытом -
►
Microsoft Excel -
►
Количество определенных дней недели в месяце
I pay a bill every monday. I want to know how much more this is going to cost me this month.
How do I calculate how many mondays are in an upcoming month? For the current month, how do I calculate remaining mondays after today?
chris neilsen
52.2k10 gold badges84 silver badges122 bronze badges
asked Oct 17, 2016 at 2:46
0
How many Mondays remaining this month (excluding today if it’s a Monday)
=INT((EOMONTH(TODAY(),0)-TODAY()+WEEKDAY(TODAY(),3))/7)
How many Mondays next month
=INT((EOMONTH(TODAY(),1)-EOMONTH(TODAY(),0)+WEEKDAY(EOMONTH(TODAY(),0),3))/7)
References:
EOMONTH
WEEKDAY
answered Oct 17, 2016 at 3:12
chris neilsenchris neilsen
52.2k10 gold badges84 silver badges122 bronze badges
2
В некоторых случаях вам может потребоваться перечислить или отобразить все понедельники или пятницы месяца или года на листе. Обычно вы можете указать серию дат с помощью маркера заполнения, но это не поможет вам заполнить каждый понедельник или пятницу в месяце или году. В этой статье я расскажу о том, как составить список всех понедельников или пятниц в месяце в Excel.
Список всех понедельников/пятниц в месяце или году с помощью формул
Список всех понедельников/пятниц в месяце или году с помощью Kutools for Excel
Вставьте ежемесячный или годовой календарь в книгу:
Kutools for Excel Perpetual Calendar может помочь вам быстро вставить календарь на месяц, год или конкретный месяц в учебное пособие. Нажмите, чтобы загрузить и бесплатную пробную версию Kutools for Excel прямо сейчас!
Kutools for Excel : с более чем 200 удобными надстройками Excel, вы можете попробовать бесплатно без ограничений в течение 60 дней. Загрузите и бесплатную пробную версию прямо сейчас!
->
Содержание
- Составьте список всех понедельников/пятниц в месяце или году с помощью формул
- Список всех понедельников/пятниц в месяце или году с помощью Kutools for Excel
- Демо: список всех понедельников/пятниц за месяц или год с помощью Kutools for Excel
Составьте список всех понедельников/пятниц в месяце или году с помощью формул
Следующие формулы помогут вам составить список всех понедельников или По пятницам в месяце или году с заданной даты месяца, пожалуйста, сделайте следующее:
1. Пожалуйста, введите дату, которую вы хотите указать каждый понедельник. или пятницу месяца в ячейке, например, я введу 01.01.2016 в ячейку A1.
2. Затем введите эту формулу: = IF (WEEKDAY (EOMONTH (A1, -1) +1) = 2, EOMONTH (A1, -1) + 1, EOMONTH (A1, -1) + (8 + MOD (2,7)) -WEEKDAY (EOMONTH (A1, -1) +1)) в ячейку B1 и нажмите клавишу Enter , чтобы получить первый понедельник месяца. См. Снимок экрана:
Примечание: Чтобы получить первый вторник месяца:
= IF (WEEKDAY (EOMONTH (A1, -1) +1) = 3, EOMONTH (A1, -1) + 1, EOMONTH (A1, -1) + (8 + MOD (3,7)) – WEEKDAY (EOMONTH (A1, -1) +1))
Чтобы получить первую среду месяца:
= IF (WEEKDAY (EOMONTH (A1, -1) +1) = 4, EOMONTH (A1, -1) + 1, EOMONTH (A1, -1) + (8 + MOD (4 , 7)) – WEEKDAY (EOMONTH (A1, -1) +1))
Чтобы получить первый четверг месяца:
= IF (WEEKDAY ( EOMONTH (A1, -1) +1) = 5, EOMONTH (A1, -1) + 1, EOMONTH (A1, -1) + (8 + MOD (5,7)) – WEEKDAY (EOMONTH (A1, -1 ) +1))
Чтобы получить первую пятницу месяца:
= IF (WEEKDAY (EOMONTH (A1, -1) +1) = 6, EOMONTH (A1, -1) + 1, EOMONTH (A1, -1) + (8 + MOD (6,7)) – WEEKDAY (EOMONTH (A1, -1) +1))
Чтобы получить первую субботу месяца:
= IF (WEEKDAY (EOMONTH (A1; -1) +1) = 7, EOMONTH (A1, -1) + 1, EOMONTH (A1 , -1) + (8 + MOD (7,7)) – WEEKDAY (EOMONTH (A1, -1) +1))
Чтобы получить первое воскресенье месяца:
= IF (WEEKDAY (EOMONTH (A1; -1) +1) = 1, EOMONTH (A1, -1 ) + 1, EOMONTH (A1, -1) + (8 + MOD (1,7)) – WEEKDAY (EOMONTH (A1, -1) +1))
3. После отображения первого понедельника введите следующую формулу: = B1 + 7 , чтобы получить второй понедельник, затем перетащите маркер заполнения вниз, чтобы отобразить все понедельники в месяце или в год по мере необходимости, см. снимок экрана:
Список всех понедельников/пятниц в месяце или году с помощью Kutools for Excel
Кроме приведенных выше формул, здесь , Я могу представить простой инструмент – Kutools for Excel , с его функцией Вставить дату , вы можете вставить все понедельники или пятницы в месяц так же быстро, как вы может.
Kutools for Excel : с более чем 300 удобными Excel надстройки, попробуйте бесплатно без ограничений в течение 30 дней . |
Перейти к загрузке |
После установки Kutools for Excel , пожалуйста, сделайте следующее: ( Перейти к загрузке Kutools for Excel Сейчас! )
1 . Выберите ячейку для вставки даты и нажмите Kutools > Вставить > Вставить дату , см. Снимок экрана:
2 . В диалоговом окне Вставить дату отображается календарь на месяц, вы можете дважды щелкнуть дату, чтобы вставить ее в ячейку, вы также можете изменить формат даты по своему усмотрению, установив флажок Используя формат , чтобы активировать список форматирования даты. См. Снимок экрана:
Перейти к загрузке Kutools for Excel и бесплатная пробная версия сейчас!
Демо: список всех понедельников/пятниц за месяц или год с помощью Kutools for Excel
Kutools for Excel : с более чем 300 удобными надстройками Excel, попробуйте бесплатно без ограничений в 30 дней. Загрузите и бесплатную пробную версию прямо сейчас!
В некоторых случаях вам может потребоваться перечислить или отобразить все понедельники или пятницы месяца или года на листе. Обычно вы можете указать серию дат с помощью маркера заполнения, но он не может помочь вам заполнить каждый понедельник или пятницу в месяц или год. В этой статье я расскажу о том, как составить список всех понедельников или пятниц в месяце в Excel.
Перечислите все понедельники / пятницы в месяце или году с формулами
Перечислите все понедельники/пятницы в месяце или году с Kutools for Excel
Перечислите все понедельники / пятницы в месяце или году с формулами
Следующие формулы могут помочь вам составить список всех понедельников или пятниц в месяце или году, начиная с заданного числа месяца, пожалуйста, сделайте следующее:
1. Введите дату, которую вы хотите отображать каждый понедельник или пятницу месяца в ячейке, например, я введу 1 в ячейку A1.
2. Затем введите эту формулу: =IF(WEEKDAY(EOMONTH(A1,-1)+1)=2,EOMONTH(A1,-1)+1,EOMONTH(A1,-1)+(8 + MOD(2,7))-WEEKDAY(EOMONTH(A1,-1)+1)) в ячейку B1 и нажмите Enter ключ, чтобы получить первый понедельник месяца. Смотрите скриншот:
Примечание: Чтобы получить первый вторник месяца:
=IF(WEEKDAY(EOMONTH(A1,-1)+1)=3,EOMONTH(A1,-1)+1,EOMONTH(A1,-1)+(8 + MOD(3,7))-WEEKDAY(EOMONTH(A1,-1)+1))
Чтобы получить первую среду месяца:
=IF(WEEKDAY(EOMONTH(A1,-1)+1)=4,EOMONTH(A1,-1)+1,EOMONTH(A1,-1)+(8 + MOD(4,7))-WEEKDAY(EOMONTH(A1,-1)+1))
Чтобы получить первый четверг месяца:
=IF(WEEKDAY(EOMONTH(A1,-1)+1)=5,EOMONTH(A1,-1)+1,EOMONTH(A1,-1)+(8 + MOD(5,7))-WEEKDAY(EOMONTH(A1,-1)+1))
Чтобы получить первую пятницу месяца:
=IF(WEEKDAY(EOMONTH(A1,-1)+1)=6,EOMONTH(A1,-1)+1,EOMONTH(A1,-1)+(8 + MOD(6,7))-WEEKDAY(EOMONTH(A1,-1)+1))
Чтобы получить первую субботу месяца:
=IF(WEEKDAY(EOMONTH(A1,-1)+1)=7,EOMONTH(A1,-1)+1,EOMONTH(A1,-1)+(8 + MOD(7,7))-WEEKDAY(EOMONTH(A1,-1)+1))
Чтобы получить первое воскресенье месяца:
=IF(WEEKDAY(EOMONTH(A1,-1)+1)=1,EOMONTH(A1,-1)+1,EOMONTH(A1,-1)+(8 + MOD(1,7))-WEEKDAY(EOMONTH(A1,-1)+1))
3. После отображения первого понедельника продолжайте вводить эту формулу: = B1 + 7 чтобы получить второй понедельник, затем перетащите дескриптор заполнения вниз, чтобы отобразить все понедельники в месяце или году, как вам нужно, см. снимок экрана:
Перечислите все понедельники/пятницы в месяце или году с Kutools for Excel
Кроме приведенных выше формул, здесь я могу ввести простой инструмент —Kutools for Excel, С его Вставить дату функция, вы можете вставить все понедельники или пятницы в месяц как можно быстрее.
После установки Kutools for Excel, пожалуйста, сделайте следующее Перейти к загрузке Kutools for Excel от Yhao сейчас! )
1. Выберите ячейку для вставки даты и щелкните Кутулс > Вставить > Вставить дату, см. снимок экрана:
2. В Вставить дату В диалоговом окне отображается календарь на месяц, вы можете дважды щелкнуть дату, чтобы вставить ее в ячейку, вы также можете изменить формат даты по своему усмотрению, установив флажок Использование формата возможность активировать список форматирования даты. Смотрите скриншот:
Перейти к загрузке Kutools for Excel и бесплатная пробная версия прямо сейчас!
Демонстрация: список всех понедельников/пятниц в месяце или году с помощью Kutools for Excel
Лучшие инструменты для работы в офисе
Kutools for Excel Решит большинство ваших проблем и повысит вашу производительность на 80%
- Снова использовать: Быстро вставить сложные формулы, диаграммы и все, что вы использовали раньше; Зашифровать ячейки с паролем; Создать список рассылки и отправлять электронные письма …
- Бар Супер Формулы (легко редактировать несколько строк текста и формул); Макет для чтения (легко читать и редактировать большое количество ячеек); Вставить в отфильтрованный диапазон…
- Объединить ячейки / строки / столбцы без потери данных; Разделить содержимое ячеек; Объединить повторяющиеся строки / столбцы… Предотвращение дублирования ячеек; Сравнить диапазоны…
- Выберите Дубликат или Уникальный Ряды; Выбрать пустые строки (все ячейки пустые); Супер находка и нечеткая находка во многих рабочих тетрадях; Случайный выбор …
- Точная копия Несколько ячеек без изменения ссылки на формулу; Автоматическое создание ссылок на несколько листов; Вставить пули, Флажки и многое другое …
- Извлечь текст, Добавить текст, Удалить по позиции, Удалить пробел; Создание и печать промежуточных итогов по страницам; Преобразование содержимого ячеек в комментарии…
- Суперфильтр (сохранять и применять схемы фильтров к другим листам); Расширенная сортировка по месяцам / неделям / дням, периодичности и др .; Специальный фильтр жирным, курсивом …
- Комбинируйте книги и рабочие листы; Объединить таблицы на основе ключевых столбцов; Разделить данные на несколько листов; Пакетное преобразование xls, xlsx и PDF…
- Более 300 мощных функций. Поддерживает Office/Excel 2007-2021 и 365. Поддерживает все языки. Простое развертывание на вашем предприятии или в организации. Полнофункциональная 30-дневная бесплатная пробная версия. 60-дневная гарантия возврата денег.
Вкладка Office: интерфейс с вкладками в Office и упрощение работы
- Включение редактирования и чтения с вкладками в Word, Excel, PowerPoint, Издатель, доступ, Visio и проект.
- Открывайте и создавайте несколько документов на новых вкладках одного окна, а не в новых окнах.
- Повышает вашу продуктивность на 50% и сокращает количество щелчков мышью на сотни каждый день!
Как суммировать все понедельники за Январь месяц? |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
На чтение 10 мин. Просмотров 13.1k.
Содержание
- Получить дни, месяцы и годы между датами
- Подсчитайте дни недели между датами
- Подсчитывать праздники между двумя датами
- Создание диапазона дат с двух дат
- Получать рабочие часы между датами
- Получать рабочие часы между датами собственного расписания
- Получать рабочие дни между датами
- Список праздников между двумя датами
Получить дни, месяцы и годы между датами
= РАЗНДАТ (начало; конец; «г»)&»годы»; & РАЗНДАТ(начало; конец; «гм») & «месяцы»; & РАЗНДАТ(начало; конец; «мд») & «дни»
Чтобы рассчитать и отобразить время между датами в днях, месяцах и годах, вы можете использовать формулу, основанную на функции РАЗНДАТ.
В показанном примере формула в D5:
= РАЗНДАТ(B5; C5; «г») & «годы»; & РАЗНДАТ(B5; C5; «гм») & «месяцы»; & РАЗНДАТ(B5; C5; «мд») & «дни»
Где даты начала указаны в столбце B, а даты окончания — в столбце C.
Функция РАЗНДАТ предназначена для вычисления разницы между датами в годах, месяцах и днях. Доступны несколько вариантов (например, время в месяцах, время в месяцах без учета дней и лет и т. д.), И они устанавливаются аргументом «единица» в функции.
В показанном примере мы вычисляем отдельно годы, месяцы и дни, затем «склеиваем» результаты вместе с конкатенацией. Чтобы получить целые годы, мы используем:
РАЗНДАТ(B5; C5; «г») и «годы»
Чтобы получить целые месяцы, мы используем:
РАЗНДАТ(B5; C5; «гм») & «месяцы»
И мы вычисляем дни с:
РАЗНДАТ(B5; C5; «мд») & «дни»
Остальная часть формулы — это просто необходимый текст, объединенный с оператором конкатенации (&).
Чтобы предотвратить вывод дней, месяцев или лет с нулевыми значениями, вы можете обернуть каждую функцию РАЗНДАТ внутри ЕСЛИ, как показано здесь (строки, добавленные для удобочитаемости):
=ЕСЛИ(РАЗНДАТ(B5; C5; «г»); РАЗНДАТ (B5; C5; «г») & «годы»; «»)
ЕСЛИ(РАЗНДАТ(B5; C5; «гм»); РАЗНДАТ(B5; C5; «гм») & «месяцы»; «»)
ЕСЛИ(РАЗНДАТ(B5; C5; «мд»); РАЗНДАТ(B5; C5; «мд») & «дни»; «»)
Для предотвращения появления дополнительных запятых в конечном результате запятые заменяются пробелами. Использование исходной формулы РАЗНДАТ как «логического теста» внутри ЕСЛИ работает, потому что ЕСЛИ обрабатывает любой ненулевой результат как истинный.
Подсчитайте дни недели между датами
= СУММПРОИЗВ(- (ДЕНЬНЕД(СТРОКА(ДВССЫЛ (дата1 & «:» & дата2))) = дни))
Чтобы подсчитать количество понедельников, пятниц, воскресений и т. п. между двумя датами, вы можете использовать формулу массива, которая использует несколько функций: СУММПРОИЗВ, ДЕНЬНЕД, СТРОКА и ДВССЫЛ.
В показанном примере формула в ячейке E5 имеет следующий вид:
= СУММПРОИЗВ(- (ДЕНЬНЕД(СТРОКА(ДВССЫЛ(B5 & «:» & C5))) = D5))
В основном эта формула использует функцию ДЕНЬНЕД, чтобы проверить количество дат, чтобы увидеть, попадают ли они в заданный день недели и функцию СУММПРОИЗВ, чтобы подсчитать общее количество.
Когда дана дата, ДЕНЬНЕД просто возвращает число от 1 до 7, соответствующее конкретному дню недели. С настройками по умолчанию: 1 = воскресенье и 7 = суббота. Итак, 2 = понедельник, 6 = пятница и так далее.
Трюк этой формулы заключается в понимании того, что даты в Excel — это только серийные номера, которые начинаются 1 января 1900 года. Например, 1 января 2016 года — это серийный номер 42370, а 8 января — 42377. Даты в Excel выглядят только как даты, когда применяется формат числа даты.
Итак, возникает вопрос — как вы можете построить массив дат, который вы можете использовать в функции ДЕНЬНЕД, чтобы узнать соответствующие дни недели?
Ответ: использовать СТРОКА с ДВССЫЛ следующим образом:
СТРОКА(ДВССЫЛ(дата1 & «:» & дата2))
ДВССЫЛ позволяет связанным датам «42370: 42377» интерпретироваться как номера строк. Затем функция СТРОКА возвращает массив вроде этого:
{42370; 42371; 42372; 42373; 42374; 42375; 42376; 42377}
Функция ДЕНЬНЕД оценивает эти числа как даты и возвращает этот массив:
{6; 7; 1; 2; 3; 4; 5; 6}
Который тестируется на заданный день недели (6 в данном случае, начиная с D6). Как только результаты теста преобразуются в 1 и 0 с двойным дефисами, этот массив обрабатывается СУММПРОИЗВ:
{1; 0; 0; 0; 0; 0; 0; 1}
Который возвращает 2.
Подсчитывать праздники между двумя датами
= СУММПРОИЗВ((праздники> = начало) * (праздники <= конец))
Для подсчета праздничных дней, которые происходят между двумя датами, вы можете использовать функцию СУММПРОИЗВ.
В показанном примере формула в F7:
=СУММПРОИЗВ((B5:B13>=F5)*(B5:B13<=F6))
Эта формула использует два выражения в одном массиве внутри функции СУММПРОИЗВ.
Первое выражение проверяет каждую дату отпуска, чтобы увидеть, больше или равна дате начала в F5:
(B5: B13> = F5)
Это возвращает массив значений ИСТИНА/ЛОЖЬ, например:
{ЛОЖЬ; ЛОЖЬ; ЛОЖЬ; ЛОЖЬ; ИСТИНА; ИСТИНА; ИСТИНА; ИСТИНА; ИСТИНА }
Второе выражение проверяет каждую дату отпуска, чтобы увидеть, меньше или равна конечной дате в F6:
(B5: B13 <= F6)
Который возвращает массив значений ИСТИНА/ЛОЖЬ следующим образом:
{ИСТИНА; ИСТИНА; ИСТИНА; ИСТИНА; ИСТИНА; ИСТИНА; ИСТИНА; ИСТИНА; ЛОЖЬ}
Умножение этих двух массивов автоматически присваивает значения ИСТИНА/ЛОЖЬ единицам и нулям, что приводит к массивам, которые выглядят так:
= СУММПРОИЗВ(({0; 0; 0; 0; 1; 1; 1; 1; 1}) * ({1; 1; 1; 1; 1; 1; 1; 1; 0}))
После умножения у нас есть только один массив:
=СУММПРОИЗВ ({0; 0; 0; 0; 1; 1; 1; 1; 0}})
Наконец, СУММПРОИЗВ суммирует элементы в массиве и возвращает 4.
Для подсчета праздничных дней, которые происходят только в рабочие дни (понедельник-пятница), вы можете расширить формулу следующим образом:
=СУММПРОИЗВ ((диап> = F5) * (диап <= F6) * (ДЕНЬНЕД(диап; 2) <6))
Где диап — диапазон, содержащий даты отпуска.
Создание диапазона дат с двух дат
= ТЕКСТ(дата1; «формат») & «-» & ТЕКСТ (дата2; «формат»)
Чтобы отобразить диапазон дат в одной ячейке на основе дат в разных ячейках, вы можете использовать формулу, основанную на функции ТЕКСТ.
В показанном примере формула в ячейке E5:
= ТЕКСТ (B5; «ммм д») & «-» & ТЕКСТ(C5; «ммм д»)
Функция ТЕКСТ принимает числовые значения и преобразует их в текстовые значения, используя заданный вами формат. В этом примере мы используем формат «ммм д» для обеих функций TEКСT в E5. Результаты объединяются дефисом, используя простую конкатенацию.
Примечание. Другие примеры в столбце E используют разные текстовые форматы.
Если дата окончания отсутствует, формула не будет работать правильно, потому что дефис будет добавлен к дате начала (например, «1 марта»).
Чтобы обработать этот случай, вы можете обернуть конкатенацию и вторую функцию ТЕКСТ внутри ЕСЛИ следующим образом:
= ТЕКСТ(дата1; «ммм д») & ЕСЛИ(дата2 <> «»; «-» &ТЕКСТ(дата2; «ммм д»); «»)
Это создает полный диапазон дат, когда обе даты присутствуют, но выводит только дату начала, когда дата окончания отсутствует.
Для обработки случая, когда обе даты отсутствуют, вы можете вложить еще один ЕСЛИ следующим образом:
= ЕСЛИ(дата1 <> «»; ТЕКСТ(дата1; «мммм д») & ЕСЛИ(дата2 <> «»; «-» & ТЕКСТ(дата2; «ммм д»); «»); «»)
Эта формула просто возвращает пустую строку («»), когда дата1 недоступна.
Получать рабочие часы между датами
= ЧИСТРАБДНИ (начало; конец; праздники) * часы
Чтобы получить общее количество часов работы между двумя датами, вы можете использовать формулу, основанную на функции ЧИСТРАБДНИ, где «начало» — это дата начала, «конец» — конечная дата, «праздники» — диапазон, который включает в себя даты отпуска , А «часы» — количество рабочих часов в день.
В показанном примере формула в D5:
=ЧИСТРАБДНИ(B5;C5)*8
Эта формула использует функцию ЧИСТРАБДНИ, чтобы выполнить работу по определению общего количества рабочих дней между двумя датами с учетом выходных и (необязательно) праздников.
Праздники, если они предусмотрены, должны быть диапазоном, который включает действительные даты Excel.
Как только общие рабочие дни известны, их просто умножают на количество часов в рабочем дне.
Обратите внимание, что ЧИСТРАБДНИ по дизайну включает как дату начала, так и дату окончания в результате, и исключает как субботу, так и воскресенье.
Получать рабочие часы между датами собственного расписания
{= СУММ(ВЫБОР(ДЕНЬНЕД(СТРОКА(ДВССЫЛ(дата1 & «:» & дата2))); 1;2;3;4;5;6;7))}
Чтобы вычислить часы работы между двумя датами с настраиваемым расписанием, вы можете использовать формулу, основанную на функциях ДЕНЬНЕД и ВЫБОР.
В показанном примере формула в F5:
=СУММ(ВЫБОР(ДЕНЬНЕД(СТРОКА(ДВССЫЛ(B5&»:»&C5)));0;8;4;8;4;8;0))
Который возвращает 32 часа, основанный на пользовательском расписании, где 8 часов работают в Пн, Ср и Пт, а 4 часа — в Пт и Вт.
Примечание. Это формула массива, которая должна вводиться с помощью Control + Shift + Enter.
По сути, эта формула использует функцию ДЕНЬНЕД для определения дня недели (например, понедельник, вторник и т. д.) Для каждого дня между двумя указанными датами.
ДЕНЬНЕД возвращает число от 1 до 7, соответствующее конкретному дню недели. С настройками по умолчанию: 1 = воскресенье и 7 = суббота, поэтому, 2 = понедельник, 6 = пятница и так далее.
Хитрость этой формулы заключается в создании массива дат, которые вы можете использовать в функции ДЕНЬНЕД. Это делается с помощью СТРОКА с ДВССЫЛ следующим образом:
СТРОКА(ДВССЫЛ(дата1 & «:» & дата2))
ДВССЫЛ позволяет связанным датам «» 42464: 42470 «» интерпретироваться как номера строк. Затем функция СТРОКА возвращает массив вроде этого:
{42464; 42465; 42466; 42467; 42468; 42469; 42470}
Функция ДЕНЬНЕД оценивает эти числа как даты и возвращает этот массив:
{2; 3; 4; 5; 6; 7; 1}
Эти числа соответствуют дню недели каждой даты.
Этот массив затем передается функции ВЫБОР в качестве «номера индекса», который был сконфигурирован с 7 значениями:
Значение1 – рабочие дни в воскресенье
Значение 2 — рабочие часы в понедельник
Значение 3 — рабочие часы вторника
Значение 4 — Рабочие часы в среду
Значение 5 — рабочие часы в четверг
Значение 6 — рабочие часы в пятницу
Значение 7 — работа в субботу
Поскольку мы даем ВЫБОР более чем одно значение индекса, он возвращает более одного результата в массиве следующим образом:
{8; 4; 8; 4; 8; 0; 0}
Эти цифры соответствуют часам, которые выполнялись каждый день с даты 1 по дату2.
Наконец, чтобы получить итоговое значение, нам просто нужно обернуть ВЫБОР в СУММ и ввести формулу массива.
В этом примере итоговый результат составляет 32 часа.
Примечание: вы могли бы подумать, что вы могли бы использовать СУММПРОИЗВ вместо СУММ, чтобы избежать синтаксиса массива, но он не работает; Вам все равно придется использовать CSE. Я знаю, что причина заключается в использовании ДВССЫЛ с СТРОКА для построения массива значений индекса, но не знаю, почему это требует CSE.
Получать рабочие дни между датами
= ЧИСТРАБДНИ(нач_дата; кон_дата; праздники)
Чтобы вычислить количество рабочих дней между двумя датами, вы можете использовать функцию ЧИСТРАБДНИ. ЧИСТРАБДНИ автоматически исключает выходные и может также исключать настраиваемый список праздничных дней.
Например, если у вас есть дата 4 января 2016 года (понедельник) в ячейке B4 и 11 января 2016 года (также понедельник) в ячейке C4, эта формула вернет 6:
= ЧИСТРАБДНИ(B4; C4)
Обратите внимание, что ЧИСТРАБДНИ включает как начальную, так и конечную даты в расчете, если они являются рабочими днями.
ЧИСТРАБДНИ также может исключать настраиваемый список праздников. Например, если у вас есть даты отпуска в H1: H10, вы можете указать ЧИСТРАБДНИ не включать эти даты в качестве рабочих дней, добавив этот диапазон в качестве третьего аргумента в формуле:
= ЧИСТРАБДНИ(B4; C4; H1: H10)
Если вам нужно учитывать пользовательские выходные дни (например, выходные — это только суббота, воскресенье и понедельник и т. д.), Вам нужно переключиться на более надежную функцию ЧИСТРАБДНИ.МЕЖД, которая позволяет вам установить, какие дни недели считаются выходными, подавая аргумент в выходные дни в виде числового кода.
Список праздников между двумя датами
{= ОБЪЕДИНИТЬ («;»; ИСТИНА; ЕСЛИ(даты> = старт; ЕСЛИ(даты <= конец; праздники; «»); «»))}
Для отображения праздников, которые происходят между двумя датами, вы можете использовать формулу, основанную на функциях ОБЪЕДИНИТЬ и ЕСЛИ.
В показанном примере формула в F8:
{= ОБЪЕДИНИТЬ(«;»; ИСТИНА; ЕСЛИ(B4: B12> = F5; ЕСЛИ(B4: B12 <= F6; C4: C12; «»); «»))}
Это формула массива и должна вводиться control + shift + enter.
На высоком уровне эта формула использует вложенную функцию ЕСЛИ для возвращения массива праздников между двумя датами. Затем этот массив обрабатывается функцией ОБЪЕДИНИТЬ, которая преобразует массив в текст, используя запятую в качестве разделителя.
Работая изнутри, мы генерируем массив совпадений праздников, используя вложенный ЕСЛИ:
ЕСЛИ(B4: B12> = F5; ЕСЛИ(B4: B12 <= F6; C4: C12; «»); «»)
Если даты в B4: B12 больше или равны начальной дате в F5, и если даты в B4: B12 меньше или равны конечной дате в F6, тогда ЕСЛИ возвращает массив праздничных дней. В показанном примере список выглядит так:
{«»; «»; «День президента»; «День памяти»; «»; «»; «»; «»; «»}
Этот массив затем доставляется в функцию ОБЪЕДИНИТЬ в качестве аргумента текст1, где разделитель имеет значение «,», а игнорировать_пустые — ИСТИНА. Функция ОБЪЕДИНИТЬ обрабатывает элементы в массиве и возвращает строку, где каждый непустой элемент разделяется запятой и пробелом.
Примечание. Функция ОБЪЕДИНИТЬ является новой в Excel 2016.
#excel #excel-formula
#excel #excel-формула
Вопрос:
Я оплачиваю счет каждый понедельник. Я хочу знать, сколько еще это будет стоить мне в этом месяце.
Как мне рассчитать, сколько понедельников в следующем месяце? Как мне рассчитать оставшиеся понедельники в текущем месяце после сегодняшнего дня?
Ответ №1:
Сколько понедельников осталось в этом месяце (исключая сегодняшний день, если это понедельник)
=INT((EOMONTH(TODAY(),0)-TODAY() WEEKDAY(TODAY(),3))/7)
Сколько понедельников в следующем месяце
=INT((EOMONTH(TODAY(),1)-EOMONTH(TODAY(),0) WEEKDAY(EOMONTH(TODAY(),0),3))/7)
Ссылки:
EOMONTH
WEEKDAY
Комментарии:
1. Можете ли вы немного объяснить эту формулу. Допустим, я хочу знать оставшиеся вторники вместо понедельников, какие изменения необходимо внести?
2. Я только что протестировал это — вы меняете 3 в ‘WEEKDAY (TODAY (),3))’ на одно из нескольких различных значений. с 1 по 3 или с 11 по 13 являются допустимыми записями. Если вы введете формулу в Excel, помощник по уравнениям предоставит вам таблицу. Это довольно долго воспроизводить здесь. Я обнаружил, что для оставшихся в месяце сред мне нужно значение 13, которое представляет «Числа с 1 (среда) по 7 (вторник)».