Сортировка сводной таблицы Excel с использованием нескольких полей и без группировки

У меня есть книга Excel с контактной информацией на одном листе и формой на другом. Я хочу создать еще один лист с отфильтрованным набором контактов FULLNAME для отображения в списке на листе формы. У меня он работает со сводной таблицей с FULLNAME, но я не могу добавить сортировку по LASTNAME без группировки элементов, а это не то, что я хочу. Любые предложения, которые не включают дублирование данных

ОБНОВИТЬ:

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

введите здесь описание изображения

Поэтому, когда я добавляю фамилию в сводную таблицу, чтобы я мог сортировать по фамилии, конечно, данные группируются таким образом, как и ожидалось.

введите здесь описание изображения

который дает мне этот результат в моем списке форм

введите здесь описание изображения

как вы можете видеть, запись «Группировка фамилий» также отображается в списке, что нежелательно.

ОБНОВЛЕНИЕ: Используя приведенное ниже решение Андреаса и пару других модификаций, я смог решить эту проблему. Я публикую законченное решение, потому что знаю, что оно понадобится кому-то еще.

Таким образом, использование решения Андреаса на изображении ниже дало мне первый набор данных справа от моей сводной таблицы. Как видите, в нем есть пробелы, и это будет неприглядно привязывать эту таблицу к списку. Таким образом, используя следующую макрофункцию, я смог создать данные столбца 3 без пробелов. Функция заключается в следующем...

=IFERROR(INDEX(SortedSpacedRange,SMALL((IF(LEN(SortedSpacedRange),ROW(INDIRECT("1:"&ROWS(SortedSpacedRange))))),ROW(A1)),1),"")

Вместо использования ранжированных данных в функции я создал таблицу из данных второго столбца под названием «SortedSpacedRange». Это позволяет мне лучше использовать его на нескольких листах. Не забудьте использовать Ctrl+Shift+Enter для вставки функции.

введите здесь описание изображения

Как вы можете видеть ниже, теперь у меня есть отсортированный по фамилиям список без пробелов, кроме того, который я намеренно поместил в первую строку таблицы без пробелов.

введите здесь описание изображения

Я надеюсь, что кто-то найдет это полезным. Еще раз спасибо Андреас


person Tim    schedule 17.09.2016    source источник
comment
Не уверен, что вы просите, я думаю, вам нужно опубликовать несколько изображений. Но, насколько я понимаю, вы могли бы добавить еще одну сводную таблицу, которую вы связываете с другой?   -  person Andreas    schedule 17.09.2016
comment
Я провел еще несколько тестов и думаю, что мне действительно нужно иметь таблицу на одном листе, а затем иметь второй и третий листы с разными подмножествами этих данных. Затем я могу получить данные для списка для формы оттуда, но я хотел бы, чтобы 2-й и 3-й листы содержали справочные данные, поэтому, когда я обновляю таблицу, листы будут получать обновления. Я обновлю операцию некоторыми изображениями того, что я сейчас вижу.   -  person Tim    schedule 17.09.2016


Ответы (1)


Теперь я вижу, что вам нужно.
Всего несколько дней назад я спросил, как отсортировать элементы из сводной таблицы здесь:
https://stackoverflow.com/questions/39383971/how-can-i-detect-pivot-table-new-items

Что вам нужно:

Function IsItem(c)
    If c.IndentLevel <> 0 Then ' I think this will work, not tested. Typing on my phone
        IsItem = True
    Else
        IsItem = False
    End If

End Function

Это вернет true/false, если элемент в сводной таблице является новым элементом или «суммой».

Итак, в новом столбце рядом со сводной таблицей используйте следующую формулу:

РЕДАКТИРОВАТЬ: это явно не A1, с которого начинается сводная таблица, мой плохой. Просто замените ячейку любой ячейкой, которая является первой. КОНЕЦ РЕДАКТИРОВАНИЯ. РЕДАКТИРОВАТЬ 2: Теперь я вижу, что это A4, который является первым. КОНЕЦ РЕДАКТИРОВАНИЯ 2.

=if(A4="","",if(IsItem(A4),A4,""))

Сначала он просматривает ячейку, и если она пуста, возвращается пусто.
Если она не пуста, она просматривает значение и, если это полное имя (не только фамилия), возвращает имя, иначе пусто.

Теперь, если вы заполните эту формулу, у вас должен быть список только полных имен, которые вы можете использовать в своем списке формы.

Код vba следует поместить в модуль, а файл необходимо сохранить как макроактивированную рабочую книгу xlsm, прежде чем добавлять формулы на лист.

person Andreas    schedule 17.09.2016
comment
Спасибо, Андреас, это решило мою проблему. Мне пришлось сделать несколько других вещей, таких как удаление пустых строк из нового набора данных, но после того, как я разобрался с этим, это именно то, что я искал. - person Tim; 18.09.2016