Unir todos los datos de una columna de tabla en una celda sólo para datos iguales

Hola de nuevo nefese.

Querría saber si se podría dar una nueva vuelta de tuerca a una pregunta que te acabo de realizar hoy.

Sobre la base de tu respuesta anterior con la función "concatenarplus". ¿Sería posible que los datos de una columna se concatenen únicamente para cada uno de los datos repetidos de una tercera columna?

Pongo un ejemplo porque sino no se entenderá la pregunta. Los resultados deberían de ser los de la columna E:

A D E

1 aa 1a 1a

2 bb 2b 2b

3 cc

4 dd 3c 3c

5 aa 4d 1a 4d

6 dd 5e 3c 5e

7 aa 6f 1a 4d 6f

8 bb 7g 2b 7g

9 ee

10 ff 8h 8h

Es decir: la columna D contendría los datos a concatenar, la columna A los datos en los que se comprobaría la repetición de registros, y la columna E los registros concatenados.

En la columna E deberían aparecer concatenados para cada fila sólo de los datos de la columna D que corresponden con cada una de las repeticiones de datos de la columna A.

Espero haberme explicado correctamente.

Si la anterior respuesta ya fue de nota, ésta me parece algo inalcanzable.

En cualquier caso, te quedo agradecido por tu atención.

Saludos.

1 respuesta

Respuesta
1

He creado una nueva función que llame CONCATENAR_SI que opera de manera similar a la función de Excel SUMAR. SI es decir

=Concatenar_si(rango a comparar, criterio que debe cumplir, valores que se concatenan cuando el criterio se cumple, separador entre valores)

(El último argumento es opcional)

Con esto claro, te dejo el código

Function concatenar_si(RangoComparacion As Range, criterio As Variant, RangoValores As Range, Optional separador As String)
''Creada por FSerrano en 120322
''para manuguiar en TodoExpertos.com
''Concatena los valores indicados, si se cumple un criterio en el rango especificado
''se puede incluir un caracter de separación entre los valores, por defecto es "" 
If RangoComparacion.Rows.Count <> RangoValores.Rows.Count Then
     a = MsgBox("La longitud de los rangos no coincide", vbCritical,"ERROR")
     Exit Function
Else
     For Each cell In RangoComparacion
         If cell.Value = criterio Then
             concatenar_si = concatenar_si & Cells(cell.Row, RangoValores.Column) & separador
         End If
     Next
     If separador <> "" Then
         concatenar_si = Mid(concatenar_si, 1, Len(concatenar_si) - Len(separador))
     End If
End If
End Function

Pruébalo y me cuentas como te va (yo obtuve resultados exactos).

Perfecto!!!

Gracias nefese, lo has bordado.

Efectivamente, funciona tal y como deseaba.

Casi había renunciado a conseguir hacer lo que te había preguntado, pero ya veo que además de las funciones de excel dominas perfectamente el código vba.

Te quedo enormemente agradecido.

Añade tu respuesta

Haz clic para o