Agrupando etiquetas y concatenando sus valores de texto (como una tabla dinámica)


22

Tengo una hoja de cálculo con datos como este:

Producto | Atributo
---------- + ----------
Producto A | Cian
Producto B | Cian
Producto C | Cian
Producto A | Magenta
Producto C | Magenta
Producto B | Amarillo
Producto C | Amarillo
Producto A | Negro
Producto B | Negro

Lo que me gustaría hacer es agrupar todo por Columna A y hacer que la Columna B sea una lista delimitada por comas de valores que comparten la Columna A en común, así:

Producto | Atributo
---------- + --------------------------
Producto A | Cian, Magenta, Negro
Producto B | Cian, amarillo, negro
Producto C | Cian, Magenta, Amarillo, Negro

Desafortunadamente, las tablas dinámicas solo saben cómo trabajar con valores numéricos, y lo más que se puede hacer es contar el número de veces que aparece la columna A.

Finalmente pude lograr esto importando los datos en una base de datos MySQL y usando la GROUP_CONCAT(Attribute)función de MySQL en una consulta con una GROUP BY Productcláusula, pero después de golpearme la cabeza repetidamente en mi escritorio mientras intentaba encontrar una solución de Excel.

Para referencia futura, ¿es esto posible en Excel sin macros? Ya sea que sea o no, ¿cómo se lograría esto?

Respuestas:


31
   |     A     |     B
---+-----------+-----------
 1 |  PRODUCT  | ATTRIBUTE
 2 | Product A | Cyan
 3 | Product B | Cyan
 4 | Product C | Cyan
 5 | Product A | Magenta
 6 | Product C | Magenta
 7 | Product B | Yellow
 8 | Product C | Yellow
 9 | Product A | Black
10 | Product B | Black

Suponiendo que la fila 1: 1 es la fila del encabezado.

  1. Ordenar por columna A para agrupar por producto

  2. Prepare los datos en formato separado por comas en la columna C ingresando en C2 la siguiente fórmula y cópiela en C3: C10.

    =IF(A2<>A1, B2, C1 & "," & B2)
    
  3. Identifique filas útiles ingresando en D2 =A2<>A3y copie a D3: D10.

  4. Copie la columna C: D, luego pegue especial como valor ( AltE- S- V- Enter). Ahora obtendrá:

    Product A    Cyan       Cyan                   FALSE
    Product A    Magenta    Cyan,Magenta           FALSE
    Product A    Black      Cyan,Magenta,Black     TRUE
    Product B    Cyan       Cyan                   FALSE
    Product B    Yellow     Cyan,Yellow            FALSE
    Product B    Black      Cyan,Yellow,Black      TRUE
    Product C    Cyan       Cyan                   FALSE
    Product C    Magenta    Cyan,Magenta           FALSE
    Product C    Yellow     Cyan,Magenta,Yellow    TRUE
    
  5. Elimine las filas inútiles filtrando FALSEen la columna D con Autofiltro, luego elimine esas filas.

  6. Finalizar . Columna A y C es lo que necesita.


1
¡Eso es usar tu imaginación! Felicidades!
jorgebg

Si bien esto funciona, los tiempos han cambiado desde 2012. Busque a continuación una nueva respuesta que use el complemento PowerQuery (que está integrado en Excel 2016). No podría ser más fácil. Bueno, tal vez hablar con la computadora y pedirle que "agrupe mis datos". Quizás en otros 6 años.
ripvlan

11

Sé que es una publicación antigua pero tuve este desafío hoy. He utilizado el PowerQuery add-in de Microsoft (NOTA: se construyó en Excel 2016 por defecto).

  1. Selecciona tu mesa
  2. En la pestaña CONSULTA DE ENERGÍA (o DATOS en 2016), seleccione "De la tabla"
  3. Haga clic en la columna "Producto"
  4. en la pestaña Transformar, seleccione "Agrupar por"
  5. En la pestaña Ver, asegúrese de que la "Barra de fórmulas" esté marcada
  6. Cambiar la fórmula

    DESDE:

    = Table.Group(#"Changed Type", {"Product"}, {{"Count", each Table.RowCount(_), type number}})
    

    A:

    = Table.Group(#"Changed Type", {"Product"}, {{"Attributes", each Text.Combine([Attribute], ", "), type text}})
    

    Haga clic aquí para ver una imagen de los pasos anteriores

El paso 6 es aprovechar las fórmulas de Power Query (M) para realizar manipulaciones de datos no expuestas a través de las operaciones básicas proporcionadas en la interfaz de usuario. Microsoft tiene una referencia completa disponible en línea para todas las funciones avanzadas disponibles en Power Query.


Solución muy elegante, probablemente la mejor de todas.
asdmin

@matt polonia, me pregunto si sabes cómo eliminar también los valores duplicados a lo largo de las líneas usando este truco increíble.
Lana B

En el PASO 1 (después de seleccionar la tabla), debería poder ir a la pestaña Datos en la cinta y hacer clic en "Eliminar duplicados".
Matt Poland

Hay otra opción dentro de Power Query si no desea alterar su tabla original. Después del PASO 2, puede mantener presionada la tecla CTRL y hacer clic en ambas columnas para que ambas estén seleccionadas. Luego haz clic derecho en una de las columnas y selecciona "Eliminar duplicados". Luego continúe con el PASO 3.
Matt Poland

¡Gracias! Esta es la mejor respuesta. Para aquellos que usan Excel 2016, PowerQuery está integrado. Simplemente presione la pestaña Datos y luego presione "Desde tabla / rango" en la sección "Obtener y transformar datos". Se abrirá Power Query Editor, presione la pestaña Ver y active la Barra de fórmulas. El resto de las instrucciones funcionan como están.
ripvlan

3

Aquí hay un par de enfoques, ambos "no macro" ...

  1. Con un pequeño conjunto de datos, después de ordenarlo por producto (similar al producto GROUP BY), primero puede copiar la columna "Producto", pegarla en otro lugar y luego eliminar los duplicados. Luego, copie los "Atributos" para cada producto y "pegue especial, TRANSPONER" junto a cada Producto. Luego concatene una coma con cada uno de sus atributos transpuestos en una columna de resultados finales. Es cierto que todo este "copiar / pegar especial / transponer" envejecería rápidamente si tienes una larga lista de Productos.

  2. Si tiene muchos datos, con algunas fórmulas puede llegar al resultado final, como se muestra a continuación. Las fórmulas en F2, G2, H2, I2 y N2 están indicadas por las flechas azules. Cópielos en las filas a continuación según sea necesario. Tenga en cuenta que J2: L2 usa la misma fórmula que I2. Además, la fórmula F2 se refiere a un rango llamado "Productos" que abarca el rango A: A.

ingrese la descripción de la imagen aquí


Estas son buenas soluciones, aunque solo si el conjunto de datos es pequeño, como usted dice. ¡Gracias!
p0lar_bear
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.