Contestando la cuestión planteada por un lector respecto a la búsqueda de elementos repetidos dentro de un rango de celdas, distribuidos en varias columnas...
Mi primera idea fue plantear la solución con funciones, pero la descarte por la complejidad de la fórmula. Por ese motivo emplee el siguiente código.
Para resolver nuestra cuestión en particular, insertamos el siguiente código dentro de un módulo estándar del explorador de proyectos del Editor de VB:
La idea de la macro de Excel es sencilla, y ya empleada en alguna otra ocasión.
Identificamos una Collection con los nombres únicos de todo el rango, para a continuación ir realizando un conteo con la función COUNTIF (CONTAR.SI), y condicionar su aparición en nuestro listado final al número de veces que se repita.
Aquellos nombres repetidos más de tres veces los cargamos en una Array, desde donde finalmente lo llevamos a la hoja de cálculo.
En la imagen siguiente se ve el efecto final:
Tengo 4 columnas con nombres de personas y quiero extraer los nombres que se repiten 3 o más veces en todas las columnas…[] |
Mi primera idea fue plantear la solución con funciones, pero la descarte por la complejidad de la fórmula. Por ese motivo emplee el siguiente código.
Para resolver nuestra cuestión en particular, insertamos el siguiente código dentro de un módulo estándar del explorador de proyectos del Editor de VB:
Sub Comparacion() Dim Matriz() As String Dim num As Long 'Creamos una colección con los elementos únicos 'para después proceder a su conteo y poder desestimar aquellos que no verifiquen 'las condiciones deseadas... '(en nuestro caso, que se repitan más de tres veces) Set Rng = Range("A1:D6") 'Generamos la colección Set unicos = New Collection 'loop en todas las celdas y agregarlas a la coleccion For Each celda In Rng 'cuando encuentre un item repetido, daría un error 'que salvamos con la instrucción On Error Resume Next On Error Resume Next 'por tanto, nuestra coleccion solo agrega elementos no repetidos unicos.Add celda.Value, CStr(celda.Value) On Error GoTo 0 Next celda 'Preparamos una última matriz con los elementos repetidos num = Int(unicos.Count) ReDim Matriz(1 To num) As String 'y procedemos a la carga de la matriz 'de aquellos elementos repetidos más de tres veces x = 1 For m = 1 To unicos.Count If WorksheetFunction.CountIf(Rng, unicos(m)) >= 3 Then Matriz(x) = unicos(m) x = x + 1 End If Next m 'Retornamos los elementos repetidos a la Hoja de cálculo Range("F1:F" & num).Value = Application.Transpose(Matriz) End Sub
La idea de la macro de Excel es sencilla, y ya empleada en alguna otra ocasión.
Identificamos una Collection con los nombres únicos de todo el rango, para a continuación ir realizando un conteo con la función COUNTIF (CONTAR.SI), y condicionar su aparición en nuestro listado final al número de veces que se repita.
Aquellos nombres repetidos más de tres veces los cargamos en una Array, desde donde finalmente lo llevamos a la hoja de cálculo.
En la imagen siguiente se ve el efecto final:
No hay comentarios:
Publicar un comentario
Nota: solo los miembros de este blog pueden publicar comentarios.