
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
Abre el archivo Excel donde quieres cargar los datos.
Ve a la pestaña Datos > Obtener y transformar datos > Obtener datos > Desde tabla o rango.
Carga la tabla de clientes y la tabla de animales (de tu otro archivo o desde el mismo).
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
Abre tu archivo Excel donde quieres crear la tabla final.
Pulsa Alt + F11 para abrir el editor de Visual Basic.
En el menú izquierdo, haz clic derecho en "VBAProject (TuArchivo.xlsx)" → Insertar → Módulo.
Pega allí todo el código anterior.
Cierra el editor (con la X o Ctrl + Q).
Pulsa Alt + F8, selecciona UnirClientesYMascotas y haz clic en "Ejecutar".
Te pedirá seleccionar el archivo Clientes.xls y luego el archivo Animales.xls.
La tabla combinada se pegará en la hoja actual del archivo abierto.