Tengo una tabla con datos grandes que contienen apellidos y hogares familiares. Y estoy tratando de incluirlos en una lista única seguida de los nombres conocidos como valores separados por comas.
La siguiente tabla explica las entradas y la salida deseada.
Aquí están los datos sin procesar.
Familiar | Nombres |
---|---|
Herrero | jane |
boyero | Anya |
Molinero | kate |
Herrero | John |
boyero | doug |
boyero | Sam |
Molinero | José |
Herrero | Jim |
boyero | jeff |
Encontré unsolicitud similar pero fue para Python. Estoy buscando algo en Excel que pueda hacer esto. Probé la tabla dinámica pero no funciona, ya que intenta agregarla.
Respuesta1
Hay muchas formas de lograr el resultado deseado. Aquí hay algunas formas que he conocido hasta ahora:
▶️ Usando Power Query
, disponible en Windows Excel 2010+
yExcel 365 (Windows or Mac)
Para utilizar Power Query siga los pasos:
- Primero convierta los rangos de origen en una tabla y asígnele el nombre correspondiente; para este ejemplo lo he nombrado como
Table1
- A continuación, abra una consulta en blanco desde DataTab --> Get & Transform Data--> Get Data--> From Other Sources-->Blank Query
- Lo anterior permite que Power Queryse abra la ventana, ahora desde HomeTab --> Advanced Editor--> Y pega lo siguiente M-Codeeliminando lo que veas, y presionaDone
let
Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
#"Changed Type" = Table.TransformColumnTypes(Source,{{"Household", type text}, {"Names", type text}}),
#"Grouped Rows" = Table.Group(#"Changed Type", {"Household"}, {{"Names", each Text.Combine([Names],", "), type text}})
in
#"Grouped Rows"
- Por último, para volver a importarlo a Excel--> Haga clic en Close & Loado Close & Load To--> El primero que hizo clic creará un archivo New Sheetcon el resultado requerido, mientras que el segundo mostrará una ventana que le preguntará dónde colocar el resultado.
▶️ Uso de GROUPBY()
la función disponible enMS365
Versión de Office Insiders:
=GROUPBY(A2:A10,B2:B10,ARRAYTOTEXT,,0)
▶️ O bien, usar LAMBDA()
la función auxiliar BYROW()
--> Aplicable al canal actualMS365
=LET(
_data, A2:B10,
_household, TAKE(_data,,1),
_names, UNIQUE(_household),
HSTACK(_names, BYROW(_names, LAMBDA(x, TEXTJOIN(", ",1,IF(x=_household,TAKE(_data,,-1),""))))))
▶️ O, Usando POWER PIVOT
, disponible en Windows Excel 2013+
yExcel 365 (Windows)
Para utilizar Power Pivot sigue los pasos:
- Primero convierta los rangos de origen en una tabla y asígnele el nombre correspondiente; para este ejemplo lo he nombrado como
Table_1
- Seleccione alguna celda en sus datos y haga clic en
Insert
Tab -> Haga clic enPivot Table
--> SeTable/Range
mostrará comoTable_1
, Haga clic enNew Worksheet
oExisting Worksheet
según su elección, --> Si es último, seleccione la ubicación de la celda y haga clic enAdd this data the Data Model
.
- A la derecha
Pivot Table
aparece el panel de campos, haga clic derechoTable_1
en el panel y seleccioneAdd Measure
- Ingrese el nombre de la medida según su elección e ingrese la siguiente fórmula en la sección de fórmula:
=CONCATENATEX(Table_1,[Names],", ")
- Presione Aceptar, seleccione
Household
y colóquelo enROWS
Área mientras la Medida nombrada comoName-CommaSeparated
(usada en este ejemplo, puede cambiarla) enVALUES
Área.
- Desde
Design
la pestaña cambieReport Layout
aShow in Tabular Form
, luego haga clicGrand Totals
y seleccioneOff for Rows and Columns
y obtendrá el resultado deseado.
⏩ Otra versión alternativa para Excel 2016+
adelante:
=SUBSTITUTE(CONCAT(IF(D2=A$2:A$10,","&B$2:B$10,"")),",",,1)
La fórmula anterior debe presionar CTRL+ SHIFT+ ENTERal salir del modo de edición solo para versiones anteriores.