Создать разделенные запятыми значения в Excel (используя сводную таблицу)? - PullRequest
3 голосов
/ 08 декабря 2010

Есть ли способ генерировать значения в запятых в Excel (оптимально с помощью сводной таблицы)? Рассмотрим следующие данные:

Object Color
foo    Red
foo    Blue
bar    Red
bar    Blue
bar    Green
baz    Yellow

Я бы хотел получить таблицу, подобную следующей:

Object  Count of Color  Colors
foo     2               Red,Blue
bar     3               Red,Blue,Green
baz     1               Yellow

Возможно ли это в Excel? Данные поступают из запроса SQL, поэтому я мог написать UDF с рекурсивным CTE для вычисления, но это было для одного специального запроса, и я хотел быстро и грязно получить денормализованные данные. В конце концов, вероятно, это заняло больше времени, чем написание UDF, но ...

Ответы [ 2 ]

4 голосов
/ 30 мая 2013

Вот гораздо более простой ответ, адаптированный из этого ответа суперпользователя (HT для @ yioann для его указания и @ F106dart для оригинала):

Предполагается, что данные находятся в столбцах A (Категория) и B (Значение):

  1. Создайте новый столбец (C) и назовите его «Значения».Используйте эту формулу, начиная с ячейки C2 и копируя до конца: =IF(A2=A1, C1&","&B2, B2)
  2. Создайте второй новый столбец (D) и назовите его «Count».Используйте эту формулу, начиная с ячейки D2 и копируя до конца: =IF(A2=A1, D1+1, 1)
  3. Создайте третий новый столбец (E) и назовите его «Последняя строка?».Используйте эту формулу, начиная с ячейки E2 и полностью копируя ее вниз: =A2<>A3

Теперь можно скрыть столбец B (значение) и столбец фильтра E (последняя строка?) Только дляTRUE значения.

В итоге:

   A         B      C                        D                    E
 +---------  -----  -----------------------  -------------------  ----------
1| Category  Value  Values                   Count                Last Line?
2| foo       Red    =IF(A2=A1,C1&","&B2,B2)  =IF(A2=A1, D1+1, 1)  =A2<>A3
3| foo       Blue   =IF(A3=A2,C2&","&B3,B3)  =IF(A3=A2, D2+1, 1)  =A3<>A2
etc.
0 голосов
/ 13 февраля 2011

Да, вам было бы гораздо лучше использовать инструменты любой используемой СУБД (MS SQL, MySQL и т. Д.).

Такая сводная таблица возможна в Excel. Но, только если вы пишете громоздкий модуль VBA - который я не рекомендую.

Однако задача проще в MS Access, который обычно поставляется в комплекте с Excel. Microsoft упрощает связывание Access и Excel и использование первых для выполнения запросов к последним.
Итак, с учетом ячеек электронной таблицы, как указано:

  1. Для получения наилучших результатов отсортируйте таблицу по Object, а затем по Color.

  2. Убедитесь, что электронная таблица сохранена.

  3. Откройте MS Access.

  4. Выбрать Файл -> Открыть ( Ctrl O )

  5. Под Файлы типа , выберите Microsoft Excel

  6. Перейдите к существующей электронной таблице и выберите ее.

  7. Выберите рабочий лист или именованный диапазон, содержащий вашу таблицу.

  8. Дайте связанной таблице имя MyPivot.

  9. Откройте редактор Visual Basic ... Инструменты -> Макрос -> Редактор Visual Basic ( Alt F11 )

  10. Вставьте модуль и вставьте этот UDF:

    'Concat returns a comma-seperated list of items
    Public Function Concat (CategoryCol As String, _
                            ItemCol     As String) As String
        Static LastCategory As String
        Static ItemList     As String
    
        If CategoryCol      = LastCategory Then
            ItemList        = ItemList & ", " & ItemCol
        Else
            LastCategory    = CategoryCol
            ItemList        = ItemCol
        End If
        Concat = ItemList
    End Function
    


  11. Сохранить проект и закрыть редактор VB

  12. Под Запросы , Создать новый запрос в режиме конструктора.

  13. Переключиться на SQL View .

  14. Вставить в этот SQL:

    SELECT 
        Object,
        COUNT (Color)                  AS [Count of Color],
        LAST (Concat (Object, Color))  AS [List 'O Colors]
    FROM
        MyPivot
    GROUP BY
        Object
    


  15. Запустите запрос (нажмите красный восклицательный знак или просто выберите Просмотр таблицы ).

  16. Вуаля, сделано за 15 простых шагов! ;)
    Результаты:

    Object  Count of Color  List 'O Colors
    bar             3       Blue, Green, Red
    baz             1       Yellow
    foo             2       Blue, Red
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...