Macro de Excel para recopilar datos.

Macro de Excel para recopilar datos.

Estoy usando ms-excel 2016, en Windows-7 sp1.

Normalmente recibo archivos, libros de trabajo, cada uno tiene 1 o varias hojas.

Quiero recopilar datos de estos archivos/hojas en un libro maestro en una sola hoja.

Copiará todos los datos en su mayoría, pero en algunas columnas en diferente orden.

Las hojas tienen datos como este:

id, name, address, telephone,branch,area, ...

La hoja maestra tendrá:

id, name,adress,telephone-1, telephone-2,area,branch

en la mayoría de los casos, si el cliente tiene 2 teléfonos, sistema de entrada de datos, ingréselo en 2 filas, así:

id, name, address, telephone,branch,area
g13, jake, 7 st., 23456343, ,
k12,johne,ca st., 142635, ,
k12,johne,ca st.,150979, ,

en la hoja maestra será así:

id, name, address, telephone-1,telephone-2,area,branch,verified_id
g13, jake, 7 st.,456343, , ,
k12,johne,ca st.,142635,150979, , ,k12

simplemente agregará la identificación al final para verificar que estos datos se copien de la misma identificación del cliente.

Espero haberlo explicado bien, ya que una persona con discapacidad visual no puede mostrar una captura de pantalla.

Respuesta1

A continuación se muestra un ejemplo que utiliza Power Query:

Esto supone que, en las columnas duplicadas, como muestra en su ejemplo, todas son idénticas excepto el teléfono. Si ese no es el caso, es posible que deba realizar este procedimiento en varias columnas.

Anotado Código M

let
    Source = Excel.CurrentWorkbook(){[Name="Table4"]}[Content],
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"id", type text}, {"name", type text}, {"address", type text}, {"telephone", Int64.Type}, {"branch", type any}, {"area", type any}}),
    
    //Group by all the rows EXCEPT "telephone"
    //Do not aggregate (select all rows)
    #"Grouped Rows" = Table.Group(#"Changed Type", {"id", "name", "address", "branch", "area"}, {{"Grouped", each _, type table [id=nullable text, name=nullable text, address=nullable text, telephone=nullable number, branch=text, area=text]}}),
   
   //extract the phone numbers as a "List"
   #"Added Custom" = Table.AddColumn(#"Grouped Rows", "Telephone", each Table.Column([Grouped],"telephone")),

   //remove unwanted column and put the phone number column where it belongs
    #"Removed Columns" = Table.RemoveColumns(#"Added Custom",{"Grouped"}),
    #"Reordered Columns" = Table.ReorderColumns(#"Removed Columns",{"id", "name", "address", "Telephone", "branch", "area"}),

    //add the verified_id column
    #"Added Custom1" = Table.AddColumn(#"Reordered Columns", "verified_id", each if List.Count([Telephone]) = 1 then null else [id]),

    //extract the individual phone numbers from the list, and split the columnt
    #"Extracted Values" = Table.TransformColumns(#"Added Custom1", {"Telephone", each Text.Combine(List.Transform(_, Text.From), ";"), type text}),
    #"Split Column by Delimiter" = Table.SplitColumn(#"Extracted Values", "Telephone", Splitter.SplitTextByDelimiter(";", QuoteStyle.Csv), {"Telephone.1", "Telephone.2"}),
    
    #"Changed Type1" = Table.TransformColumnTypes(#"Split Column by Delimiter",{{"Telephone.1", Int64.Type}, {"Telephone.2", Int64.Type}})
in
    #"Changed Type1"

ingrese la descripción de la imagen aquí

Respuesta2

Una macro (al menos para usuarios/programadores menos avanzados) solo lo ayudará si está realizando exactamente la misma acción en los datos Y los datos están exactamente en el mismo diseño.

Supongo que es posible crear una macro para esto pero no es necesario.

Simplemente iría a la última celda de la primera fila con datos (digamos que es B8)

escriba "B8=B1" y mostrará el ID de B1.

Luego copie la celda B8 -> seleccione todas las celdas restantes en la columna B con datos y pegue la fórmula.

Ahora tendrá su identificación coincidente en ambos extremos.

Gracias,

Miguel

Respuesta3

Una solución semimanual:

  1. Fusionar todo manualmente en hojas maestras.
  2. Ordenar por ID
  3. Poner en la fila E2: =SI(A2=A3, D2, "") *
  4. Ahora copie y pegue como valores la columna E (teléfono2)
  5. Presione "Eliminar duplicados" en la cinta Datos, seleccione solo la columna ID y listo

ingrese la descripción de la imagen aquí

  • Desafortunadamente, existe un pequeño problema con el paso 3: si ya tiene datos en la columna E/teléfono 2 de una combinación anterior. Para resolverlo, establezca un filtro en la fila del encabezado y filtre solo por espacios en blanco. Luego copie y pegue la fórmula solo en las celdas en blanco. Alternativamente, cree una nueva columna de teléfono 2 en F y coloque F2 =IF(A2=A3, D3, E2)

información relacionada