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
, Вы — золотце, Дай бог вам здоровья! |
На чтение 7 мин. Просмотров 36.3k.
Итог: узнаете, как изменить форматирование даты для сгруппированного поля в сводной таблице.
Уровень мастерства: Средний
Изменение формата для дат не работает
Когда мы группируем поле «Дата» в сводной таблице с помощью функции «Группировать», форматирование чисел для поля «День» фиксируется. Он имеет следующий формат «день-месяц» или «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, если вы не хотите использовать функцию группы.
Пожалуйста, оставьте комментарий ниже с любыми вопросами или
предложениями о том, как мы можем улучшить это. Спасибо! 🙂
Отображение дат в сводной таблице |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
Изменение формата даты для сгруппированных дат в сводной таблице
Я работаю в Excel 2010
предположим, у вас есть законное поле даты в ваших необработанных данных с датами, такими как 1/1/2015. Затем вы создаете сводную таблицу с полем даты в метках строк.
теперь предположим, что вы хотите показать результаты по месяцам, поэтому щелкните правой кнопкой мыши «поле группы» и выберите, чтобы сгруппировать его по месяцам.
теперь ваши данные отображаются в месяцах в формате Mmm. Как бы вы изменили его формат Mmmm? Или что, если вы хотите отобразить его как число (т. е. Jan отображается как 1)
Как насчет дат, которые имеют метки времени, и вы группируетесь по дням. В сводной таблице дата будет отображаться как D-Mmm. Что делать, если я хочу MM/DD/YYYY?
Да, я уже пробовал изменить его, щелкнув правой кнопкой мыши -> настройки поля — > формат номера. Это не сработало.
7 ответов
У меня была та же проблема. То, что я сделал,-это щелкнуть правой кнопкой мыши по значению, для которого я хочу изменить представление в сводной таблице и выбрать опцию «разгруппировать». Это возвращает формат представления reguler. Надеюсь, это вам поможет.
Если вы выбираете столбцы, в которых дата разбивается (в пределах сводных лет, квартала и т. д.) и идут данные-разгруппироваться. Это приведет вас к формату даты.
начиная с Excel 2016, нет способа изменить способ, которым Excel автоматически форматирует сгруппированные даты в сводных таблицах.
обходным путем является создание нового поля / столбца в исходном файле данных с требуемым форматом и использование его в сводной таблице.
ответ Бариса Сари частично верен. Вам нужно разгруппировать даты, что позволяет вам установить любой формат даты, который вы хотите.
выберите все даты в сводной таблице, затем щелкните правой кнопкой мыши и выберите Ungroup.
Затем щелкните правой кнопкой мыши снова на вашем выборе и нажмите Format Cells. Первая вкладка в открывшемся окне относится к номерам.
это работало в Excel 2016 и 2010.
Я просто переформатировал поле даты и времени, которое было источником данных для сводной таблицы (которая была dd/mm/yyy hh:mm:ss) в текст (ddddd.ttttt), а затем, когда я обновил сводную таблицу, она появляется в выбранном мной формате даты и времени.
Я пробовал две вещи:
-
Я просто изменил формат ячеек, как обычно.
-
выбрано более одного элемента в группировке (с помощью Control+click on windows или Command+click on mac) источник
ps.: Я указал, как выбрать более одного элемента, потому что это не очень интуитивно.
Я выбрал один из заголовков столбцов и нажал ungroup.
Моя проблема заключалась в том, что сводная таблица имела заголовки mmm, и я хотел, чтобы m/d/yyyy соответствовал моим необработанным данным.
Я работаю в Excel 2010
Допустим, у вас есть допустимое поле даты в ваших необработанных данных с такими датами, как 1/1/2015. Затем вы создаете сводную таблицу с полем даты в метках строк.
Теперь предположим, что вы хотите отображать результаты по месяцам, поэтому щелкните правой кнопкой мыши «Поле группы» и выберите группировку по месяцам.
Теперь ваши данные отображаются в месяцах в формате Ммм. Как бы вы поменяли формат Мммм? Или что, если вы хотите отобразить его как число (например, Ян отображается как 1)
Как насчет дат, которые имеют отметки времени и группируются по дням. В сводной таблице дата будет отображаться как Д-Ммм. Что, если я хочу ММ / ДД / ГГГГ?
Да, я уже пробовал изменить его, щелкнув правой кнопкой мыши -> настройки поля -> формат числа. Это не сработало.
9 ответов
Лучший ответ
Начиная с Excel 2016, нет возможности изменить способ, которым Excel автоматически форматирует сгруппированные даты в сводных таблицах.
Обходной путь — создать новое поле / столбец в исходном файле данных с желаемым форматом и использовать его в сводной таблице.
10
ChrisG
23 Май 2018 в 14:00
Я выбрал один из заголовков столбца и нажал кнопку «Разгруппировать». Моя проблема заключалась в том, что в сводной таблице были заголовки mmm, и я хотел, чтобы m / d / yyyy соответствовали моим необработанным данным.
-3
Stu Holden
7 Фев 2017 в 16:11
Я пробовал две вещи:
-
Я просто как обычно поменял формат ячеек.
-
Выделено более одного элемента при группировании (с помощью Control + щелчок по окнам или Command + щелчок по Mac) источник
Ps: Я указал, как выбрать более одного элемента, потому что это не очень интуитивно понятно.
-2
jpfreire
30 Июл 2016 в 11:35
Мне удалось решить эту проблему, манипулируя внутренним OOXML (Office Open XML) документа Excel. Если вы не знаете, как открыть документ Excel (для просмотра документов xml, из которых он состоит внутри), обратитесь к одной из этих ссылок:
-
«Лучший способ» Используйте расширение Visual Studio (редактор пакетов OOXML) для непосредственного открытия / редактирования файла Excel: http://www.ericwhite.com/blog/open-xml-installation-center/
-
Или используйте «более простое» расширение для Chrome (перетащите на него файл Excel): https://chrome.google.com/webstore/detail/ooxml-tools/bjmmjfdegplhkefakjkccocjanekbapn?hl=en (не забудьте загрузить новый файл после сохранения в нем изменений)
-
Или «наименее рекомендованный» способ
1.) Change your filename from "MyExcelFile.xlsx" to "MyExcelFile.zip" 2.) Unzip the file 3.) Change the format (as explained below) 4.) Zip it all back up and change extension to .xlsx 5.) Warning, This method often corrupts my files, but not always, so I use OOXML Package editor in Visual Studio instead.
Независимо от вашего метода, теперь перейдите к «PivotCache» для вашей сводной таблицы. В моем «распакованном файле excel» путь к файлу: Root> xl> pivotCache> pivotCacheDefinition1.xml
Моя копия содержит около 800 строк xml, и я полагаю, что это может быть намного больше, но сосредоточьтесь только на той части, которую вы хотите переформатировать. (убедитесь, что вы преобразили свой xml, чтобы это не одна длинная сжатая строка, если вы используете Visual Studio Ctrl + K, Ctrl + D)
Найдите атрибут: groupBy = «months»
Мой образец находит
<cacheField name="Months" numFmtId="0" databaseField="0">
<fieldGroup base="2">
<rangePr groupBy="months" startDate="2019-01-02T00:00:00" endDate="2019-12-27T00:00:00"/>
<groupItems count="14">
<s v="<1/2/2019"/>
<s v="Jan"/>
<s v="Feb"/>
<s v="Mar"/>
<s v="Apr"/>
<s v="May"/>
<s v="Jun"/>
<s v="Jul"/>
<s v="Aug"/>
<s v="Sep"/>
<s v="Oct"/>
<s v="Nov"/>
<s v="Dec"/>
<s v=">12/27/2019"/>
</groupItems>
</fieldGroup>
</cacheField>
</cacheFields>
… И все, что вам нужно сделать, это заменить «Янв» на «1» или любое другое строковое представление для каждого месяца!
Сделать еще один шаг вперед, но все же ответить на вопрос о том, как отформатировать группу по столбцу, — отформатировать groupBy = «days», что приведет к
<fieldGroup par="5" base="2">
<rangePr groupBy="days" startDate="2019-01-02T00:00:00" endDate="2019-12-27T00:00:00"/>
<groupItems count="368">
<s v="(blank)"/>
<s v="1-Jan"/>
<s v="2-Jan"/>
<s v="3-Jan"/>...
Список можно продолжать и продолжать, если быть точным, то 368 элементов. 365 дней, плюс первый и последний элементы, включая 29 февраля. Если вы пытаетесь отформатировать строку, сгруппированную по дням, это элементы, которые нужно изменить. то есть:
<s v="1-Jan"/>
Вы можете изменить их, например, на китайский (или что угодно, вам просто нужно 366 замен элементов) (опять же, оставьте первый и последний элемент в покое).
Так что «1 января» «2 января» может стать
<s v="1月1日"/>
<s v="1月2日"/>...
Вы относитесь к ним точно так же, как я показывал ранее для Месяцев. Дни, однако, утомительнее делать вручную, так как вам нужен элемент на каждый день, поэтому я создал функцию C #, которую вы можете изменить, чтобы быстро выплевывать элементы в файл (для копирования и вставки в ваш .xml)
public void GenerateExcelGroupedDateFormatPivotTableElements()
{
int year = 2019;
var sb = new StringBuilder();
for (int i = 1; i <= 12; i++)
{
var daysInMonth = DateTime.DaysInMonth(year, i);
for (int j = 1; j <= daysInMonth; j++)
{
//Modify template below as you wish, (uses String Interpolation $) and (Verbatim @ symbol)
//Full Month Name: ie January-day
string monthName = CultureInfo.CurrentCulture.DateTimeFormat.GetMonthName(i);
sb.AppendLine($@"<s v=""{monthName}-{j}""/>");
//or Chinese sample
//sb.AppendLine($@"<s v=""{i}月{j}日""/>");
}
}
File.WriteAllText("_ExcelPivotTableGroupedDateHelper.txt",sb.ToString());
}
Важно: если вы используете эту функцию, чтобы вывести свои дни, добавьте вручную 29 февраля, если в исходном наборе, который вы вставляете, есть 29 февраля (как это было у меня).
Кажется, есть новая опция «Групповое поле» (по какой-то причине помеченная «7». Нажмите на нее, и вы получите варианты переключателя для Месяца / Дня / Часа и т. Д. Выберите свои предпочтения и нажмите OK. Надеюсь, это сработает для вас тоже!
Будем признательны за то, что можно и чего нельзя делать.
Удачного кодирования!
0
CANDIMAN
23 Июн 2020 в 03:36
Кажется, есть новая опция «Групповое поле» (по какой-то причине помеченная «7». Нажмите на нее, и вы получите варианты переключателя для Месяца / Дня / Часа и т. Д. Выберите свои предпочтения и нажмите OK. Надеюсь, это сработает для вас тоже!
0
Srikrishna Vadrevu
24 Фев 2020 в 01:19
Я просто переформатировал поле даты и времени, которое было источником данных для сводной таблицы (которое было дд / мм / ггг чч: мм: сс) в текст (ddddd.ttttt), а затем, когда я обновил сводную таблицу, оно появилось в формат даты и времени, который я выбрал.
0
Browny
2 Ноя 2017 в 03:25
Ответ Бариса Сари частично верен. Вам нужно разгруппировать даты, что затем позволит вам установить любой формат даты, который вы хотите.
Выберите все даты в сводной таблице, затем щелкните правой кнопкой мыши и выберите «Разгруппировать». Затем щелкните правой кнопкой мыши еще раз по своему выбору и нажмите «Форматировать ячейки». Первая вкладка в открывшемся окне относится к числам.
Это работало в Excel 2016 и 2010.
0
Von Pittman
23 Фев 2017 в 14:33
Если вы выберете столбцы, в которых разбита дата (внутри сводной таблицы — годы, квартал и т. Д.), И перейдите к разгруппировке данных. Это приведет вас к формату даты.
3
nina
5 Июл 2017 в 14:00
У меня была такая же проблема. Я щелкнул правой кнопкой мыши значение, для которого я хочу изменить представление сводной таблицы, и выбрал опцию «Разгруппировать». Это возвращает формат просмотра регулятора. Я надеюсь это тебе поможет.
12
Baris Sari
5 Дек 2016 в 15:59