Сортировка элементов сводки Excel по дате

Редактировать: Решено!! Пока не могу выложить решение.

У меня есть сводная таблица с полем "даты". Мне нужен код VBA, который сортирует от самых старых дат до самых новых.

Мне нужно, чтобы даты были в формате AUS, т.е. дд/мм/гггг или д ммм гггг или аналогичный. Это когда Excel не упорядочивает их правильно.

Итак, предположим, что сводное поле «Даты» имеет следующие элементы сводки:

01 Jan 2012
30 Apr 2012
(blank)
03 Feb 2013
14 Feb 2012
22 Nov 2012

Правильный порядок будет такой:

01 Jan 2012
14 Feb 2012
30 Apr 2012
22 Nov 2012
03 Feb 2013
(blank)

Я думаю, что приближаюсь, но все равно не повезло.

Dim pi As PivotItem
Dim pfd As PivotField
Dim pt As PivotTable

Set pfd = pt.PivotFields("Snapshot Date")

For Each pi In pfd.PivotItems
pi = CDate(pi) 'converts to US date for sorting 
Next pi

pfd.AutoSort _
xlAscending, "Snapshot Date"

For Each pi In pfd.PivotItems
pi = Format(pi, "d mmm yyyy") 'converts to AUS
Next pi

Спасибо за вашу помощь. Разветвление


person Ramify    schedule 06.05.2012    source источник
comment
в ячейках есть дата формата? Если щелкнуть ячейку, в формуле должно быть 01.01.2012.   -  person Uflex    schedule 06.05.2012
comment
Я обновил описание :)   -  person Ramify    schedule 06.05.2012
comment
ну, с кодом лучше... ваша функция PivotFields возвращает диапазон, верно? Почему бы вам не использовать сортировку?   -  person Uflex    schedule 06.05.2012
comment
Я пытаюсь отсортировать элементы сводки?   -  person Ramify    schedule 06.05.2012


Ответы (1)


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

Затем, чтобы отсортировать, выберите все строки, которые вы хотите отсортировать, перейдите к данным/сортировке, выберите столбец с вашими датами и порядком сортировки (по возрастанию/убыванию) и нажмите «ОК».

Ваши даты должны быть отсортированы ;)

РЕДАКТИРОВАТЬ: поскольку вы используете макрос, попробуйте что-то подобное

Set pfd = pt.PivotFields("Snapshot Date")
pfd.Sort Key1:=Range("A1"), Order1:=xlDescending, Header:=xlYes
person Uflex    schedule 06.05.2012
comment
Проблема в том, что мне нужно, чтобы он отображался как d/mm/yy, а не m/dd/yyy. Если я делаю числовой формат для ячеек, он работает, но затем он просто возвращается в США, когда я обновляюсь. :( - person Ramify; 06.05.2012
comment
когда обновишься? Используете ли вы макрос для обновления некоторых других данных? - person Uflex; 06.05.2012
comment
Это сортирует сводные элементы или диапазон? - person Ramify; 06.05.2012
comment
он сортирует диапазон, но я не уверен, что вы действительно хотите сделать. - person Uflex; 06.05.2012