En referencia a la imagen adjunta con datos de muestra, me gustaría combinar fecha, persona y nota de varias filas en 1 fila con saltos de línea para cada conjunto de valores combinados. Cada nota ocupa una fila con Nombre e ID en blanco, por lo que será necesario combinar cada fila debajo de la fila principal con valores. Consulte la imagen adjunta para conocer los datos y el resultado deseado.
Data de muestra:
+-------+--------------+------------------+---------+-----------------------+
| Name | ID | Date | Person | Notes |
+-------+--------------+------------------+---------+-----------------------+
| Danny | UID11224512 | 11/5/2019 | Joe | <p>Note for Danny</p> |
| | | 11/5/2019 | John | <p>Note 2</p> |
| Joe | UID11224956 | 11/5/2019 18:54 | Someone | <p>Note 1</p> |
| | | 11/5/2019 18:54 | Someone | <p>Note 2</p> |
| Jane | UID11224959 | 11/5/2019 18:54 | Danny | <p>Note 1 </p> |
| | | 11/5/2019 17:33 | Shawn | <p>Note 3</p> |
| | | 11/6/2019 18:54 | Jane | <p>Note 2</p> |
| Tom | UID115466652 | | | |
| Eric | UID168998955 | | | |
| Paula | UID166559885 | | | |
| Frank | UID112249569 | 11/5/2019 18:54 | Someone | <p>Note 1</p> |
| | | 11/6/2019 18:54 | Someone | <p>Note 2</p> |
| | | 11/7/2019 18:54 | Someone | <p>Note 3</p> |
| | | 11/8/2019 18:54 | Someone | <p>Note 4</p> |
| | | 11/9/2019 18:54 | Someone | <p>Note 5</p> |
| | | 11/10/2019 18:54 | Someone | <p>Note 6</p> |
| Paul | UID1665588 | | | |
+-------+--------------+------------------+---------+-----------------------+
Salida deseada:
+-------+--------------+-----------------------------------+
| Name | ID | Notes |
+-------+--------------+-----------------------------------+
| Danny | UID11224512 | "11/5/2019 (Joe) - Note for Danny |
| | | 11/5/2019 (John) - Note 2" |
| Joe | UID11224956 | "11/5/2019 (Someone) - Note 1 |
| | | 11/5/2019 (Someone) - Note 2" |
| Jane | UID11224959 | "11/5/2019 (Danny) - Note 1 |
| | | 11/5/2019 (Shawn) - Note 2 |
| | | 11/5/2019 (Jane) - Note 3" |
| Tom | UID115466652 | |
| Eric | UID168998955 | |
| Paula | UID166559885 | |
| Frank | UID112249569 | "11/5/2019 (Someone) - Note 1 |
| | | 11/6/2019 (Someone) - Note 2 |
| | | 11/7/2019 (Someone) - Note 3 |
| | | 11/8/2019 (Someone) - Note 4 |
| | | 11/9/2019 (Someone) - Note 5 |
| | | 11/10/2019 (Someone) - Note 6" |
| Paul | UID1665588 | |
+-------+--------------+-----------------+---------+-----------------------------------+
Respuesta1
Una forma de hacerlo es con Power Query, disponible en Windows Excel 2010+ y Office 365.
- Seleccione alguna celda en su tabla de datos
Data => Get&Transform => from Table/Range
- En la interfaz de usuario de Power Query:
Home => Advanced Editor
- Tome nota del nombre de la tabla en la línea 2
- Pegue el MCode a continuación en la ventana
- Cambie el nombre de la tabla en la línea 2 a su nombre de tabla real
- Lea el código, los comentarios y examine la
Applied Steps
ventana para comprender qué está pasando.
Algoritmo breve
Fill down
los espacios en blanco para las columnas Nombre e IDGroup
por las columnas Nombre e ID- Extrae elPrimerofecha, persona y nota como se muestra en columnas separadas
- Combine todas las fechas/personas/notas (separadas por cambios de línea) para la última columna
Código M
En el código siguiente, asegúrese de cambiar el nombre de la tabla en la Línea 2 por el nombre real de su tabla.
let
Source = Excel.CurrentWorkbook(){[Name="Table3"]}[Content],
#"Changed Type" = Table.TransformColumnTypes(Source,{{"Name", type text}, {"ID", type text}, {"Date", type datetime}, {"Person", type text}, {"Notes", type text}}),
//Fill down to fill in the blanks for Name and ID columns
#"Filled Down" = Table.FillDown(#"Changed Type",{"Name", "ID"}),
//Group on Name and ID -- should be the same so this is a double check.
#"Grouped Rows" = Table.Group(#"Filled Down", {"Name", "ID"}, {
//For each Name/ID
//Extract first Date as a date string if it has no time component, otherwise leave it as a datetime
{"Date", each if DateTime.Time([Date]{0}) = #time(0,0,0)
then DateTime.ToText([Date]{0},"MM/dd/yy")
else [Date]{0}},
//Extract first Person
{"Person", each [Person]{0}},
//extract first Note
{"Notes.1", each [Notes]{0}},
//Extract and combine, for each note, the Date, person, and note
// Then split the combination for each entry by linefeed.
{"Notes.2", (t)=> Text.Combine(
List.Generate(() => [Count=1,
dt =DateTime.ToText(t[Date]{0},"MM/dd/yyyy") & " (" &
t[Person]{0} &
") - " & t[Notes]{0}],
each [Count] <= Table.RowCount(t),
each [Count = [Count] + 1, dt = DateTime.ToText(t[Date]{[Count]},"MM/dd/yyyy") &
" (" & t[Person]{[Count]} &
") - " & t[Notes]{[Count]}],
each [dt]),"#(lf)")
}
})
in
#"Grouped Rows"
En Excel, deberá formatear la Notes.2
columna Wrap Text
y la Date
columna a mm/dd/yyyy hh:mm
(En la columna de fecha, las fechas sin horas se devuelven como cadenas de texto, por lo que no tendrán el mismo formato, nuevamente como se muestra en su pregunta.)
Respuesta2
Asegúrese de configurar "Ajustar texto" en la cinta Inicio para toda la columna de comentarios. Utilice esta fórmula para combinar valores de texto con saltos de línea:
="comment1" & CHAR(10) & "Comment2"
Si está combinando dos tablas separadas, puede que valga la pena investigar Power Query en Excel.