Estructurar tus datos



Si tienes los datos de clientes y animales en tablas separadas, con un campo en común, para importarlos a un fichero Excel en el formato de encabezado doble, puedes hacerlo de forma rápida y automatizable para no tener que copiar y pegar manualmente cada vez, usando Power Query en Excel o usando una macro (VBA).

Si no sabes como hacerlo, a continuación te explicamos como se hace:


OPCIÓN 1: Usar Power Query en Excel (Recomendado)

Power Query está integrado en Excel y es una herramienta muy potente para importar, transformar y combinar datos sin necesidad de macros ni programación compleja

  1. Abre el archivo Excel donde quieres cargar los datos.

  2. Ve a la pestaña Datos > Obtener y transformar datos > Obtener datos > Desde tabla o rango.

  3. Carga la tabla de clientes y la tabla de animales (de tu otro archivo o desde el mismo).

  4. En Power Query:

    • Asegúrate de que ambas tablas estén correctamente cargadas.

    • Fusiona las dos tablas:

      • Selecciona la tabla de clientes.

      • Haz clic en Inicio > Combinar consultas > Combinar.

      • Elige la tabla de animales.

      • Relaciónalas por el Código de cliente.

    • Esto te dará un nuevo conjunto con los datos del cliente y una subtabla con sus animales.

    • Expande esa subtabla para mostrar las columnas que quieras.

    • Transforma los datos en el formato que necesitas:

      • Inserta una marca o símbolo + en el campo código animal para el formato de encabezado doble.

      • Carga el resultado a una hoja de Excel.


Puedes consultar en Google, "Como usar Power Query en Excel" para ampliar información si lo requieres. Encontrarás mucha información disponible.



OPCIÓN 2: Usar una macro (VBA)

Si prefieres, puedes crear un script en VBA.

Por ejemplo, tenemos:

  • Los archivos: Clientes.xls y Animales.xls

  • Las hojas se llaman Clientes y Animales

  • El campo que relaciona ambas es, en animales: CodigoCliente


¿Que hará la macro?

  • Abrir los archivos Clientes.xls y Animales.xls

  • Buscar los datos en las hojas clientes y animales.

  • Para cada cliente:

    • Crear una fila con los datos del cliente.

    • Buscar todos sus animales (según el campo codigoCliente) y agrega una fila con un + en la primera celda

    • Inserta todo en la hoja activa del archivo actual (donde pegues y ejecutes la macro)


vba

                                    Sub UnirClientesYMascotas()
                                    Dim wbClientes As Workbook
                                    Dim wbAnimales As Workbook
                                    Dim wsClientes As Worksheet
                                    Dim wsAnimales As Worksheet
                                    Dim wsDestino As Worksheet
                                    Dim filaDestino As Long
                                    Dim rutaClientes As String
                                    Dim rutaAnimales As String
                                    Dim ultimaFilaClientes As Long
                                    Dim ultimaFilaAnimales As Long
                                    Dim i As Long, j As Long
                                    Dim codigoCliente As String

                                    ' Rutas completas (ajústalas si es necesario)
                                    rutaClientes = Application.GetOpenFilename("Archivos Excel (*.xls), *.xls", , "Selecciona el archivo CLIENTES")
                                    If rutaClientes = "Falso" Then Exit Sub
                                    rutaAnimales = Application.GetOpenFilename("Archivos Excel (*.xls), *.xls", , "Selecciona el archivo ANIMALES")
                                    If rutaAnimales = "Falso" Then Exit Sub

                                    ' Abrir archivos
                                    Set wbClientes = Workbooks.Open(rutaClientes)
                                    Set wsClientes = wbClientes.Sheets("clientes")

                                    Set wbAnimales = Workbooks.Open(rutaAnimales)
                                    Set wsAnimales = wbAnimales.Sheets("animales")

                                    ' Hoja donde pegamos el resultado (la activa en este archivo)
                                    Set wsDestino = ThisWorkbook.ActiveSheet
                                    filaDestino = 1

                                    ' Detectar la última fila en cada hoja
                                    ultimaFilaClientes = wsClientes.Cells(wsClientes.Rows.Count, 1).End(xlUp).Row
                                    ultimaFilaAnimales = wsAnimales.Cells(wsAnimales.Rows.Count, 1).End(xlUp).Row

                                    ' Copiar encabezados del cliente
                                    For i = 1 To wsClientes.Cells(1, Columns.Count).End(xlToLeft).Column
                                    wsDestino.Cells(filaDestino, i + 1).Value = wsClientes.Cells(1, i).Value
                                    Next i

                                    ' Copiar encabezados de animales
                                    For i = 1 To wsAnimales.Cells(1, Columns.Count).End(xlToLeft).Column
                                    wsDestino.Cells(filaDestino + 1, i + 1).Value = wsAnimales.Cells(1, i).Value
                                    Next i

                                    filaDestino = filaDestino + 2 ' Empezamos a poner datos

                                    ' Recorrer cada cliente
                                    For i = 2 To ultimaFilaClientes
                                    ' Copiar datos del cliente
                                    wsDestino.Cells(filaDestino, 1).Value = "" ' Celda vacía (sin +)
                                    For j = 1 To wsClientes.Cells(1, Columns.Count).End(xlToLeft).Column
                                    wsDestino.Cells(filaDestino, j + 1).Value = wsClientes.Cells(i, j).Value
                                    Next j

                                    codigoCliente = wsClientes.Cells(i, 1).Value ' Suponemos que el código del cliente está en la columna 1

                                    filaDestino = filaDestino + 1

                                    ' Buscar las mascotas asociadas
                                    For j = 2 To ultimaFilaAnimales
                                    If wsAnimales.Cells(j, 1).Value = codigoCliente Then
                                    wsDestino.Cells(filaDestino, 1).Value = "+" ' Marca de mascota
                                    For k = 1 To wsAnimales.Cells(1, Columns.Count).End(xlToLeft).Column
                                    wsDestino.Cells(filaDestino, k + 1).Value = wsAnimales.Cells(j, k).Value
                                    Next k
                                    filaDestino = filaDestino + 1
                                    End If
                                    Next j
                                    Next i

                                    ' Cerrar los archivos de origen
                                    wbClientes.Close SaveChanges:=False
                                    wbAnimales.Close SaveChanges:=False

                                    MsgBox "Proceso completado. Los datos se han unido correctamente.", vbInformation

                                    End Sub
                                
  1. Abre tu archivo Excel donde quieres crear la tabla final.

  2. Pulsa Alt + F11 para abrir el editor de Visual Basic.

  3. En el menú izquierdo, haz clic derecho en "VBAProject (TuArchivo.xlsx)" → Insertar → Módulo.

  4. Pega allí todo el código anterior.

  5. Cierra el editor (con la X o Ctrl + Q).

  6. Pulsa Alt + F8, selecciona UnirClientesYMascotas y haz clic en "Ejecutar".

  7. Te pedirá seleccionar el archivo Clientes.xls y luego el archivo Animales.xls.

  8. La tabla combinada se pegará en la hoja actual del archivo abierto.












¿Te ha resultado interesante?
Si tienes cualquier duda, quieres proponernos que escribamos una guía de ayuda o un post sobre algún tema o simplemente quieres charlar con nosotros, no lo dudes. Estamos encantados de hablar contigo y conocer tu opinión.


programa perros





Esta web no utiliza cookies publicitarias ni de marketing. Exclusivamente utiliza las cookies imprescindibles para el funcionamiento de la web.
Consientes con nuestro uso recomendado de cookies de acuerdo con nuestra Política de cookies y Política de privacidad.