Macro para comparar dos columnas, un dato contra todos los demas datos de la otra columna

Necesito una macro para comparar dos columnas, un dato contra todos los demas datos de la otra columna, asi sucesivamente hasta agotar la lista de la primer columna, y al frente en otra columna decir si ese nombre estaba o no en la segunda colunma

1 respuesta

Respuesta
1

·

Prueba con esta macro.

Sub CompararColumnas()
Dim i, ulfila As Integer
ulfila = Range("A" & Rows.Count).End(xlUp).Row
For i = 2 To ulfila
    If Not Range("D:D").Find(Cells(i, "A")) Is Nothing Then
        Cells(i, "B") = "Está"
    Else
        Cells(i, "B") = "No está"
    End If
Next
End Sub

He supuesto que la primera columna es la A y debe compararse con la D.  Y los resultados se escriben en la columna B.

·

Y es todo, espero que te sirva y lo hayas entendido. SI no es así pregúntame. Y si ya está bien, no olvides puntuar.

¡Gracias! Muchas gracias, por tu respuesta, veo que eres experto, en el tema, así que me gustaría preguntarte otro asunto.

Es que me entregaron una tabla, la A tiene 4000 registros y la B tiene 105000 registros (son diferentes en tamaños) pero tanto la una como la otra en el mismo tema anterior, al ser comparadas uno de los tantos errores al comparar las cadenas, es que están llenas de espacios blancos netre el primer nombre o al pasar al primer apellido, como quito esos blancos en esas cadenas, se que que es con Len(cadena), ¿pero cómo implemento una macro que me quite esos blancos?, Te renuevo mi agradecimiento por la macro anterior

La función ESPACIOS() quita los espacios al principio, final y los duplicados entre medias. Eso si la quieres usar desde Excel.

Con macro selecciona las celdas donde quieres corregiry ejecuta esta macro

Sub QuitarEspaciosSobrantes()
For Each celda In Selection
    celda.Value = WorksheetFunction.Trim(celda)
Next celda
End Sub

Pero por favor, consultas nuevas en preguntas nuevas.

Muy bien, he podido solucionar el problema parcialmente, pero si quisiera marcar con alguno color las cadenas coincidentes (cuando compara una aúna) en la misma macro que me has dado, comoquedaria, es decir que al comparar A y B diga en C "SI" o "NO", pero adicionalmente las cadenas (nombres) de la columna debe quedar marcadas de verde por ejemepo cuando haya un si, y de rojo cuando haya un "No", adicionalmente que las dos columnas a comparar no son iguales, por ejemplo A tiene 4507 registros y B, tiene 10962 registros, comoseria la macro, Profesor, de nuevo le renuevo mi agradecimientos.

Quedaría muy parecida, pero mejor mándame el libro y la dejo ya hecha.

[email protected]

De momento sería esto que compararía y colorearía.

Sub CompararColumnas()
Dim i, ulfilaC As Integer
Worksheets("Consolidado").Select
ulfilaC = Range("C" & Rows.Count).End(xlUp).Row
Range("C2:C" & ulfilaC).Interior.Color = vbWhite
For i = 3 To ulfilaC
    If Not Range("D:D").Find(Cells(i, "C")) Is Nothing Then
        Cells(i, "C").Interior.Color = vbGreen
    Else
        Cells(i, "C").Interior.Color = vbRed
    End If
Next
End Sub

Pero la otra parte no la he entendido.  En la columna F pone EstadoNombre y en la G Estado Celula.  ¿Qué hay que hacer exactamente en ellas?

Te contestaré ya mañana, me voy a dormir.

De acuerdo con el nuevo libro recibido hay que poner estas dos macros:

Sub QuitarEspacios()
'Quita espacios en el rango seleccionado
Dim celda As Range
For Each celda In Selection
    celda.Value = WorksheetFunction.Trim(celda)
Next celda
End Sub
Sub Comparar()
'Compara filas C y E
Dim UlFilaC, a As Integer
Worksheets("Consolidado").Select
UlFilaC = Range("C" & Rows.Count).End(xlUp).Row
Range("B2:C" & UlFilaC).Interior.Color = vbWhite
Range("F2:G" & UlFilaC) = ""
For i = 2 To UlFilaC
    If Not Range("E:E").Find(Cells(i, "C")) Is Nothing Then
        Cells(i, "C").Interior.Color = vbGreen
        Cells(i, "F") = "SI"
    Else
        Cells(i, "C").Interior.Color = vbRed
        Cells(i, "F") = "NO"
    End If
    If Not Range("D:D").Find(Cells(i, "B")) Is Nothing Then
        'Cells(i, "B").Interior.Color = vbGreen
        Cells(i, "G") = "SI"
    Else
        'Cells(i, "C").Interior.Color = vbRed
        Cells(i, "G") = "NO"
    End If
Next
End Sub

Como puedes ver he dejado dos líneas comentadas, asi si quieres puedes colorear la columna B de las celdas sin más que descomentarlas.

Otra cosa que he hecho es crear de nuevo la hoja "CONSOLIDADO" porque tenía pocas celdas pero aparecían millones como que habían sido usadas. He pasado la macro de quitar espacios a las celdas con nombres porque si no las comparaciones no salían bien. En la comparación hecha veo que salen algunos NO en nombre y SI en cédula, eso se debe según he visto en algún caso a que los nombres no están escritos igual las dos veces, he visto un MUÑOZ en una columna y MUNOZ en la otra.

Dentro de un momento te mando el libro.

¡Gracias! Muchísimas gracias por todo profesor es Usted muy formal por todo lo que ha hecho por mi.

Si tiene un libro digital le agradecería

Gracias Gracias

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas