CONCATENAR INFORMACIÓN DE VARIOS REGISTROS DUPLICADOS EN UNA CELDA

Hola a todos, ¿qué tal estáis?: Espero que bien!

Cuando tenemos que incorporar datos de varias columnas o filas en una celda, solemos usar la función concatenar o el ampersand “&“.

Pero esta tarea se dificulta bastante cuando lo que tenemos que concatenar son informaciones de varios rangos vinculadas a registros duplicados (y tenemos gran cantidad de información).

Esto lo entenderéis mejor con un ejemplo visual. Imaginad que tenemos la información de varios empleados de unos grandes almacenes con el idioma y el nivel asociado:

CONCATENAR INFORMACION DE VARIOS REGISTROS DUPLICADOS EN UNA CELDA

Como podéis observar, se han abierto tantos registros como idiomas sepa el empleado (habitual en el uso de bases de datos).

Y lo que queremos conseguir es, por ejemplo, para el primer empleado:

CONCATENAR INFORMACION DE VARIOS REGISTROS DUPLICADOS EN UNA CELDA2.jpg

Efectivamente, debemos pasar los datos de los rangos vinculados a cada empleado y crear una cadena de texto (string) que pueda expresar la información que necesitamos.

Para ello vamos a usar la siguiente macro que he preparado para ayudarnos en esta tarea:

Sub CONCATENAR_DUPLICADOS_EN_CELDA()
'Declaramos las variables
Dim i As Integer, j As Integer
Dim finRes As Integer, finDat As Integer
Dim sCadena As String, Lista As Range, Unicos As Range
'Borramos datos en hoja RESULTADO
finDat = Application.CountA(Sheets("DATOS").Range("A:A"))
If finDat > 0 Then Sheets("RESULTADO").Range("A1:B" & finDat).Clear
'Pasamos registros únicos de nombres a la columna A de hoja RESULTADO
Set Lista = Sheets("DATOS").Range("A1:A" & finDat)
Set Unicos = Sheets("RESULTADO").Range("A1:A" & finDat)
Lista.AdvancedFilter Action:=xlFilterCopy, CopyToRange:=Unicos, Unique:=1
'Indicamos título y negrita para encabezado segunda columna
With Sheets("RESULTADO")
.Cells(1, 2) = "IDIOMAS Y NIVEL"
.Cells(1, 2).Font.Bold = True
End With
'Iniciamos loop por cada registro único
finRes = Application.CountA(Sheets("RESULTADO").Range("A:A"))
With Sheets("DATOS")
For i = 2 To finRes
'Vaciamos la variable sCadena en cada loop
sCadena = vbNullString
'Iniciamos un segundo loop buscando coincidencia de nombre con la hoja datos
'Si existe componemos un string en variable scadena con los datos que deseamos
For j = 2 To finDat
If Sheets("RESULTADO").Cells(i, 1) = .Cells(j, 1) Then sCadena = sCadena & ", " & .Cells(j, 2) & ": Nivel " & .Cells(j, 3)
Next j
'Pasamos los datos de la variable a la hoja RESULTADO
Sheets("RESULTADO").Range("B" & i) = Trim(Mid((sCadena), 2, Len(sCadena)))
Next i
End With
'Mostramos datos y liberamos variables
Sheets("RESULTADO").Select
Set Lista = Nothing
Set Unicos = Nothing
End Sub

El resultado es el siguiente:

CONCATENAR INFORMACION DE VARIOS REGISTROS DUPLICADOS EN UNA CELDA3

Aunque ya lo comento en el código, básicamente lo que hacemos es grabar en la variable “scadena” toda la información relativa a cada empleado mediante dos loop y luego formateamos según nuestras necesidades.

Es un proceso sencillo y estoy seguro que en más de una ocasión os será de utilidad.

Y eso es todo por hoy, saludos y que tengáis un buen fin de semana!!

Descarga el archivo de ejemplo pulsando en: CONCATENAR INFORMACIÓN DE VARIOS REGISTROS DUPLICADOS EN UNA CELDA

 
¿Te ha resultado de interés?, puedes apoyar a Excel Signum con una pequeña donación.

Donate Button with Credit Cards

¡¡Muchas gracias!!

 

Anuncios

Un pensamiento en “CONCATENAR INFORMACIÓN DE VARIOS REGISTROS DUPLICADOS EN UNA CELDA

  1. Pingback: PASAR DATOS DE UNA CADENA DE TEXTO O NUMÉRICA A UN RANGO VARIABLE USANDO MATRICES | EXCEL SIGNUM

¿Te ha gustado?, Realiza un comentario.

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión /  Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión /  Cambiar )

Conectando a %s