¿Cómo convertir de forma masiva datos de filas en columnas en Mac Excel (la transposición no es adecuada)?

¿Cómo convertir de forma masiva datos de filas en columnas en Mac Excel (la transposición no es adecuada)?

Tengo muchos datos que se parecen a esto. Tiene dos columnas:

Pero necesito que se vea así. Un nombre por fila, con los correos electrónicos agregados como columnas adicionales según sea necesario. Hay una cantidad desconocida de correos electrónicos para cada nombre:

Tengo que hacer esto para una hoja de cálculo enorme con miles de filas. Entonces no puedo convertir manualmente cada uno de ellos usando algo como transponer. Necesito una solución masiva/por lotes/automatizada.

Sé que VBA existe, pero no sé cómo codificarlo. Si esa es la solución, ¿podría darme alguna indicación de cómo debería verse el código?

Las soluciones que no sean VBA también son bienvenidas.

Respuesta1

UsandoMolineroy a partir de este CSV:

Name,Email
bob,[email protected]
bob,[email protected]
bob,[email protected]
sally,[email protected]
sally,[email protected]

Tu puedes correr:

mlr --csv nest --ivar ";" -f Email then nest --explode --values --across-fields -f Email then unsparsify input.csv >output.csv

para obtener:

Respuesta2

Comenzando con su ejemplo Columna A: Nombre, Columna B: Correo electrónico

  1. Ingrese esta fórmula matricial: =INDEX($A$2:$A$6, MATCH(0, COUNTIF($D$1:$D1, $A$2:$A$16), 0)) en una celda en blanco, D2, por ejemplo, y presione las teclas Shift + Ctrl + Enter juntas para obtener el resultado correcto, vea la captura de pantalla:

ingrese la descripción de la imagen aquí

  1. Arrastre la celda hacia abajo para completar todos los valores en la columna D. El resultado será como en la captura de pantalla anterior.
  2. en la celdaE2donde quieres tu correo inserta esta formula=IFERROR(INDEX($B$2:$B$16, MATCH(0,COUNTIF($D2:D2,$B$2:$B$16)+IF($A$2:$A$16<>$D2,1,0),0)),"")
  3. Arrastre la celda hacia la derecha de 5 a 10 celdas (o la cantidad que considere suficiente) para completar y luego arrastre la fila hacia abajo para completar los correos electrónicos de cada persona.

Resultado: ingrese la descripción de la imagen aquí


FUENTE

Respuesta3

Agregue una columna auxiliar con la fórmula:

="Mail "&COUNTIF($A$2:A2,A2)

ingrese la descripción de la imagen aquí

Abra el Editor de Power Query: seleccioneColumna1- ir aTransformar-Columna pivotante- seleccionarCorreo electrónicoY debajoOpción avanzadaseleccionarNo agregue:

ingrese la descripción de la imagen aquí

Respuesta4

Si tiene una nueva versión de Excel, puede utilizar estas fórmulas.

Entonces puedes hacerlo de esta manera: ingrese la descripción de la imagen aquí El azulla tabla se llama Table1.

Fórmulas utilizadas:

  • E3:=UNIQUE(Table1[Name])
  • F2:N2:="Mail"&COLUMN()-COLUMN($E$2)
  • F3 (estirado hacia abajo):=INDEX(Table1[Mail];FILTER(TRANSPOSE(SORT(UNIQUE((ROW(Table1[Name])-ROW(Table1[[#Headers];[Name]]))*($E3=Table1[Name]))));TRANSPOSE(SORT(UNIQUE((ROW(Table1[Name])-ROW(Table1[[#Headers];[Name]]))*($E3=Table1[Name]))))>0;""))

La tabla se llena con la función DERRAME de las nuevas versiones de Excel.

Archivo de ejemplo:https://1drv.ms/x/s!ArVkYVSHnABFiiqzBYLPmoubvdHY?e=p7wOeF

En caso de que esté utilizando una versión anterior de Excel, la mayor parte de la funcionalidad se puede emular mediante funciones de matriz. Pero todo se vuelve mucho más caótico...

información relacionada