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.