На чтение 7 мин. Просмотров 36.4k.
Итог: узнаете, как изменить форматирование даты для сгруппированного поля в сводной таблице.
Уровень мастерства: Средний
Изменение формата для дат не работает
Когда мы группируем поле «Дата» в сводной таблице с помощью функции «Группировать», форматирование чисел для поля «День» фиксируется. Он имеет следующий формат «день-месяц» или «d-ммм».
Если мы попытаемся изменить числовой формат поля День/Дата, это не сработает. Ничего не меняется, когда мы заходим в Настройки поля> Числовой формат и меняем числовой формат на пользовательский или формат даты.
Почему?
Форматирование чисел не работает, потому что элемент сводки
— это фактически текст, а НЕ дата.
Когда мы группируем поля, функция группирования создает
элемент Дни для каждого дня одного года. Он сохраняет название месяца в именах
полей Day, и фактически это группа номеров дней (1-31) для каждого месяца.
На самом деле можно увидеть этот список текстовых элементов в файле pivotCacheDefinition.xml. Чтобы увидеть, что вы можете изменить расширение файла Excel на .zip и перейти к папке PivotCache.
Поскольку это текстовые элементы, представляющие дни года,
мы не сможем изменить форматирование ячеек непосредственно в Excel. Однако есть
несколько обходных путей.
Решение № 1 — Не используйте группы дат
Первым решением является создание полей (столбцов) в диапазоне исходных данных с различными группами по году, кварталу, месяцу, дням и т.д
Я подробно объясняю это в своей статье «Группировка дат в сводной таблице». Источник данных.
Использование собственных полей из исходных данных для
разных групп дат даст вам контроль над форматированием чисел поля в сводной
таблице.
Вы также
можете создать таблицу календаря с
группировками, если вы используете Power Pivot.
Автоматическая группировка полей даты
Если вы используете Excel 2016 (Office 365), то поле даты
автоматически группируется при добавлении его в сводную таблицу.
Разгруппировать поле даты:
- Выберите ячейку внутри сводной таблицы в одном
из полей даты. - Нажмите кнопку «Разгруппировать» на вкладке
«Анализ» ленты.
Автоматическая группировка является настройкой по умолчанию, которую можно изменить. См. мою статью «Даты группирования в сводной таблице». Даты группирования VERSUS приведены в исходных данных, чтобы узнать больше.
Как только поле даты будет разгруппировано, вы можете изменить форматирование поля.
Чтобы изменить форматирование чисел в несгруппированном поле
Дата:
- Щелкните правой кнопкой мыши ячейку в поле даты
сводной таблицы. - Выберите настройки поля …
- Нажмите кнопку «Числовой формат».
- Измените форматирование даты в окне «Формат
ячеек». - Нажмите ОК и ОК.
Опять же, это работает только для полей, которые НЕ
сгруппированы. Если вы снова сгруппируете поле после изменения форматирования,
форматирование элементов в поле «Дни» изменится на «1 января».
Решение №2. Изменение имен элементов сводки с помощью VBA
Если вы действительно хотите использовать функцию Group Field, то мы можем использовать макрос для изменения имен элементов сводки. Создается впечатление, что изменилось форматирование даты, но на самом деле меняется текст в каждом названии элемента сводки.
Следующий макрос перебирает все сводные элементы сгруппированного поля «Дни» и изменяет форматирование чисел на пользовательский формат. По умолчанию я установил «m/d», но вы можете изменить его на любой формат даты для месяца и дня. Просто помните, что элемент НЕ будет содержать год, так как элемент не является фактической датой.
Скачать файл
Загрузите
файл Excel, который содержит макрос.
Pivot Table Date Field Group Number Formatting Macro.xlsm (54.2 KB)
Макрос форматирования поля «Дни»
Sub Change_Days_Field_Formatting() ' Измените форматирование чисел в поле Дни ' для поля даты сгруппированной сводной таблицы. Dim pt As PivotTable Dim pi As PivotItem ' ВАЖНО: Измените следующее имя ' Сгруппированное поле Дни. Обычно это дни или название ' вашего поля даты. Const sDaysField As String = "Days" ' Установить ссылку на первую сводную таблицу на листе ' Это может быть изменено для ссылки на имя сводной таблицы 'Set pt = ActiveSheet.PivotTables("PivotTable1") Set pt = ActiveSheet.PivotTables(1) ' Установите имена обратно к их имени источника по умолчанию For Each pi In pt.PivotFields(sDaysField).PivotItems ' Обходит первый и последний пункты "<01.01.2015" ... If Left(pi.Name, 1) <> "<" And Left(pi.Name, 1) <> ">" Then pi.Name = pi.SourceName End If Next pi ' Установите имена в произвольном формате чисел For Each pi In pt.PivotFields(sDaysField).PivotItems If Left(pi.Name, 1) <> "<" And Left(pi.Name, 1) <> ">" Then ' Измените приведенный ниже формат «m / d» на пользовательский числовой формат. ' 2020 год используется для високосного года. pi.Name = Format(DateValue(pi.SourceName & "-2020"), "m/d") End If Next pi End Sub
Как работает макрос
Макрос сначала зацикливает элементы сводки в поле Дни, чтобы
восстановить имя элемента сводки в его исходное имя по умолчанию. Два разных
элемента не могут иметь одинаковое имя. Так что это должно предотвратить любые
ошибки при изменении или попытке разных форматов.
Второй цикл меняет каждый элемент сводки на новый формат. Он
использует функцию DateValue для изменения названия элемента сводки «1-Jan» на
дату. Затем он использует функцию «Формат», чтобы изменить форматирование даты
на текст. По умолчанию используется формат «m / d». Это может быть изменено на
другой формат с месяцем и днем. Каждый элемент должен быть уникальным, поэтому
вы можете использовать месяц и день в названии элемента.
Возможно, вы могли бы разделить этот макрос на два макроса и
запускать только первый цикл сброса по мере необходимости. Макрос занимает
около 15 секунд для запуска на моем компьютере из-за всех циклов. Но это не
тот, который вам придется часто бегать.
Также важно упомянуть, что это выполняется на элементах
сводки, а не на сводном кеше. Таким образом, только что названные элементы
будут изменены только в сводной таблице, на которой вы запускаете макрос.
Макрос форматирования сгруппированных элементов
Был задан большой вопрос в комментариях об изменении форматирования для сгруппированных чисел. Это та же проблема, что и для групп дат. Имена групп — это текст, а не цифры. Тем не менее, мы можем использовать макрос, чтобы изменить их.
Вот код макроса. Вам просто нужно изменить значение
константы sGroupField вверху на имя вашего сгруппированного поля. При
необходимости вы также можете изменить формат чисел в sNumberFormat.
Sub Change_Grouped_Field_Number_Formatting() ' Изменить форматирование номера поля сгруппированных номеров Dim pt As PivotTable Dim pi As PivotItem Dim sGroup() As String Dim sGroupName As String ' ВАЖНО: Измените следующее имя ' поле сгруппированного номера в области строк или столбцов. Const sGroupedField As String = "Quantity" Const sNumberFormat As String = "$#,###" ' Установить ссылку на первую сводную таблицу на листе ' Это может быть изменено для ссылки на имя сводной таблицы 'Set pt = ActiveSheet.PivotTables("PivotTable1") Set pt = ActiveSheet.PivotTables(1) ' Установите имена обратно к их имени источника по умолчанию For Each pi In pt.PivotFields(sGroupedField).PivotItems ' Обходит первый и последний пункты "<01.01.2015" ... If Left(pi.Name, 1) <> "<" And Left(pi.Name, 1) <> ">" Then pi.Name = pi.SourceName End If Next pi ' Установите имена в произвольном формате чисел For Each pi In pt.PivotFields(sGroupedField).PivotItems If Left(pi.Name, 1) = "<" Or Left(pi.Name, 1) = ">" Then sGroupName = "<" & Format(Mid(pi.Name, 2, Len(pi.Name)), sNumberFormat) Else sGroup = Split(pi.Name, "-") sGroupName = Format(sGroup(0), sNumberFormat) & " - " & Format(sGroup(1), sNumberFormat) End If If sGroupName <> "" Then pi.Name = sGroupName Next pi End Sub
Окончательный вердикт
Я надеюсь, что информация была полезной. Я бы предложил использовать решение № 1, если вы не хотите использовать функцию группы.
Пожалуйста, оставьте комментарий ниже с любыми вопросами или
предложениями о том, как мы можем улучшить это. Спасибо! 🙂
alvevo Пользователь Сообщений: 18 |
Поискал по форуму, но ответа не нашел. Проблема следующая: Изменено: alvevo — 15.05.2013 20:26:46 |
Z Пользователь Сообщений: 6111 Win 10, MSO 2013 SP1 |
#2 15.05.2013 12:49:15
Сделайте, как вариант, в данных дубль поля с датами — по одному группировка, по второму — нет… «Ctrl+S» — достойное завершение ваших гениальных мыслей!.. |
||
alvevo Пользователь Сообщений: 18 |
Это как-то не комильфо. Да и в сводной в итоге глупость получится — две колонки с датами в разных форматах. Хотелось бы более элегантного решения. Изменено: alvevo — 15.05.2013 20:27:26 |
При группировке по датам изменить формат отображения невозможно. |
|
alvevo Пользователь Сообщений: 18 |
|
CfifNfyz Пользователь Сообщений: 4 |
#6 20.12.2016 11:13:37
Здравствуйте! Изменено: CfifNfyz — 20.12.2016 11:14:14 |
||
Андрей VG Пользователь Сообщений: 11878 Excel 2016, 365 |
#7 20.12.2016 12:02:09 Доброе время суток.
Что значит формат даты в итоговой строке? А в общем, решение простое, создать в таблице столбец(ы) с требумым форматом даты для последующей группировки. Возможно, при этом потребуется создать список(и) для указания правильной сортировки в сводной (подобно списку названий месяцев). |
||
CfifNfyz Пользователь Сообщений: 4 |
Проблема в следующем: изначально был формат даты типа 01.01.2015. Соответственно итоги выглядели как «01.01.2015 итого» В одной таблице эти форматы можно исправить через «параметры поля», где есть кнопка «числовой формат», а в другой таблице в «параметры поля» нет кнопки «числовой формат». Не могу понять разницы, все остальные параметры поля идентичны. |
Андрей VG Пользователь Сообщений: 11878 Excel 2016, 365 |
#9 20.12.2016 12:30:01
Можете продемострировать в файле-примере? |
||
CfifNfyz Пользователь Сообщений: 4 |
Файл Excel с примером загрузить не могу, ругается на объем больше 100 кб, хотя уменьшала как могла. Проблему удалось решить только созданием новой таблицы, старую так и не удалось побороть. Прикрепленные файлы
|
karinana Пользователь Сообщений: 1 |
Правой кнопкой по столбцу сводной таблицы — Ungroup. |
guard1988 Пользователь Сообщений: 2 |
karinana, Вы — гений, спасибо! |
Янек Пользователь Сообщений: 1 |
karinana, спасибо большое!!! |
freddemo Пользователь Сообщений: 6 |
|
RoboFish Пользователь Сообщений: 12 |
karinana, спасибо большое! |
Добрый день. |
|
abc4987 Пользователь Сообщений: 2 |
#18 13.03.2022 13:52:42
Параметры поля > Числовой формат > Формат ячеек https://disk.yandex.ru/d/VKD-SMj54baYjg Изменено: abc4987 — 13.03.2022 13:57:21 |
||
mitox Пользователь Сообщений: 298 |
karinana, спасибо большое |
dend88 Пользователь Сообщений: 12 |
#20 24.03.2023 16:04:17 karinana
, Вы — золотце, Дай бог вам здоровья! |
0 / 0 / 0 Регистрация: 29.09.2015 Сообщений: 6 |
|
1 |
|
Сводная таблица не понимает формат даты29.09.2015, 17:11. Показов 55120. Ответов 18
Всем привет! Уже не первый раз сталкиваюсь со следующим: при выгрузке из базы данных 35 тысяч строк, с данными по дням дата получается в формате д/м/г. Но проблема в том, что когда начинаю составлять сводную таблицу, то она не понимает что это формат дат. Как можно исправить формат даты чтобы сводная таблица ее увидела?
0 |
Programming Эксперт 94731 / 64177 / 26122 Регистрация: 12.04.2006 Сообщений: 116,782 |
29.09.2015, 17:11 |
Ответы с готовыми решениями: Сводная таблица. Группировка даты по году Сводная таблица Сводная таблица Надо отразить информацию… Сводная таблица Уважаемые форумчане, помогите пожалуйста. Есть таблица с курсом валюты по годам…. 18 |
2640 / 1697 / 694 Регистрация: 04.09.2015 Сообщений: 3,367 |
|
29.09.2015, 17:16 |
2 |
Сообщение было отмечено Fedor_MSK как решение Решение Попробуйте выделить столбцы с датами д/м/г.
1 |
0 / 0 / 0 Регистрация: 29.09.2015 Сообщений: 6 |
|
29.09.2015, 17:18 [ТС] |
3 |
Простите, не верно написал. формат, например,01.10.2014.
0 |
2640 / 1697 / 694 Регистрация: 04.09.2015 Сообщений: 3,367 |
|
29.09.2015, 17:25 |
4 |
Сообщение было отмечено Fedor_MSK как решение Решение скопировать любую пустую ячейку.
1 |
2633 / 1333 / 255 Регистрация: 25.10.2010 Сообщений: 2,194 |
|
29.09.2015, 17:25 |
5 |
Сообщение было отмечено Fedor_MSK как решение РешениеРецепт тот же, только заменить . (точку) на . (точку)
1 |
0 / 0 / 0 Регистрация: 29.09.2015 Сообщений: 6 |
|
29.09.2015, 17:33 [ТС] |
6 |
AlexM, Pelena, спасибо!) Сработало! теперь можно группировать дату в сводной таблице
0 |
0 / 0 / 0 Регистрация: 08.12.2019 Сообщений: 6 |
|
08.12.2019, 11:59 |
7 |
Здравствйте. Не помогает (. Посмотрите плиз.
0 |
2633 / 1333 / 255 Регистрация: 25.10.2010 Сообщений: 2,194 |
|
08.12.2019, 12:20 |
8 |
Здравствуйте.
0 |
0 / 0 / 0 Регистрация: 08.12.2019 Сообщений: 6 |
|
08.12.2019, 19:34 |
9 |
В сводной таблице из этого файла , нет возможности сгруппировать даты в мес и года. Exel выдает ошибку. Пробовала в исходной менять точки на точки , заменять скопированной пустой ячейкой и еще несколько других способов которые нашла в интернете, но при новом формировании результат прежний, группа не формируется
0 |
2633 / 1333 / 255 Регистрация: 25.10.2010 Сообщений: 2,194 |
|
08.12.2019, 19:49 |
10 |
Ну не знаю, вот в Вашем файле заменила точку на точку, построила сводную, группировка работает
0 |
2633 / 1333 / 255 Регистрация: 25.10.2010 Сообщений: 2,194 |
|
08.12.2019, 19:50 |
11 |
Может, в реальном файле не все ячейки с датами заполнены?
0 |
0 / 0 / 0 Регистрация: 08.12.2019 Сообщений: 6 |
|
08.12.2019, 20:16 |
12 |
Это реальный файл без изменений. Я правильно понимаю . на . , без пробелов и еще чего либо ). Потом формат в дату менять надо ? Или сразу можно строить сводную? От версии exel может зависеть что то? Спасибо
0 |
2633 / 1333 / 255 Регистрация: 25.10.2010 Сообщений: 2,194 |
|
08.12.2019, 20:22 |
13 |
Без «ещё чего либо») Формат не меняла. Сразу сводную. А у Вас в системе даты с точками отображаются? А то может надо точку на / поменять?
0 |
0 / 0 / 0 Регистрация: 08.12.2019 Сообщений: 6 |
|
08.12.2019, 20:33 |
14 |
20.11.2017 так я вижу изначально 20 11 17 так отображается в файле который вы прислали обратно
0 |
2633 / 1333 / 255 Регистрация: 25.10.2010 Сообщений: 2,194 |
|
08.12.2019, 20:49 |
15 |
То есть, у Вас в качестве разделителя пробел? А попробуйте на последнем варианте сводную построить Добавлено через 13 минут
0 |
0 / 0 / 0 Регистрация: 08.12.2019 Сообщений: 6 |
|
08.12.2019, 22:19 |
16 |
И этот способ тоже работает и превращает текст в даты, но делаю сводную и снова всё тоже самое. Может, что то в параметрах файла изменить? Добавлено через 29 минут
0 |
2633 / 1333 / 255 Регистрация: 25.10.2010 Сообщений: 2,194 |
|
08.12.2019, 22:32 |
17 |
А проверьте диапазон-источник сводной. У Вас в исходной таблице есть строка итогов, она не должна захватываться, т.к. там дата пустая и поэтому группировка невозможна
0 |
0 / 0 / 0 Регистрация: 08.12.2019 Сообщений: 6 |
|
08.12.2019, 22:44 |
18 |
УРЯЯЯЯЯЯЯЯЯЯЯ!!!! Заработало!!!!!!!!!!!!!!! точку меняем на пробел , стоку итог за борт и вуаля, всё работает. ОГРОМЕННОЕ спасибо. С наступающим НГ
0 |
2633 / 1333 / 255 Регистрация: 25.10.2010 Сообщений: 2,194 |
|
08.12.2019, 22:48 |
19 |
0 |
IT_Exp Эксперт 87844 / 49110 / 22898 Регистрация: 17.06.2006 Сообщений: 92,604 |
08.12.2019, 22:48 |
Помогаю со студенческими работами здесь Сводная таблица Сводная таблица Сводная таблица Подскажите, пожалуйста. Можно ли в сводную таблицу вставить графу с… Сводная таблица Искать еще темы с ответами Или воспользуйтесь поиском по форуму: 19 |
17 авг. 2022 г.
читать 2 мин
Часто вам может понадобиться отсортировать строки в сводной таблице в Excel по дате.
К счастью, это легко сделать с помощью параметров сортировки в раскрывающемся меню в столбце « Ярлыки строк» сводной таблицы.
В следующем примере показано, как именно это сделать.
Пример: сортировка сводной таблицы по дате в Excel
Предположим, у нас есть следующий набор данных в Excel, который показывает количество продаж в разные даты:
Перед созданием сводной таблицы для этих данных щелкните одну из ячеек в столбце «Дата» и убедитесь, что Excel распознает ячейку как формат даты :
Затем мы можем выделить диапазон ячеек A1:B10 , затем щелкнуть вкладку « Вставка » на верхней ленте, затем щелкнуть « Сводная таблица» и вставить следующую сводную таблицу, чтобы суммировать общий объем продаж на каждую дату:
Поскольку Excel распознает формат даты, он автоматически сортирует сводную таблицу по дате от самой старой до самой новой даты.
Однако, если мы хотим отсортировать от самого нового к самому старому, мы можем щелкнуть стрелку раскрывающегося списка рядом с метками строк и нажать « Сортировать от нового к самому старому»:
Строки в сводной таблице будут автоматически отсортированы от самых новых к самым старым:
Чтобы выполнить сортировку от самой старой даты к самой новой, просто щелкните стрелку раскрывающегося списка рядом с Метками строк еще раз, а затем нажмите Сортировать от самой старой до самой новой .
Дополнительные ресурсы
В следующих руководствах объясняется, как выполнять другие распространенные операции в Excel:
Excel: как отфильтровать 10 лучших значений в сводной таблице
Excel: как сортировать сводную таблицу по общей сумме
Excel: как рассчитать разницу между двумя сводными таблицами
Написано
Замечательно! Вы успешно подписались.
Добро пожаловать обратно! Вы успешно вошли
Вы успешно подписались на кодкамп.
Срок действия вашей ссылки истек.
Ура! Проверьте свою электронную почту на наличие волшебной ссылки для входа.
Успех! Ваша платежная информация обновлена.
Ваша платежная информация не была обновлена.
I have a 2-column spreadsheet which contains Dates and Sales figures as follows:
When doing Right click -> Format Cells the values in the Dates column properly appear as Date (in the M/D/YYYY
format). This applies to all the Dates cells with the exception of the header (I checked with Ctrl+Shirt+Down).
However when I create a pivot table from the 2 columns, the Dates are recognized as text and are sorted accordingly (i.e. 1st sorted by month, then by day, then by year) which messes up my data:
I create pivot tables with this type of data on a regular basis and never had this issue before, and I really don’t see what’s wrong there.
How can I force the date values to be recognized as such when creating pivot tables?
PS: I have uploaded the pivot_table_date_porder_issue.xlsx
file which exhibits the problem for whoever wants to see it.
asked Feb 19, 2013 at 15:56
Your problem is that excel does not recognize your text strings of «mm/dd/yyyy» as date objects in it’s internal memory. Therefore when you create pivottable it doesn’t consider these strings to be dates.
You’ll need to first convert your dates to actual date values before creating the pivottable. This is a good resource for that: http://office.microsoft.com/en-us/excel-help/convert-dates-stored-as-text-to-dates-HP001162867.aspx
In your spreadsheet I created a second date column in B with the formula =DATEVALUE(A2)
. Creating a pivot table with this new date column and Count of Sales
then sorts correctly in the pivot table (option becomes Sort Oldest to Newest
instead of Sort A to Z
).
answered Feb 19, 2013 at 18:47
TimTim
35.4k11 gold badges95 silver badges121 bronze badges
1
April 20, 2017
I’ve read all the previously posted answers, and they require a lot of extra work. The quick and simple solution I have found is as follows:
1) Un-group the date field in the pivot table.
2) Go to the Pivot Field List UI.
3) Re-arrange your fields so that the Date field is listed FIRST in the ROWS section.
4) Under the Design menu, select Report Layout / Show in Tabular Form.
By default, Excel sorts by the first field in a pivot table. You may not want the Date field to be first, but it’s a compromise that will save you time and much work.
answered Apr 20, 2017 at 21:35
Ty N.Ty N.
611 silver badge1 bronze badge
If you want to use a column with 24/11/15 (for 24th November 2015) in your Pivot that will sort correctly, you can make sure it is properly formatted by doing the following —
highlight the column, go to Data – Text to Columns – click Next twice, then select “Date” and use the default of DMY (or select as applicable to your data) and click ok
When you pivot now you should see it sorting properly as we have properly formatted that column to be a date field so Excel can work with it
answered Nov 24, 2015 at 10:43
Go into options. You most likely have ‘Manual Sort» turned on. You need to go and change to radio button to «ascending > date». You can also right click the row/column, «more sorting options». It took me forever to find this solution…
answered Apr 16, 2018 at 14:33
The problem I had was that although the source data was correctly formatted as ‘date’ dd/mm/yyyy, the pivot table placed (for example) 22/05/2019 between 16/05/2019 and 17/05/2019. This data was visible in the pivot table, but in the wrong place. In addition, the Pivot chart refused to show that data for that date even though the ‘Date’ filter allowed it to be selected.
In my case, I had to:
-
From the Pivot Chart,open the ‘Date’ Filter menu.
-
select the ‘Sort Oldest to Newest’ option.
- Bingo! The Pivot chart now shows the missing date data.
Mikev
1,9921 gold badge15 silver badges26 bronze badges
answered May 23, 2019 at 9:23
SteveSteve
111 bronze badge
1
Try creating a new pivot table, and not just refreshing.
I had a case where I forgot to add in a few dates. After adding them in I updated the pivot table range and hit refresh. They appeared at the end of the pivot table, out of order. I then tried to simply create a new pivot table and the dates where all in order.
answered Feb 21, 2014 at 19:08
You need to select the entire column where you have the dates, so click the «text to columns» button, and select delimited > uncheck all the boxes and go until you click the button finish.
This will make the cell format and then the values will be readed as date.
Hope it will helped.
answered Apr 17, 2015 at 19:16
I saw this somewhere else. I am using 2016 Excel. What worked for me was to use YYYY Quarters (I was looking for quarterly data). So, I had the source data sorted as YYYY xQ. 2016 1Q, 2016 2Q, 2016 3Q, 2016, 4Q, 2017 1Q, 2017 2Q… You get the idea.
answered Jul 26, 2018 at 13:47
user9944315user9944315
3012 silver badges4 bronze badges
Right-click and Ungroup at Date areas works wonder for me.
answered Jan 7, 2022 at 1:52
1
Right click in the Date column and go to group options and simply add an unwanted group and then remove it. This will fixed the sorting issue without losing any slicers you may have included. Hope this helps.
answered Jun 21, 2022 at 4:33