Это глава из книги: Майкл Гирвин. Ctrl+Shift+Enter. Освоение формул массива в Excel.
Предыдущая глава Оглавление Следующая глава
При создании формул массива, операторы массива могут значительно увеличить время расчета. В этой короткой главе рассматриваются два примера, в которых обычная формула справляется с задачей значительно быстрее формулы массива.
Подсчет дат, когда критерий сформулирован в виде текста. На рис. 12.1 показан набор данных с датами в стандартном формате Excel, то есть в виде порядковых чисел. В тоже время, критерии заданы как число (год) и текст (месяц). Цель – подсчитать, сколько дат соответствуют критерию. Проблема в том, что у нас несоответствие формата данных: в столбце A даты как порядковые номера, а критерий – смесь чисел и текста. На рис. 12.1 приведено пять различных формул, которые можно использовать для достижения цели.
Рис. 12.1. Подсчет количества дат (заданных порядковыми номерами) по двум критериям: году (число) и месяцу (текст)
Скачать заметку в формате Word или pdf, примеры в формате Excel2013
Давайте подробнее изучим работу этих пяти формул.
Формула [1]:
- Если вы можете позволить себе вспомогательный столбец, функция СЧЁТЕСЛИ будет самым простым решением.
- Функция МЕСЯЦ возвращает число между 1 и 12, а функция ГОД – число (год).
- Хотя Excel требует, чтобы аргумент функции МЕСЯЦ был представлен датой в числовом формате, этот аргумент может распознать и текст. Однако МЕСЯЦ(Окт) вернет ощибку, а вот если добавить к названию месяца любое число, например, 1, то Excel справится. Используйте, как в формуле выражение Окт1, заданное фрагментом F8&1, или 1Окт, заданное фрагментом 1&F8.
- Формулы с вспомогательными столбцами как правило работают быстрее.
Формула [2]:
- Если у вас Excel 2007 или более поздний, вы можете использовать функции СЧЁТЕСЛИМН и КОНМЕСЯЦА.
- Вам даны год (в виде числа) и месяц (как текст). Это означает, что вы можете вычислить дату начала и конца месяца, а затем определить даты, попажающие между ними.
- Месяц всегда начинается с первого числа, так что вы можете создать нижнюю границу диапазона конкатенацией:
"
>=1"
&F8&E8. Операции конкатенации возвращают текст, но это не страшно, т.к. функция СУММЕСЛИМН понимает даты в виде текста. - Вы используете функцию КОНМЕСЯЦА с аргументом число_месяцев равным нулю; это позволяет получить последнюю дату текущего месяца. Функция КОНМЕСЯЦА является динамической: она возвращает 28 или 29 для февраля и 30 или 31 для любого другого месяца.
- Эта формула является самой быстрой, если вам нужно получить решение в одной ячейке.
Формула [3]:
- Если у вас Excel версии младше 2007 г., вы можете использовать две функции СЧЁТЕСЛИ, одну – для верхнего диапазона, вторую – для нижнего. Фокус в том, чтобы сначала сосчитать все значения, которые равны или меньше верхней границы, а затем вычесть все значения, которые меньше нижней границы.
- В Excel 2003 или более ранней, чтобы добавить функцию КОНМЕСЯЦА, вам нужно выбрать Инструменты → Надстройки → Анализ Данных.
- Эта формула работает быстрее, чем формулы [4] и [5].
Формула [4]:
- Функции МЕСЯЦ и ГОД возвращают числа, извлекая их из порядкового номера даты.
- Далее сравниваются два фрагмента, каждый полкченный конкатенацией.
Формула [5]:
- Функция ТЕКСТ используется для представления чисел в виде текста. Второй аргумент этой функции – формат – определяет, как будет представлено число. Вы может конвертировать весь столбец А в текст, состоящий из 7 символов: 3 буквы месяца и 4 цифры года.
Нахождение объема продаж за год. На рис. 12.4 показан пример несоответствие формата года в критерии Е6 (число) и формата дат в диапазоне А2:А6 (порядковый номер). Цель – найти сумму продаж за год. На рисунке представлены шесть вариантов формул, которые могут решить задачу. Обратите внимание, что в формулах [1] и [2] критерии начала и конца года жестко зашиты в коде, т.к. они не могут изменяться. Это 1/1 и 31/12). Формулы размещены на рисунке в порядка увеличения скорости работы.
Рис. 12.4. Формата года в критерии Е6 (число) не соответствует формату дат в диапазоне А2:А6 (порядковый номер)
Допустим поставки товаров от поставщика 1 раз в неделю. Банковские транзакции взаиморасчетов с поставщиком товаров производятся регулярно каждый вторник. Необходимо быстро проверить в какие дни дата поставки товара совпадает с датой взаиморасчетов. Это позволит предоставить ежемесячный отчет за прошлый месяц о взаиморасчетах поставщику в день поставки товара и сэкономить на курьерских услугах. Для этого следует выделить все даты предполагаемых поставок, припадающие на вторник.
Поиск даты в диапазоне дат Excel
Для решения выше описанной задачи мы, используя специальную формулу в условном форматировании выполним поиск ближайшей даты в Excel для вторников и выделим цветом эти ячейки. Автоматическое выделения цветом календарных дат:
- Выделите диапазон ячеек B2:B10 и выберите инструмент: «ГЛАВНАЯ»-«Стили»-«Условное форматирование»-«Создать правило».
- Выберите: «Использовать формулу для определения форматируемых ячеек».
- Чтобы выбрать дни вторников в Excel для поля ввода введите формулу: =ДЕНЬНЕД(B2;2)=2 и нажмите на кнопку «Формат», чтобы задать желаемый цвет заливки для ячеек. Например, зеленый. Нажмите ОК на всех открытых окнах.
Результат выделения цветом каждого вторника в списке дат поставок товаров:
В формуле мы использовали функцию =ДЕНЬНЕД(), которая возвращает номер дня недели для исходной даты. В первом аргументе функции указываем ссылку на исходную дату. Ссылка относительная так как будет проверятся каждая дата в столбце B. Во втором аргументе обязательно следует указать число 2, чтобы функция правильно выдавала нам очередности дней недели (1-понедельник, 2-вторник и т.д.). Если не указать второй аргумент, то функция будет считать дни в английском формате: 1-sanday (неделя), 2-Monday (понедельник) и т.д.
Дальше идет оператор сравнения с числом 2. Если возвращаемое число функцией = 2 значит формула возвращает значение ИСТИНА и к текущей ячейке применяется пользовательский формат (красная заливка).
Выделения дат цветом только текущего месяца
В таблице представлен список проектов, которые должны быть реализованные на протяжении текущего полугодия. Список большой, но нас интересуют только те проекты, которые должны быть реализованы в текущем месяце. Визуально искать в списке даты текущего месяца – весьма неудобно. Можно использовать условное форматирование, чтобы Excel нам автоматически выделил цветом интересующие нас даты в списке. Пример таблицы проектов на текущий месяц в Excel:
Нам необходимо из целой таблицы выбрать дату в Excel на текущий месяц:
- Выделите диапазон ячеек B2:B11 и выберите инструмент: «ГЛАВНАЯ»-«Стили»-«Условное форматирование»-«Создать правило».
- Снова выбираем: «Использовать формулу для определения форматируемых ячеек».
- В поле ввода введите формулу: =МЕСЯЦ(B2)=МЕСЯЦ($C$2) и нажмите на кнопку «Формат», чтобы задать желаемый цвет заливки для ячеек. Например, зеленый. Нажмите ОК на всех открытых окнах.
В результате визуально отчетливо видно дни текущего месяца:
В представленной формуле для условного форматирования главную роль играет функция =МЕСЯЦ(), которая определяет номер месяца исходной даты. Ссылка на ячейку в аргументе первого раза использования функции МЕСЯЦ – относительная, так как проверятся будут несколько ячеек в столбце C. После функции стоит оператор сравнения с номером текущего месяца. Там уже используется абсолютная ссылка (значение аргумента неизменяемое). Если результаты вычислений по обе стороны оператора сравнения совпадают, тогда формула возвращает значение ИСТИНА и к текущей ячейке присваивается пользовательский формат (заливка зеленым цветом).
Теперь усложним задачу. Допустим у нас список проектов охватывает не полугодие, а несколько лет:
Тогда возникает сложность ведь в разные года номера месяцев будут совпадать и условное форматирование будет выделять лишние даты. Поэтому необходимо модернизировать формулу:
Готово:
Мы добавили в формулу две функции, которые позволяют нам выбрать дни определенного месяца и года:
- =ГОД() – функция работает по тому же принципу что и =МЕСЯЦ(). Разница только в том, что возвращает из даты номер года.
- =И() – данное имя функции говорит само за себя. То есть должны совпадать и номера месяцев и их номера годов.
Вся формула достаточно просто читается и ее легко использовать для решения похожих задач с помощью условного форматирования.
Читайте так же: как посчитать разницу между датами в днях.
Диапазон дат в одной ячейке (в текстовом формате) в MS EXCEL
Смотрите такжеGElenka то .файлик приложите,гдеесли в столбце
: Формула массива решить САМОстоятельно?!.СергейvispateresaПерейдите на вкладку Если день недели об ошибке.. зеленым цветом, а которому ячейка будет
пользователь будет вводить=ЕСЛИ(B19=КОНМЕСЯЦА(B19;0);»Последний день месяца»;ТЕКСТ(B19;»дд»)&»-«&ТЕКСТ(B19+МИН(B20;КОНМЕСЯЦА(B19;0)-B19);»дд.ММ.гггг»))
разным месяцам, тоВыведем диапазон дат (начальная: Добрый день! #ЗНАЧ указанны даты сFreeWedЛогика-то вам понятна:
: не вижу проблем: Вот на этомInput Message не равен 1Примечание:На вкладке не красным, т.к. выделяться если дата данные;В формуле предполагается, что
у начальной даты — конечная дата)Застряла на формулеBAG числами дней 01.02.2014: Еще раз Спасибо
Диапазон с указанием месяца и года
если >= И меняйте условия по примере нужно посчитать(Сообщение для ввода) (воскресенье) и неЧтобы указать подсказкуData правило (Между =СЕГОДНЯ()-14 находится в пределахвызовите инструмент Условное форматирование (Главная/
начальная дата введена будет дополнительно выводиться в одной ячейке Если.: ну вот… и так далее всем большоеV
Диапазон в пределах 1 месяца
датам и условие количество да за или равен 7 (суббота), при вводе или(Данные) нажмите кнопку и =СЕГОДНЯ()+14) у двух недель от Стили/ Условное форматирование/ в ячейку месяц. в формате 21-25.10.2012.Подскажите, пожалуйста, как
BAG
200?’200px’:»+(this.scrollHeight+5)+’px’);»>=СУММЕСЛИ(G:G;»01.02.2014″;AE:AE)Извините за глупое: вариант да или нет апрель 2015Error Allert дата допускается (<> текст для оповещения
excel2.ru
Информирование пользователя MS EXCEL о принадлежности ДАТЫ к определенному диапазону
Data Validation нас идет первым сегодняшнего числа, используйте Управление правилами). ОткроетсяB19
Более простым случаем являетсяПусть задана начальная дата задать диапазон дат: Кажется разобрался, виной- возвращает результат
- сообщение, формула Суммпроизв=СУММПРОИЗВ(($A$2:$A$12=$J13)*($C$2:$C$12=K$12)*$D$2:$D$12)
- если что тоСергей(Сообщение об ошибке), означает не равно).
- об ошибке, перейдите(Проверка данных). и имеет наивысший формулы =СЕГОДНЯ()-14 и
окно Диспетчер правил, а длительность периода введена вывод начальной даты (ячейка с помощью формулы
- спец символы # только для указанной реально самая простая
- если случайно подойдет не то тогда: =СЧЁТЕСЛИМН(C[-2];»нет»;C[-3];»>=»&—«01.04.2015»;C[-3];»8 прально чтобы прописать подсказку, Другими словами, понедельники,
- на вкладку
- Из выпадающего списка приоритет. Для правильного
- =СЕГОДНЯ()+14. условного форматирования;
- в ячейку
- с указанием месяцаB7
- ЕСЛИ в нижнейкитин даты, а постановочные
в данном случае:) два варианта то реальный пример чтоvispateresa всплывающую при вводе вторники, среды, четверги
- Input Message
- Allow отображения поменяем порядок
- ВНИМАНИЕ!нажмите Создать правило;
- B20 и года (что
- ) и длительность периода таблице, что бы
: ога.да еще у символы * ?Михаил С. эта формула не есть что хотите: спасибо огромное! Вы или текст для и пятницы допустимы.(Сообщение для ввода)
(Тип данных) выберите
критериев, используя соответствующиеКогда к диапазонувыберите Форматировать только ячейки,. позволяет корректно учесть (ячейка в расчете использовалась вас формула стоит не работают: Зато и самая подходит. с указанием вручную очень помогли оповещения об ошибке. Воскресенья и субботы или пункт стрелочки. ячеек применяются два которые содержат;Используем Условное форматирование для случай, когда даты
B8 цена 1 или в том жекитин тормозная. Если такаяNic70y результата вычисления формулvispateresaУрок подготовлен для Вас – нет. Поскольку,Error AllertDateВ результате получим вот или более правилв выпадающем списке выберите
подачи сигнала пользователю принадлежат разным годам).
), выведем диапазон дат
2 периода соответственно. столбце,где и считает.о: попробуйте так формула всего одна
- : Формула массиваМВТ: не углядела один командой сайта office-guru.ru прежде чем открыть
- (Сообщение об ошибке).(Дата).
- такую картину. Условного форматирования, приоритет Равно;
excel2.ru
Как отбросить недопустимые даты в Excel
- MS EXCEL о принадлежности
- В этом случае
в одной ячейке_Boroda_ циклической ссылке не200?’200px’:»+(this.scrollHeight+5)+’px’);»>=СУММПРОИЗВ((МЕСЯЦ(G:G)=2)*AE:AE)
- — то не=МИН(ЕСЛИ(K$12=$C$2:$C$12;ЕСЛИ($J13>=$A$2:$A$12;ЕСЛИ($J13 В Excel: Мне кажется, проще
- момент ((( -Источник: http://www.excel-easy.com/examples/reject-invalid-dates.html окно проверки данных,Из выпадающего спискаИз выпадающего списка
Вне диапазона дат
- СОВЕТ: обработки определяется порядкомвведите формулу =СЕГОДНЯ(); даты к определенному нужно использовать формулу в формате 21-25.10.2012
- : Так нужно? предупреждал Эксель?BAG страшно. Если их новее 2003 можно
- сводной таблицей сделать задача должна решатьсяПеревел: Антон Андронов мы выделили диапазонAllowData
Чтобы найти все их перечисления внажав кнопку Формат выберите, диапазону. =ТЕКСТ(B13;»дд.ММ.гггг»)&»-«&ТЕКСТ(B13+B14;»дд.ММ.гггг») (см. файл примера).200?’200px’:»+(this.scrollHeight+5)+’px’);»>=H3*ЕСЛИ((H13>=$D14)*(H13<>=$F14)*(H13
- BAG: не выходит - под сотню, и попробовать СУММЕСЛИМН
и поставить группировку не только для
Автор: Антон АндроновA2:A4(Тип данных) выберите(Значение) выберите пункт ячейки на листе, Диспетчере правил условного например, красный шрифт;Предположим, что пользователь вводитВ формуле предполагается, чтоЭто можно сделать сУж коли нужно
Воскресенья и субботы
- : тоталитарная лажа, в ошибочка #ЗНАЧ! диапазоны большие -FreeWed по годам и 2015 года, а
- vispateresa, Excel автоматически вставил пунктBetween к которым применены форматирования. Правило, расположенноенажмите ОК и вернитесь некие даты событий.
начальная дата введена
помощью формулы =ТЕКСТ(B7;"дд")&"-"&ТЕКСТ(B7+B8;"дд.ММ.гггг")
GElenka оригинале файла какойjakim то почувствуете.: Спасибо большое за месяцам (см. в также для предыдущих: Используется формула СЧЁТЕСЛИМН формулу во всеCustom(Между). правила Условного форматирования необходимо: в списке выше, в Диспетчер правил Требуется, чтобы EXCEL в ячейкуСовет: то глюк, буду:FreeWed помощь, примере) и последующих с двумя условиями.
- ячейки этого диапазона.(Другой).Введите начальную и конечнуюна вкладке Главная в имеет более высокий условного форматирования;
автоматически выделял ячейкиB13: О пользовательском формате
- ура, все работает! разбираться.200?’200px’:»+(this.scrollHeight+5)+’px’);»>=SUMPRODUCT((MONTH(A:A)=2)*B:B):Я Самостоятельно пробовал,
FreeWedСергей
По одному изЧтобы проверить это, выделитеВ поле дату, как показано группе Редактирование щелкните приоритет, чем правило,Теперь создадим правило, по следующим образом:, а длительность периода введена дат можно прочитатьСпасибо большое
Получается так чтокитин
Михаил С.,
давно уже ничего
: Добрый день, Уважаемые
office-guru.ru
Как в условие формулы подставить диапазон дат?
: в моем примере условий необходимо из ячейку
F на рисунке ниже, стрелку рядом с расположенное в списке которому ячейка будеткрасным, если дата совпадает в ячейку в статье Пользовательский
reventon9 формулы нельзя расположить: не верю.©
Михаил подскажите пожалуйста, не делал вПрошу помощи в последняя формула считает столбца с конкретнымиA3
ormula и нажмите командой Найти и ниже. Новые правила выделяться, если дата
с сегодняшним днем;B14
формат ДАТЫ и: Описание внутри в одном столбце
jakim в конструкции той Экселе вот и решении простенькой задачки. апрель не зависимо датами выбирать ячейки,и нажмите кнопку(Формула) пропишите формулу,
ОК выделить; всегда добавляются в находится в пределахоранжевым, если вводимая дата
. ВРЕМЕНИ в MS
По сути вопрос с расчетными цифрами,: Опоздал. BAG проверьте формулы, которую вы отказывается мозг работать. Есть таблица в от года
относящиеся к определенномуData Validation показанную ниже, и.
выберите в списке пункт начало списка и 1 недели от находится в пределахИногда требуется, чтобы начальная
EXCEL сводится к поискудаты должны начинаться формат столбца G. написали, я раньше Тоже думал про
которой указаны впс не задавайте месяцу и году.(Проверка данных). нажмитеПояснение: Условное форматирование;
planetaexcel.ru
Выбор значение из диапазона между датами
поэтому обладают более сегодняшнего числа:
1 недели от и конечная датыЭто решение, однако, не определенной даты в с самого верхаBAG такого ПОИСКПОЗ($J13;ЕСЛИ($C$2:$C$12=K$12;$A$2:$A$12))) не Суммпроизв — но каком промежутке действовал диапазон полность столбцом Например, февраль 2014Как видно на рисунке,
ОК
Даты между 20будут выделены все ячейки, высоким приоритетом, однаконажмите Создать правило;
сегодняшнего числа; принадлежали одному месяцу.
учитывает, что начальная диапазоне, и проставление
листа, и ячейки
: Специально заново отформатировал встречал, а именно правильно ее так определенный тариф. Необходимо
vispateresa или апрель 2015.
эта ячейка тоже. мая 2013 года
которым применены правила порядок правил можновыберите Форматировать только ячейки,
зеленым, если вводимая дата В этом случае и конечная дата в этом диапазоне не должны содержать столбец G как формула ЕСЛИ в и не дописал. заполнить значения в
: Столбец дат можетКак задать в содержит формулу.=AND(WEEKDAY(A2)<>1,WEEKDAY(A2)<>7) и сегодняшней датой Условного форматирования. изменить в диалоговом которые содержат;
находится в пределах в формуле необходимо
могут принадлежать разным соответствующих значений. ни чего кроме
даты , но ПОИСКПОЗ.Спасибо большое за желтых ячейках, то
быть абсолютно в формуле такой диапазонВведите дату 24 августа=И(ДЕНЬНЕД(A2)<>1;ДЕНЬНЕД(A2)<>7) + 5 днейВне диапазона дат окне при помощив выпадающем списке выберите 2 недель от
провести проверку: не месяцам. В этомЗаранее спасибо
цифр, результат тот же.Считает правильно, а помощь, на данном есть в какой разнобой. Нужна формула, дат? 2013 (суббота) в
Пояснение: допустимы. Даты вне
Воскресенья и субботы кнопок со стрелками
planetaexcel.ru
как в формуле указать диапазон дат для конкретного месяца? (Формулы)
Между; сегодняшнего числа. выходит ли конечная случае формула может
китининаче ошибка формулычто может влиять понять не могу!
форуме уже давно,
диапазон попадает дата, которая будет считатьСергей ячейкуФункция
этого диапазона недопустимы.Этот пример объясняет, как Вверх и Вниз.
введите формулы =СЕГОДНЯ()-7 иСначала создадим правило, по дата за границы
вернуть, например 21-05.10.2012,: И вам здравствуйте .
на это, объединениеМихаил С.
но из за тот тариф и количество для конкретного
: если б показалиA2WEEKDAYВведите в ячейку использовать проверку данных,
Если мы расположим правила =СЕГОДНЯ()+7; которому ячейка будет месяца. Если конечная что довольно сложно
.чисто по вашемуОт этого страдает ячеек в шапке,: Пояснения в файле
смены платформы мой необходимо брать.
месяца конкретного года. пример можно было.
(ДЕНЬНЕД) возвращает числоА2 чтобы отбросить недопустимые как показано нанажав кнопку Формат выберите, выделяться, если дата дата выходит за
для понимания. Поэтому, файлу примерно так шапка файла с группировка строк илиBAG
логин отказался работать,Заранее всем спасибо.Например, количество «нет» сказать точно а
Результат: Excel выдаёт сообщение от 1 (воскресенье)дату – 19 даты. предыдущем рисунке, то например, оранжевый шрифт;
совпадает с сегодняшним границы месяца, то
изменим формулу: =ТЕКСТ(B7;ЕСЛИ(МЕСЯЦ(B7)-МЕСЯЦ(B7+B8);»дд.ММ»;»дд»))&»-«&ТЕКСТ(B7+B8;»дд.ММ.гггг»)200?’200px’:»+(this.scrollHeight+5)+’px’);»>=ЕСЛИ(И($AL$3<>=$G$2:$AK$2);$E$3/(($AM$3-$AL$3)+1);»») описанием столбцов, досадно, фильтрация !?
: Подскажите как указать
excelworld.ru
Как задать диапазон дат формулой ЕСЛИ (Формулы/Formulas)
пришлось еще разZ
для апреля 2015 так пишите в
об ошибке. до 7 (суббота), мая 2013 года.Выделите диапазон при вводе сегодняшнейПроделайте аналогичные шаги для днем (см.Файл примера): она заменяется последней
Теперь. если начальная иreventon9
но ладно.
китин
диапазон дат для регистрироваться.
: И ни одной
или количество "да"
excelworld.ru
Формула поиска даты в диапазоне (Формулы/Formulas)
условиях >=датаПримечание:
представляющее день недели.Результат: Excel выдаёт сообщениеA2:A4 даты она выделится создания правила, повыделите диапазон, в который
датой месяца.
конечная даты принадлежат: Спасибо за оперативность!!!Спасибо за помощь: а чё гадать конкретного месяца 02.2014,
Михаил С. вашей попытки ее
excelworld.ru
для марта 2014
Skip to content
На примерах мы покажем, как получить месяц из даты в таблицах Excel, преобразовать число в его название и наоборот, а также многое другое.
Думаю, вы уже знаете, что дата в Excel хранится в виде порядковых чисел. Поэтому в явном виде в ней нельзя увидеть ни день, ни месяц, ни год. Тем не менее, очень часто работать с ними по отдельности крайне необходимо. Сейчас мы рассмотрим, как выделить месяц из даты в виде числа или текста.
В этом руководстве вы узнаете:
- Функция МЕСЯЦ
- Номер месяца — по дате
- Извлекаем название месяца из даты
- Получаем месяц прописью при помощи форматирования
- Как гибко настроить имя месяца при помощи формул
- Как название месяца превратить в число
- Использование Power Query
Функция МЕСЯЦ в Excel – синтаксис и использование
Microsoft Excel предоставляет специальную функцию МЕСЯЦ() для извлечения месяца из даты. Она возвращает его порядковый номер в диапазоне от 1 (январь) до 12 (декабрь).
Функцию МЕСЯЦ() можно использовать во всех версиях Excel, и ее синтаксис настолько прост, насколько это возможно:
МЕСЯЦ(дата)
Для корректной работы этой функции аргумент следует вводить с помощью функции ДАТА(год; месяц; день). Либо ссылаться на ячейку, в которой она корректно записана.
Например, формула =МЕСЯЦ(ДАТА(2021;2;5)) возвращает 2, поскольку ДАТА представляет 5 февраля 2021 года.
Формула =МЕСЯЦ(«1-Мар-2020») также работает нормально. Дело в том, что если вы введете такой текст в ячейку, то Excel сразу же распознает его как дату. То же самое происходит и в формуле.
На практике гораздо удобнее ссылаться на ячейку с датой или возвращать ее какой-либо другой функцией, чем прописывать прямо в формуле. Например:
=МЕСЯЦ(A1) — возвращает месяц из ячейки A1.
=МЕСЯЦ(СЕГОДНЯ()) — возвращает номер текущего месяца.
На первый взгляд функция МЕСЯЦ() в Excel может показаться простой. Но просмотрите приведенные ниже примеры, и вы удивитесь, узнав, сколько полезных вещей она может делать.
Как определить номер месяца по дате в Excel
Есть несколько способов перевести дату в месяц. Какой из них выбрать, зависит от того, какого именно результата вы пытаетесь достичь.
- Функция МЕСЯЦ() – определить номер месяца из даты.
Это наиболее очевидный и простой способ. Например:
- =МЕСЯЦ(A2) – возвращает месяц из даты в ячейке A2.
- =МЕСЯЦ(ДАТА(2020,7,15)) – возвращает число 7, соответствующее июлю.
- =МЕСЯЦ(«15-Апр-2020») – очевидно, возвращает число.
2. Функция ТЕКСТ() – вывести месяц в виде текстовой строки.
Альтернативный способ получить номер месяца из даты Excel — использовать функцию ТЕКСТ:
- =ТЕКСТ(A2; «м») — возвращает номер без нуля в начале, от 1 до12.
- =ТЕКСТ(A2;»мм») — возвращает номер всегда из двух цифр, от 01 до 12.
Будьте очень внимательны при использовании текстовых функций, потому что они всегда возвращают порядковые номера месяцев в виде текстовых значений. И если вы планируете выполнить какие-то дальнейшие вычисления или использовать полученные числа в других формулах, вам лучше придерживаться функции МЕСЯЦ().
Или же при помощи несложного математического действия преобразуйте текст в число:
=—ТЕКСТ(A2; «м»)
На следующем скриншоте показаны результаты всех приведенных выше формул. Обратите внимание на выравнивание по правому краю чисел, возвращаемых функцией МЕСЯЦ() (ячейки C2 и C3), в отличие от выравнивания по левому краю текстовых значений, возвращаемых функциями ТЕКСТ (ячейки C5 и C6).
Как получить название месяца из даты
Если вы хотите видеть название месяца, а не число, вы снова используете функцию ТЕКСТ, но с другим шаблоном формата:
- =ТЕКСТ(A2;»МММ») — возвращает сокращенное трёхбуквенное название, с «янв» по «дек».
- =ТЕКСТ(A2;»ММММ») — выводит полное название, с января по декабрь.
Если вы на просто хотите вывести название месяца вместо полной даты, тогда вам не нужны никакие формулы.
Выберите ячейку с датой, нажмите Ctrl + 1
, чтобы открыть диалоговое окно «Формат ячеек». На вкладке «Число» выберите «Все форматы» и введите «МММ» или «ММММ» в поле «Тип», чтобы отобразить сокращенное или полное название соответственно. В этом случае ваши данные останутся полностью функциональными датами Excel, которые вы можете использовать в расчетах и других формулах. Дополнительные сведения об изменении формата см. в статье Создание пользовательского формата даты в Excel.
Автоматическое заполнение.
После того как вы отформатировали столбец значений даты в длинном формате, показанном выше, вы сможете вывести месяц в виде текстового значения, используя автоматическое заполнение.
Начните вводить несколько названий месяца в столбце рядом с отформатированными датами.
Excel угадает закономерность и выведет предлагаемое заполнение в светло-сером цвете. Вы можете нажать Enter, чтобы принять эти значения.
Таким образом, названия месяцев будут существовать как текстовые значения, а не только отформатированные даты.
Как преобразовать номер месяца в его название.
Использование форматирования
Предположим, у вас есть список чисел (от 1 до 12) на листе Excel, который вы хотите конвертировать в названия месяцев. Для этого можно использовать любую из следующих формул:
- Чтобы вернуть сокращенное название (янв – дек):
=ТЕКСТ(A2*28;»МММ»)
=ТЕКСТ(ДАТА(2020;A4;1);»МММ»)
- Чтобы вернуть полное имя (январь – декабрь):
=ТЕКСТ(A2*28;»ММММ»)
=ТЕКСТ(ДАТА(2020;A4;1);»ММММ»)
Во всех приведенных выше формулах A2 – это ячейка с номером. И единственная реальная разница между формулами – это код формата:
- «МММ» — трехбуквенное сокращение, например янв – дек,
- «ММММ» — название полностью.
3. Чтобы вернуть только первую букву:
=ТЕКСТ(ДАТА(2020;A4;1);»МММММ»)
- «МММММ» — только первая буква названия.
Как работают эти формулы?
Excel считает число 1 днем 1 января 1900 года. Умножая 1, 2, 3 и т. д. на 28, вы получаете дни 28, 56, 84, и т. д. 1900 года, то есть какое-то число в январе, феврале, марте и т. д. Код формата «МММ» или «ММММ» выводит название месяца. А год для нас здесь совсем не важен.
Вторая же формула просто создает дату первого числа соответствующего месяца 2020 года.
Более гибкий способ – функции ВЫБОР, ИНДЕКС или ПЕРЕКЛЮЧ.
Для максимальной гибкости вы можете создавать свои собственные наименования с помощью функции ВЫБОР следующим образом:
=ВЫБОР(МЕСЯЦ(A3);»янв»;»фев»;»мар»;»апр»;»май»;»июн»;»июл»;»авг»;»сен»;»окт»;»ноя»;»дек»)
Введите названия месяцев, которые вы хотите вернуть (настроенные по желанию) как значения в функции ВЫБОР, после первого аргумента, который вводится как МЕСЯЦ([дата]). Функция МЕСЯЦ() извлечет номер (число от 1 до 12), и ВЫБОР будет использовать его для возврата n-го значения в списке.
Использование ВЫБОР – это более громоздкая формула. Но это более гибкое решение, поскольку позволяет вывести как результат любые значения, которые вы пожелаете (т.е. вы можете использовать значения, которые являются настраиваемыми, сокращенными, не сокращенными, в другом падеже, на другом языке).
Вот, например:
=ВЫБОР(МЕСЯЦ(A4);»январь»;»февраль»;»Март»;»апрель»;»май»;»июнь»;»июль»;»август»;»сентябрь»;»октябрь»;»ноябрь»;»декабрь»)
Еще один интересный вариант – использование функции ИНДЕКС. Вновь у нас в качестве аргумента используется массив названий, которых мы можем настраивать так, как будет необходимо.
=ИНДЕКС({«январь»;»февраль»;»Март»;»апрель»;»май»;»июнь»;»июль»;»август»;»сентябрь»;»октябрь»;»ноябрь»;»декабрь»};МЕСЯЦ(A7))
А второй аргумент – это порядковый номер месяца. Его можно указать явным образом либо получить функцией МЕСЯЦ(). Из массива будет извлечено значение, порядковый номер которого мы указали.
И, наконец, третий вариант – функция ПЕРЕКЛЮЧ. Вновь извлекаем порядковый номер как числовое значение от 1 до 12.
А затем пишем вот такую формулу:
=ПЕРЕКЛЮЧ(МЕСЯЦ(A3);1;»янв»;2;»фев»;3;»мар»;4;»апр»;5;»май»;6;»июн»;7;»июл»;8;»авг»;9;»сен»;10;»окт»;11;»ноя»;12;»дек»)
Как видите, здесь тоже каждому числу соответствует определённое значение. Его мы и выводим в столбце B.
Как преобразовать название месяца в число
Теперь рассмотрим противоположную по логике задачу. Существуют две функции Excel, которые могут помочь вам преобразовать названия месяцев в числа – ДАТАЗНАЧ() и МЕСЯЦ(). Функция Excel ДАТАЗНАЧ() преобразует дату, сохраненную в виде текста, в порядковый номер, который Microsoft Excel распознает как дату. Затем функция МЕСЯЦ() извлекает из неё номер месяца.
Полная формула выглядит следующим образом:
=МЕСЯЦ(ДАТАЗНАЧ(«1-«&A2))
Где A2 – это ячейка, содержащая название месяца, которое вы хотите превратить в число.
Конструкция
«1-«&
добавляется к значению ячейки, чтобы дать понять Экселю, что это дата. Иначе говоря, если вы в ячейку руками введёте, к примеру,
1-февраль
или
1-фев
то программа определит вашу информацию как 1 февраля текущего года, дополнит недостающее содержимое в ячейке и применит формат даты для её отображения.
То же самое происходит и в формуле ДАТАЗНАЧ, когда мы к единице дописываем имя месяца с дефисом. Единственное важное условие здесь – нужно использовать именительный падеж, как это принято по умолчанию в Windows.
Однако, достаточно даже первых трёх букв месяца, чтобы не заморачиваться с падежами 😊.
Так тоже работает.
Использование Power Query.
Надстройка Excel Power Query может помочь вам перевести дату в месяц и извлекать его номер или название.
Итак, у нас есть список дат и нужно вытащить из них месяц.
- Прежде всего, преобразуйте ваши данные в таблицу.
- После этого выберите любую из ячеек в таблице и перейдите на вкладку «Данные».
- Нажмите кнопку «Из таблицы».
Ваша таблица будет загружена в Power Query.
Здесь у вас есть два варианта действий: либо добавить новый столбец, в который будет записан нужный результат, либо сразу преобразовать ваши даты. Пропустите следующие два шага, если вы просто хотите преобразовать дату в месяц без добавления нового столбца.
- Кликните правой кнопкой мыши заголовок столбца.
- Нажмите «Создать дубликат».
- Кликните по заголовку нужного столбца правой кнопкой мыши.
- Перейдите Преобразование ➜ Месяц ➜ Название месяца.
- Ваши даты тут же будут преобразованы, как на скриншоте ниже.
- Еще одна вещь, которую имеет смысл сделать: щелкните правой кнопкой мыши заголовок столбца и переименуйте его в «Месяц».
- Теперь нажмите «Закрыть и загрузить», и ваши данные будут перенесены в рабочий лист.
Плюсы —
Ваши исходные данные ни при каком раскладе не пострадают.
Минусы —
У вас должен быть установлен Power Query в вашей версии Excel. Название месяца будет полным, в именительном падеже.
Вот основные способы, как можно в Excel вывести месяц из даты. Надеюсь, эти советы были вам полезны.
Содержание
- 1 Глава 12. Выборка из диапазона дат с помощью критерия в ином формате
- 2 Поиск даты в диапазоне дат Excel
- 3 Выделения дат цветом только текущего месяца
- 4 Общая формула
- 5 Объяснение
- 6 Как работает эта формула
- 7 Дата окончания отсутствует
- 8 Отсутствует дата начала
Формулами.
Исходные: A1 — начальная дата, В1 — длительность проекта в днях.
В А2 формула:
=ЕСЛИ(СТРОКА(A2)>$B$1;0;A1+1)
Протянуть формулу вниз.
Формулы строк, которые ниже требуемого диапазона дат, покажут 0 (ноль).
Нули можно скрыть:
закладка Файл-Параметры-Дополнительно-Для_листа…, снять галку отображения нулевых значений.
Если даты не используются в дальнейших вычилениях, вместо нуля можно выводить пустую строку:
=ЕСЛИ(СТРОКА(A2)>$B$1;"";A1+1)
Для периода, заданного в месяцах или годах, нужно определить количество дней в периоде или последнюю дату.
Например, для месяцев полная формула для А2:
=ЕСЛИ(СТРОКА(A2)>ДАТА(ГОД($A$1);МЕСЯЦ($A$1)+$B$1;ДЕНЬ($A$1)-1);"";A1+1)
Если показывать только даты помесячно:
ЕСЛИ(СТРОКА(A2)>$B$1;0;ДАТА(ГОД($A$1);МЕСЯЦ($A$1)+СТРОКА(A1);ДЕНЬ($A$1)))
Для уменьшения вычислений определение последней даты лучше вывести в отдельню ячейку и в формулах ссылаться на нее. Вариант:
=КОНМЕСЯЦА(A1;B1-1)+ДЕНЬ(A1)-1 =ДАТАМЕС($A$1;СТРОКА(A1))
Макросом.
Исходные: A1 — начальная дата, В1 — длительность проекта в месяцах.
Диапазон вставки: столбец Е — порядковый номер, столбец F — дата.
Формируется список дат с шагом 1 месяц:
Sub PeriodDats() Dim ArrDate() Dim dStart As Date Dim lPer As Long, i As Long With ActiveSheet dStart = .Cells(1, 1).Value ' начальная дата lPer = .Cells(1, 2).Value ' период в месяцах If dStart = 0 Or lPer < 1 Then Exit Sub ' нет исходных данных, выход dStart = DateAdd("m", -1, dStart) ' первая дата будет dStart+месяц ReDim ArrDate(1 To lPer, 1 To 2) ' задаем размерность массива For i = 1 To lPer ' в цикле заполняем массив ArrDate(i, 1) = DateAdd("m", i, dStart) Next i .Columns("E:F").ClearContents ' очищаем столбцы .Cells(1, 5).Resize(lPer, 2).Value = ArrDate ' даты на лист End With MsgBox "Полный порядок", 64, "ФОРМИРОВАНИЕ ПЕРИОДА" End Sub
Глава 12. Выборка из диапазона дат с помощью критерия в ином формате
Это глава из книги: Майкл Гирвин. Ctrl+Shift+Enter. Освоение формул массива в Excel.
Предыдущая глава Оглавление Следующая глава
При создании формул массива, операторы массива могут значительно увеличить время расчета. В этой короткой главе рассматриваются два примера, в которых обычная формула справляется с задачей значительно быстрее формулы массива.
Подсчет дат, когда критерий сформулирован в виде текста. На рис. 12.1 показан набор данных с датами в стандартном формате Excel, то есть в виде порядковых чисел. В тоже время, критерии заданы как число (год) и текст (месяц). Цель – подсчитать, сколько дат соответствуют критерию. Проблема в том, что у нас несоответствие формата данных: в столбце A даты как порядковые номера, а критерий – смесь чисел и текста. На рис. 12.1 приведено пять различных формул, которые можно использовать для достижения цели.
Рис. 12.1. Подсчет количества дат (заданных порядковыми номерами) по двум критериям: году (число) и месяцу (текст)
Скачать заметку в формате Word или pdf, примеры в формате Excel2013
Давайте подробнее изучим работу этих пяти формул.
Формула :
- Если вы можете позволить себе вспомогательный столбец, функция СЧЁТЕСЛИ будет самым простым решением.
- Функция МЕСЯЦ возвращает число между 1 и 12, а функция ГОД – число (год).
- Хотя Excel требует, чтобы аргумент функции МЕСЯЦ был представлен датой в числовом формате, этот аргумент может распознать и текст. Однако МЕСЯЦ(Окт) вернет ощибку, а вот если добавить к названию месяца любое число, например, 1, то Excel справится. Используйте, как в формуле выражение Окт1, заданное фрагментом F8&1, или 1Окт, заданное фрагментом 1&F8.
- Формулы с вспомогательными столбцами как правило работают быстрее.
Формула :
- Если у вас Excel 2007 или более поздний, вы можете использовать функции СЧЁТЕСЛИМН и КОНМЕСЯЦА.
- Вам даны год (в виде числа) и месяц (как текст). Это означает, что вы можете вычислить дату начала и конца месяца, а затем определить даты, попажающие между ними.
- Месяц всегда начинается с первого числа, так что вы можете создать нижнюю границу диапазона конкатенацией:
"
>=1"
&F8&E8. Операции конкатенации возвращают текст, но это не страшно, т.к. функция СУММЕСЛИМН понимает даты в виде текста. - Вы используете функцию КОНМЕСЯЦА с аргументом число_месяцев равным нулю; это позволяет получить последнюю дату текущего месяца. Функция КОНМЕСЯЦА является динамической: она возвращает 28 или 29 для февраля и 30 или 31 для любого другого месяца.
- Эта формула является самой быстрой, если вам нужно получить решение в одной ячейке.
Формула :
- Если у вас Excel версии младше 2007 г., вы можете использовать две функции СЧЁТЕСЛИ, одну – для верхнего диапазона, вторую – для нижнего. Фокус в том, чтобы сначала сосчитать все значения, которые равны или меньше верхней границы, а затем вычесть все значения, которые меньше нижней границы.
- В Excel 2003 или более ранней, чтобы добавить функцию КОНМЕСЯЦА, вам нужно выбрать Инструменты → Надстройки → Анализ Данных.
- Эта формула работает быстрее, чем формулы и .
Формула :
- Функции МЕСЯЦ и ГОД возвращают числа, извлекая их из порядкового номера даты.
- Далее сравниваются два фрагмента, каждый полкченный конкатенацией.
Формула :
- Функция ТЕКСТ используется для представления чисел в виде текста. Второй аргумент этой функции – формат – определяет, как будет представлено число. Вы может конвертировать весь столбец А в текст, состоящий из 7 символов: 3 буквы месяца и 4 цифры года.
Нахождение объема продаж за год. На рис. 12.4 показан пример несоответствие формата года в критерии Е6 (число) и формата дат в диапазоне А2:А6 (порядковый номер). Цель – найти сумму продаж за год. На рисунке представлены шесть вариантов формул, которые могут решить задачу. Обратите внимание, что в формулах и критерии начала и конца года жестко зашиты в коде, т.к. они не могут изменяться. Это 1/1 и 31/12). Формулы размещены на рисунке в порядка увеличения скорости работы.
Рис. 12.4. Формата года в критерии Е6 (число) не соответствует формату дат в диапазоне А2:А6 (порядковый номер)
Допустим поставки товаров от поставщика 1 раз в неделю. Банковские транзакции взаиморасчетов с поставщиком товаров производятся регулярно каждый вторник. Необходимо быстро проверить в какие дни дата поставки товара совпадает с датой взаиморасчетов. Это позволит предоставить ежемесячный отчет за прошлый месяц о взаиморасчетах поставщику в день поставки товара и сэкономить на курьерских услугах. Для этого следует выделить все даты предполагаемых поставок, припадающие на вторник.
Для решения выше описанной задачи мы, используя специальную формулу в условном форматировании выполним поиск ближайшей даты в Excel для вторников и выделим цветом эти ячейки. Автоматическое выделения цветом календарных дат:
- Выделите диапазон ячеек B2:B10 и выберите инструмент: «ГЛАВНАЯ»-«Стили»-«Условное форматирование»-«Создать правило».
- Выберите: «Использовать формулу для определения форматируемых ячеек».
- Чтобы выбрать дни вторников в Excel для поля ввода введите формулу: =ДЕНЬНЕД(B2;2)=2 и нажмите на кнопку «Формат», чтобы задать желаемый цвет заливки для ячеек. Например, зеленый. Нажмите ОК на всех открытых окнах.
Результат выделения цветом каждого вторника в списке дат поставок товаров:
В формуле мы использовали функцию =ДЕНЬНЕД(), которая возвращает номер дня недели для исходной даты. В первом аргументе функции указываем ссылку на исходную дату. Ссылка относительная так как будет проверятся каждая дата в столбце B. Во втором аргументе обязательно следует указать число 2, чтобы функция правильно выдавала нам очередности дней недели (1-понедельник, 2-вторник и т.д.). Если не указать второй аргумент, то функция будет считать дни в английском формате: 1-sanday (неделя), 2-Monday (понедельник) и т.д.
Дальше идет оператор сравнения с числом 2. Если возвращаемое число функцией = 2 значит формула возвращает значение ИСТИНА и к текущей ячейке применяется пользовательский формат (красная заливка).
Выделения дат цветом только текущего месяца
В таблице представлен список проектов, которые должны быть реализованные на протяжении текущего полугодия. Список большой, но нас интересуют только те проекты, которые должны быть реализованы в текущем месяце. Визуально искать в списке даты текущего месяца – весьма неудобно. Можно использовать условное форматирование, чтобы Excel нам автоматически выделил цветом интересующие нас даты в списке. Пример таблицы проектов на текущий месяц в Excel:
Нам необходимо из целой таблицы выбрать дату в Excel на текущий месяц:
- Выделите диапазон ячеек B2:B11 и выберите инструмент: «ГЛАВНАЯ»-«Стили»-«Условное форматирование»-«Создать правило».
- Снова выбираем: «Использовать формулу для определения форматируемых ячеек».
- В поле ввода введите формулу: =МЕСЯЦ(B2)=МЕСЯЦ($C$2) и нажмите на кнопку «Формат», чтобы задать желаемый цвет заливки для ячеек. Например, зеленый. Нажмите ОК на всех открытых окнах.
В результате визуально отчетливо видно дни текущего месяца:
В представленной формуле для условного форматирования главную роль играет функция =МЕСЯЦ(), которая определяет номер месяца исходной даты. Ссылка на ячейку в аргументе первого раза использования функции МЕСЯЦ – относительная, так как проверятся будут несколько ячеек в столбце C. После функции стоит оператор сравнения с номером текущего месяца. Там уже используется абсолютная ссылка (значение аргумента неизменяемое). Если результаты вычислений по обе стороны оператора сравнения совпадают, тогда формула возвращает значение ИСТИНА и к текущей ячейке присваивается пользовательский формат (заливка зеленым цветом).
Теперь усложним задачу. Допустим у нас список проектов охватывает не полугодие, а несколько лет:
Тогда возникает сложность ведь в разные года номера месяцев будут совпадать и условное форматирование будет выделять лишние даты. Поэтому необходимо модернизировать формулу:
Готово:
Мы добавили в формулу две функции, которые позволяют нам выбрать дни определенного месяца и года:
- =ГОД() – функция работает по тому же принципу что и =МЕСЯЦ(). Разница только в том, что возвращает из даты номер года.
- =И() – данное имя функции говорит само за себя. То есть должны совпадать и номера месяцев и их номера годов.
Вся формула достаточно просто читается и ее легко использовать для решения похожих задач с помощью условного форматирования.
Читайте так же: как посчитать разницу между датами в днях.
Общая формула
= ТЕКСТ(дата1; «формат») & «-» & ТЕКСТ (дата2; «формат»)
Объяснение
Чтобы отобразить диапазон дат в одной ячейке на основе дат в разных ячейках, вы можете использовать формулу, основанную на функции ТЕКСТ.
В показанном примере формула в ячейке E5:
= ТЕКСТ (B5; «ммм д») & «-» & ТЕКСТ(C5; «ммм д»)
Как работает эта формула
Функция ТЕКСТ принимает числовые значения и преобразует их в текстовые значения, используя заданный вами формат. В этом примере мы используем формат «ммм д» для обеих функций TEКСT в E5. Результаты объединяются дефисом, используя простую конкатенацию.
Примечание. Другие примеры в столбце E используют разные текстовые форматы.
Дата окончания отсутствует
Если дата окончания отсутствует, формула не будет работать правильно, потому что дефис будет добавлен к дате начала (например, «1 марта»).
Чтобы обработать этот случай, вы можете обернуть конкатенацию и вторую функцию ТЕКСТ внутри ЕСЛИ следующим образом:
= ТЕКСТ(дата1; «ммм д») & ЕСЛИ(дата2 «»; «-» &ТЕКСТ(дата2; «ммм д»); «»)
Это создает полный диапазон дат, когда обе даты присутствуют, но выводит только дату начала, когда дата окончания отсутствует.
Отсутствует дата начала
Для обработки случая, когда обе даты отсутствуют, вы можете вложить еще один ЕСЛИ следующим образом:
= ЕСЛИ(дата1 «»; ТЕКСТ(дата1; «мммм д») & ЕСЛИ(дата2 «»; «-» & ТЕКСТ(дата2; «ммм д»); «»); «»)
Эта формула просто возвращает пустую строку («»), когда дата1 недоступна.
Создание списка последовательных дат
Вы можете быстро создать список дат в последовательном порядке с помощью маркера заполнения или команды Заполнить.
Использование маркера заполнения
-
Выделите ячейку, содержащую первую дату. Перетащите маркер заполнения по смежным ячейкам, которые нужно заполнить последовательными датами.
-
Щелкните в нижнем правом углу ячейки маркер заполнения
и, удерживая, перетащите его, чтобы заполнить остальные ячейки в ряду. Маркер заполнения можно перетаскивать вверх, вниз и по горизонтали в пределах листа.
-
Использование команды «Заполнить»
-
Выделите ячейку с первой датой. Затем выделите диапазон ячеек, которые нужно заполнить.
-
Выберите Заполнить > Прогрессия > Единицы. Выберите нужную единицу.
Совет: Даты можно сортировать так же, как любые другие данные. По умолчанию даты сортируются от самой ранней до самой поздней.
Дополнительные сведения
Вы всегда можете задать вопрос специалисту Excel Tech Community или попросить помощи в сообществе Answers community.
См. также
Автоматическое заполнение ячеек листа данными
Использование функций автозаполнения и мгновенного заполнения
Нужна дополнительная помощь?
Хитрости »
18 Октябрь 2021 6840 просмотров
Создать список дат(месяцев, кварталов, лет) на основании даты начала и окончания периода
Скачать файл, используемый в видеоуроке:
Список дат при помощи Power Query.xlsx (72,7 KiB, 405 скачиваний)
Представим ситуацию, что у нас есть таблица следующего вида:
В ней перечислены клиенты, которые подписались на наш продукт(условно клиент А и клиент В). В качестве дат указаны дата начала подписки и дата окончания. И нам необходимо построить что-то вроде диаграммы Ганта, на которой будет видно в хронологическом порядке активность клиентов
Т.е. по сути нам нужно создать даты из двух таким образом, чтобы на каждый день подписки была одна дата. Например, для клиента «А» с подпиской на журнал «За рулем» у нас должно получиться 115 строк дат, т.к. подписка длилась 115 дней(от 05.10.2020 до 27.01.2021). Проблема в том, что встроенных средств создания списка дат между двумя заданными датами в Power Query нет. Поэтому придется что-то изобретать.
Загружаем данные нашей таблицы в редактор Power Query: выделяем таблицу -вкладка Данные(Data)(или Power Query) —Получить и преобразовать данные(Get & Transform Data) —Из таблицы(From Table/Range).
После того как загрузили таблицу в Power Query следует убедиться, что тип данных в столбцах «Дата подписки» и «Дата отказа» именно дата, а не дата и время или тем более не тип любой или текст. Для этого на каждом столбце щелкаем левой кнопкой мыши по значку слева от заголовка и выбираем «Дата»
(Date)
Или выделяем сразу оба столбца с датами -вкладка Главная(Home) -группа Преобразование(Transform) -раскрываем список Тип данных(Data type) и выбираем Дата(Data).
Далее, чтобы получить список дат для каждого клиента от одной даты до другой, необходимо использоваться функцию List. Идем на вкладку Добавление столбца(Add Column) —Настраиваемый столбец(Custom column). В качестве имени запишем «Даты», а в качестве формулы следующее:
List.Dates([Дата подписки], Duration.Days(Duration.From([Дата отказа]-[Дата подписки])) +1, #duration(1, 0, 0, 0))
Подробнее про создание вычисляемых столбцов и просмотр функций в PowerQuery можно ознакомиться в этой статье: Вычисления в PowerQuery
List.Dates – функция языка M, которая берет начальную дату и прибавляет к ней указанное кол-во дней, и все это выводит в виде списка(тип List). Для определения кол-ва дней мы используем обычное вычитание дат([Дата отказа]-[Дата продажи]), преобразуя при этом полученную разность в тип Длительность при помощи функции Duration.From, а далее в количество дней при помощи Duration.Days. Если этого не сделать, то можем получить ошибку несовпадения типов. После этого задаем шаг в днях, который нужно использовать для создания списка — #duration(1, 0, 0, 0). #duration(кол-во дней, кол-во часов, кол-во минут, кол-во секунд)
Будет добавлен новый столбец, в котором для каждого товара каждого клиента будет создан список дат использования продукта. Остается лишь щелкнуть левой кнопкой мыши на значке разнонаправленных стрелок в заголовке созданного столбца и выбрать Развернуть в новые строки(Expand to New Rows):
Полученный столбец со всеми датами преобразуем в тип Дата(вкладка Главная(Home) -группа Преобразование(Transform) -раскрываем список Тип данных(Data type) и выбираем Дата(Data).
Если в дальнейшем мы планируем работать с результатом запроса в Excel через выгрузку в сводную таблицу(Главная(Home) —Закрыть и загрузить(Close & Load) —Отчет сводной таблицы(Pivot table report)), то на этом шаге можно сохранить и загрузить запрос и уже в сводной таблице просто поместить созданный столбец «Даты» в область Столбцов.
Но если мы хотим развернуть эти даты в столбцы непосредственно через PowerQuery, то для начала необходимо отсортировать столбец с датами по возрастанию: жмем на значок стрелки в правом верхнем углу столбца и из раскрывающегося списка выбираем Сортировка по возрастанию(Sort Ascending):
После чего используем столбец сведения: выделяем созданный столбец дат -вкладка Преобразование(Transform) —Столбец сведения(Pivot Column). В качестве Столбца значений(Values column) указываем столбец Дата подписки. Нажимаем кнопку Расширенные параметры(Advanced options) и в качестве Функции агрегированного значения(Aggregate Value Function) указываем Количество(все)(Count (All))
После этого можно удалить лишние столбцы (например, столбец «Дата отказа») и останется выгрузить данные на лист: Главная(Home) —Закрыть и загрузить(Close & Load) —Таблица(Table). Созданная таблица выгрузится на лист.
В загруженном листе нам останется сделать форматирование, чтобы отметить только те ячейки, в которых у клиентов были активные подписки. Выделяем ячейки со значениями 0 и 1(те, что под датами) —Главная(Home) —Условное форматирование(Conditional formatting) —Правила выделения ячеек(Highlight Cells Rules) —Равно(Equal To). Вписываем значение 1 и выбираем формат(если предустановленные форматы не подходят, то в раскрывающемся списке выбираем «Пользовательский формат»).
А чтобы нам единички и нули не портили картину, мы опять выделим все ячейки с нулями и единичками -Правая кнопка мыши —Формат ячеек(Format cells) -вкладка Число(Number). Идем в самый низ –(все форматы)(Custom). Выставляем в поле тип такой формат: ;;;
Теперь нули и единички видны не будут, а формат будет работать. В итоге добьемся нужного результата.
Но что делать, когда надо отследить подписку не по дням, а по месяцам? Самый большой тип длительности, который поддерживает функция duration – это дни. Поэтому придется хитрить. Здесь функция
List.Dates
нам уже не поможет, т.к. построена именно на возможностях функции duration. Но мы можем использовать более гибкую функцию:
List.Generate
. Она способна создавать практически любые списки.
Добавляем новый столбец(вкладка Добавление столбца(Add Column) —Настраиваемый столбец(Custom column)). В качестве формулы запишем:
let start = [Дата продажи], end = [Дата отказа] in List.Generate( ()=>[day=start], each [day]<=end, each [day=Date.AddMonths([day], 1)], each [day] )
А дальше все так же: щелкнуть левой кнопкой мыши на значке разнонаправленных стрелок —Развернуть в новые строки(Expand to New Rows). И при необходимости все это «перевернуть» в столбцы(алгоритм точно такой же, как описан выше для списка дат).
Чуть подробнее про то, что мы записали в нашем созданном столбце:
Let – здесь мы задаем дату начала и окончания для каждой строки списка. Можно сказать просто запоминаем их для дальнейшего использования.
List.Generate – специальная функция, которой мы задаем начальное значение даты ( ()=>[day=start],); далее указываем условие по которому необходимо завершить цикл(each [day]<=end ) – т.е. на какой дате закончить создавать список; после этого указываем что именно делать внутри каждого шага цикла(each [day=Date.AddMonths([day], 1)]) – добавить один месяц и указываем, что проделывать это надо для каждого нового значения(each [day]).
Т.е. функция берет дату начала как точку отсчета([day=start]), прибавляет к ней указанный интервал(Date.AddMonths([day], 1)]) и так до тех пор, пока новая дата не станет меньше или равна конечной([day]<=end). И на каждом шаге новая дата добавляется в итоговый список.
На самом деле, для того, чтобы это использовать не надо особо вдумываться в процесс. Копи-паст никто не отменял 😊 Самое главное, на что здесь стоит обратить внимание, это функция Date.AddMonths. Она при каждом шаге цикла прибавляет к переменному значению day(которое начинается у нас с Даты продажи) по одному месяцу. Если нужен другой период(дни, недели, годы), то нужно просто подставить вместо AddMonths другую функцию. Вот возможные варианты:
- Date.AddDays – добавляет дни
- Date.AddWeeks – добавляет недели
- Date.AddMonths – добавляет месяцы(что мы и делали)
- Date.AddQuarters – добавляет кварталы
- Date.AddYears – добавляет годы
ВАЖНО: Что надо помнить, если используем создание списка не под дням, а, например, по месяцам. Даты для месяцев у нас могут быть разные (например, в примере выше дата начала для клиента «А» 10.09.2020, а дата окончания — 07.02.2021). Это может привести к тому, что в каких-то строках могут пропасть последние месяцы. Решается это довольно просто: сразу после того, как загрузили данные и изменили тип столбцов на тип Дата(второй шаг запроса — перед добавлением пользовательского столбца), необходимо щелкнуть правой кнопкой мыши по столбцу дат -выбрать пункт Преобразование(Transform) —Месяц(Month) —Начало месяца(Start of Month). Это заставит нашу функцию вычислять интервалы по месяцам корректно. Точно такой же алгоритм и для других периодов: лет, недель, кварталов.
Скачать файл:
Список дат при помощи Power Query.xlsx (72,7 KiB, 405 скачиваний)
Так же см.:
Получить данные из файлов XML при помощи Power Query
Как перейти к определенной строке таблицы в Power Query
Относительный путь к данным PowerQuery
Курс валют при помощи Power Query
Статья помогла? Поделись ссылкой с друзьями!
Видеоуроки
Поиск по меткам
Access
apple watch
Multex
Power Query и Power BI
VBA управление кодами
Бесплатные надстройки
Дата и время
Записки
ИП
Надстройки
Печать
Политика Конфиденциальности
Почта
Программы
Работа с приложениями
Разработка приложений
Росстат
Тренинги и вебинары
Финансовые
Форматирование
Функции Excel
акции MulTEx
ссылки
статистика
Видео
Как обычно, кому надо быстро — смотрим видео. Подробности и нюансы — в тексте ниже:
Как вводить даты и время в Excel
Если иметь ввиду российские региональные настройки, то Excel позволяет вводить дату очень разными способами — и понимает их все:
«Классическая» форма |
3.10.2006 |
Сокращенная форма |
3.10.06 |
С использованием дефисов |
3-10-6 |
С использованием дроби |
3/10/6 |
Внешний вид (отображение) даты в ячейке может быть очень разным (с годом или без, месяц числом или словом и т.д.) и задается через контекстное меню — правой кнопкой мыши по ячейке и далее Формат ячеек (Format Cells):
Время вводится в ячейки с использованием двоеточия. Например
16:45
По желанию можно дополнительно уточнить количество секунд — вводя их также через двоеточие:
16:45:30
И, наконец, никто не запрещает указывать дату и время сразу вместе через пробел, то есть
27.10.2012 16:45
Быстрый ввод дат и времени
Для ввода сегодняшней даты в текущую ячейку можно воспользоваться сочетанием клавиш Ctrl + Ж (или CTRL+SHIFT+4 если у вас другой системный язык по умолчанию).
Если скопировать ячейку с датой (протянуть за правый нижний угол ячейки), удерживая правую кнопку мыши, то можно выбрать — как именно копировать выделенную дату:
Если Вам часто приходится вводить различные даты в ячейки листа, то гораздо удобнее это делать с помощью всплывающего календаря:
Если нужно, чтобы в ячейке всегда была актуальная сегодняшняя дата — лучше воспользоваться функцией СЕГОДНЯ (TODAY):
Как Excel на самом деле хранит и обрабатывает даты и время
Если выделить ячейку с датой и установить для нее Общий формат (правой кнопкой по ячейке Формат ячеек — вкладка Число — Общий), то можно увидеть интересную картинку:
То есть, с точки зрения Excel, 27.10.2012 15:42 = 41209,65417
На самом деле любую дату Excel хранит и обрабатывает именно так — как число с целой и дробной частью. Целая часть числа (41209) — это количество дней, прошедших с 1 января 1900 года (взято за точку отсчета) до текущей даты. А дробная часть (0,65417), соответственно, доля от суток (1сутки = 1,0)
Из всех этих фактов следуют два чисто практических вывода:
- Во-первых, Excel не умеет работать (без дополнительных настроек) с датами ранее 1 января 1900 года. Но это мы переживем!
- Во-вторых, с датами и временем в Excel возможно выполнять любые математические операции. Именно потому, что на самом деле они — числа! А вот это уже раскрывает перед пользователем массу возможностей.
Количество дней между двумя датами
Считается простым вычитанием — из конечной даты вычитаем начальную и переводим результат в Общий (General) числовой формат, чтобы показать разницу в днях:
Количество рабочих дней между двумя датами
Здесь ситуация чуть сложнее. Необходимо не учитывать субботы с воскресеньями и праздники. Для такого расчета лучше воспользоваться функцией ЧИСТРАБДНИ (NETWORKDAYS) из категории Дата и время. В качестве аргументов этой функции необходимо указать начальную и конечную даты и ячейки с датами выходных (государственных праздников, больничных дней, отпусков, отгулов и т.д.):
Примечание: Эта функция появилась в стандартном наборе функций Excel начиная с 2007 версии. В более древних версиях сначала необходимо подключить надстройку Пакета анализа. Для этого идем в меню Сервис — Надстройки (Tools — Add-Ins) и ставим галочку напротив Пакет анализа (Analisys Toolpak). После этого в Мастере функций в категории Дата и время появится необходимая нам функция ЧИСТРАБДНИ (NETWORKDAYS).
Количество полных лет, месяцев и дней между датами. Возраст в годах. Стаж.
Про то, как это правильно вычислять, лучше почитать тут.
Сдвиг даты на заданное количество дней
Поскольку одни сутки в системе отсчета даты Excel принимаются за единицу (см.выше), то для вычисления даты, отстоящей от заданной на, допустим, 20 дней, достаточно прибавить к дате это число.
Сдвиг даты на заданное количество рабочих дней
Эту операцию осуществляет функция РАБДЕНЬ (WORKDAY). Она позволяет вычислить дату, отстоящую вперед или назад относительно начальной даты на нужное количество рабочих дней (с учетом выходных суббот и воскресений и государственных праздинков). Использование этой функции полностью аналогично применению функции ЧИСТРАБДНИ (NETWORKDAYS) описанной выше.
Вычисление дня недели
Вас не в понедельник родили? Нет? Уверены? Можно легко проверить при помощи функции ДЕНЬНЕД (WEEKDAY) из категории Дата и время.
Первый аргумент этой функции — ячейка с датой, второй — тип отсчета дней недели (самый удобный — 2).
Вычисление временных интервалов
Поскольку время в Excel, как было сказано выше, такое же число, как дата, но только дробная его часть, то с временем также возможны любые математические операции, как и с датой — сложение, вычитание и т.д.
Нюанс здесь только один. Если при сложении нескольких временных интервалов сумма получилась больше 24 часов, то Excel обнулит ее и начнет суммировать опять с нуля. Чтобы этого не происходило, нужно применить к итоговой ячейке формат 37:30:55:
Ссылки по теме
- Как вычислять возраст (стаж) в полных годах-месяцах-днях
- Как сделать выпадающий календарь для быстрого ввода любой даты в любую ячейку.
- Автоматическое добавление текущей даты в ячейку при вводе данных.
- Как вычислить дату второго воскресенья февраля 2007 года и т.п.
В некоторых случаях, если у вас есть конкретная дата начала и дата окончания, вам может потребоваться перечислить все даты между этими двумя заданными датами в Excel. Теперь в этом руководстве рассказывается о методах перечисления всех дат между двумя датами в Excel.
Список всех дат между двумя датами по формулам
Перечислить все даты между двумя датами по VBA
Перечислите все даты между двумя датами по Kutools for Excel
Здесь я представляю формулы, которые могут быстро перечислить все даты между двумя заданными датами для вас в Excel.
1. Введите даты начала и окончания в две ячейки, здесь я ввожу их в ячейки A1 и A2. Смотрите скриншот:
2. Затем перейдите в ячейку C1 и введите эту формулу. = A1 + 1 в него, затем нажмите Enter ключ. Смотрите скриншот:
3. Затем в ячейке C2 введите эту формулу =IF($A$1+ROW(A1)>=$A$2-1,»»,C1+1) в него, затем перетащите дескриптор автозаполнения вниз к ячейкам, пока не появится пустая ячейка. Смотрите скриншоты:
Затем вы можете увидеть, что все даты между двумя заданными датами перечислены в столбце.
Примечание:
В приведенных выше формулах A1 — это дата начала, A2 — дата окончания, а C1 — первая дата в диапазоне дат.
Если вас интересует код макроса, вы можете использовать приведенный ниже VBA, чтобы перечислить все даты между двумя заданными датами в Excel.
1. Введите дату начала и дату окончания в две ячейки, здесь я ввожу ячейки A1 и B1. Смотрите скриншот:
2. Нажмите Alt + F11 ключи для открытия Microsoft Visual Basic для приложений окно.
3. Затем нажмите Вставить > Модули и скопируйте и вставьте ниже кода VBA во всплывающий Модули окно.
VBA: перечислить все даты между двумя датами.
Sub WriteDates()
'Updateby20150305
Dim rng As Range
Dim StartRng As Range
Dim EndRng As Range
Dim OutRng As Range
Dim StartValue As Variant
Dim EndValue As Variant
xTitleId = "KutoolsforExcel"
Set StartRng = Application.Selection
Set StartRng = Application.InputBox("Start Range (single cell):", xTitleId, StartRng.Address, Type: = 8)
Set EndRng = Application.InputBox("End Range (single cell):", xTitleId, Type: = 8)
Set OutRng = Application.InputBox("Out put to (single cell):", xTitleId, Type: = 8)
Set OutRng = OutRng.Range("A1")
StartValue = StartRng.Range("A1").Value
EndValue = EndRng.Range("A1").Value
If EndValue - StartValue <= 0 Then
Exit Sub
End If
ColIndex = 0
For i = StartValue To EndValue
OutRng.Offset(ColIndex, 0) = i
ColIndex = ColIndex + 1
Next
End Sub
4. Нажмите Run or F5 для запуска VBA, и появится диалоговое окно, в котором вы можете выбрать дату начала, затем нажмите OK, затем выберите дату окончания во втором диалоговом окне. Смотрите скриншот:
5. Нажмите OK, затем выберите ячейку для отображения дат и нажмите OK. Теперь вы можете видеть, что перечислены все даты между двумя датами. Смотрите скриншоты:
Внимание: Список, созданный этим VBA, включает дату начала и дату окончания.
Собственно, если вы установили Kutools for Excel — удобный инструмент для добавления, вы также можете использовать Вставить случайные данные Для решения этой проблемы.
После бесплатная установка Kutools for Excel, пожалуйста, сделайте следующее:
1. Выберите столбец, в котором должны быть указаны даты между двумя датами, и щелкните Кутулс > Вставить > Вставить случайные данные. Смотрите скриншот:
2. Затем в Вставить случайные данные диалоговое окно, нажмите Время вкладка, затем выберите начальную и конечную даты из от и To список, затем не забудьте проверить Рабочий день, Выходные и Уникальные ценности флажки. Смотрите скриншот:
3. Нажмите Ok чтобы закрыть диалог, а другой Kutools for Excel появляется диалоговое окно, просто нажмите Да. Затем вы можете увидеть даты между датой начала и датой окончания. Смотрите скриншоты:
4. Теперь вам нужно отсортировать список дат в нужном вам порядке. Нажмите Данные > Сортировать от старых к новым. Затем вы можете увидеть, что даты отсортированы от самой старой к самой новой. Смотрите скриншоты:
Работы С Нами Вставить случайные данные утилита, вы также можете вставить случайное целое число, случайную строку и случайное время и т. д. Щелкните здесь, чтобы узнать больше о вставке случайных данных.
Относительные статьи:
- Создать динамический список имен рабочих листов
Лучшие инструменты для работы в офисе
Kutools for Excel Решит большинство ваших проблем и повысит вашу производительность на 80%
- Снова использовать: Быстро вставить сложные формулы, диаграммы и все, что вы использовали раньше; Зашифровать ячейки с паролем; Создать список рассылки и отправлять электронные письма …
- Бар Супер Формулы (легко редактировать несколько строк текста и формул); Макет для чтения (легко читать и редактировать большое количество ячеек); Вставить в отфильтрованный диапазон…
- Объединить ячейки / строки / столбцы без потери данных; Разделить содержимое ячеек; Объединить повторяющиеся строки / столбцы… Предотвращение дублирования ячеек; Сравнить диапазоны…
- Выберите Дубликат или Уникальный Ряды; Выбрать пустые строки (все ячейки пустые); Супер находка и нечеткая находка во многих рабочих тетрадях; Случайный выбор …
- Точная копия Несколько ячеек без изменения ссылки на формулу; Автоматическое создание ссылок на несколько листов; Вставить пули, Флажки и многое другое …
- Извлечь текст, Добавить текст, Удалить по позиции, Удалить пробел; Создание и печать промежуточных итогов по страницам; Преобразование содержимого ячеек в комментарии…
- Суперфильтр (сохранять и применять схемы фильтров к другим листам); Расширенная сортировка по месяцам / неделям / дням, периодичности и др .; Специальный фильтр жирным, курсивом …
- Комбинируйте книги и рабочие листы; Объединить таблицы на основе ключевых столбцов; Разделить данные на несколько листов; Пакетное преобразование xls, xlsx и PDF…
- Более 300 мощных функций. Поддерживает Office/Excel 2007-2021 и 365. Поддерживает все языки. Простое развертывание на вашем предприятии или в организации. Полнофункциональная 30-дневная бесплатная пробная версия. 60-дневная гарантия возврата денег.
Вкладка Office: интерфейс с вкладками в Office и упрощение работы
- Включение редактирования и чтения с вкладками в Word, Excel, PowerPoint, Издатель, доступ, Visio и проект.
- Открывайте и создавайте несколько документов на новых вкладках одного окна, а не в новых окнах.
- Повышает вашу продуктивность на 50% и сокращает количество щелчков мышью на сотни каждый день!