Validar registro repetidos Excel Macro

Tengo dos columnas: código y posición.

Por cada código pueden existir varias posiciones. Ejemplo.

Código Posición

1 1

1 2

1 3

1 4... Etc

El detalle es que tengo que validar a través de un botón, si el código con la posición se repite en algún registro del Excel.

Lo que pasa es que cada código tiene por ejemplo 100 posiciones. Entonces durante el año me van enviando las posiciones que quieren que se certifique según el código. Lo que yo quiero evitar es que no me manden posiciones repetidas por cada código.

A veces me mandan en el mes de Enero que certifique la posición 5 del código 1. Y después de 2 meses en marzo me mandan que me certifique la misma posición 5 del código 1. Quiero identificar esos problemas. Y que se me sombreen o me salga un mensaje box las filas repetidas en mi Excel.

1 respuesta

Respuesta
1

Pero tienes en la columna A todas las posiciones que te han enviado.

Es decir, te envía posiciones en enero y las pones en la columna A y B, luego te envían posiciones de febrero, en dónde las pones, en las mismas columnas A y B de la misma hoja donde tienes las de enero, ¿abajo de las de enero?

Te adjunto una imagen: Se repite el amarillo.

Lo que yo hago es adjuntar un archivo de solicitud a mi excel de control, copio y pego los valores según el nombre de los campos. Pero lo que deseo es que antes de que copie y pegue primero deberá validar si algún código y posición ya han registrados anteriormente en mi archivo de control. Que me muestre un mensaje de texto las filas que se están repitiendo en el archivo de solicitud y control.

1. ¿Entonces hay que revisar el archivo 1 contra el archivo 2?

2. ¿En qué columnas está la información en el archivo1 y en qué columnas está en el archivo2?

3. La macro va en el archivo1 y el proceso sería así: la macro te pedirá que selecciones el archivo, después de seleccionar empieza a comparar, en el archivo2 te va a poner en amarillo lo que ya existe en el archivo1. ¿Estás de acuerdo?

Si es correcto hay que revisar el archivo 1 contra el archivo 2.

Las posiciones de las columnas es indiferente ya que lo que tengo que hacer es buscarlo por el nombre de las columnas CÓDIGO Y INTENTAR. Estoy de acuerdo con poner en amarillo los registro repetidos. Gracias

¿En el archivo 1 cómo se llama la columna?

¿En el archivo 2 cómo se llama la columna?

Escribe ambos nombres tal cual se encuentre en los archivos.

Y en cuál hoja se va a buscar, de igual manera, dime cómo se llama la hoja del archivo 1 y cómo se llama la hoja del archivo 2.

Los nombres de los 2 archivos son: código y posición (igualitos).

y el nombre de la hoja seria PxQ (para los dos igualitos)

Son iguales porque es prácticamente el mismo archivo solo que uno se alimenta del otro para registrar la solicitud.

Hay algo que no me queda claro.

Tienes muchos códigos en el archivo 1, ¿esos códigos en cuál columna están?, ¿En tu imagen están en la columna "B" eso es correcto?

Ahora tomo el primer código del archivo 1, en tu ejemplo el primer código es el 1, ese número 1 lo tengo que buscar en el archivo 2, ¿pero no me has dicho en cuál columna del archivo 2 se encuentran los códigos?

Haber te explico:

El archivo 1 es = al archivo 2. Los mismos campos con los mismos nombres existen en el archivo 1 y en el archivo 2. La única diferencia es que el archivo 1 tiene algunas columnas mas, por ejemplo: fecha de solicitud, etc.

Los verdaderos campos que quiero evaluar son los siguientes: Orden de Compra y posición.

Cada orden de compra puede tener mas de una posición: por ejemplo del 1 al 100.

Cuando me llega una solicitud no me va a llegar todas las posiciones (1 al 100). Si no que me enviar por ejemplo. la posición del 1 al 16, después de un mes me envían del 17 al 21 y etc.........

Ahora, al momento de adjuntar el archivo 2 debo validar que no me envíen registros repetidos, es decir:

Si yo tengo una orden de compra: 345 que en total tiene 20 posiciones, y hasta la fecha solo he recibido, en:

Marzo: del 1 al 4

Abril: del 5 al 10

Y el día de hoy recibo del 9 al 15.

Entonces estoy viendo que hay dos repetidos el 9 y 10.

Como te dije no importa en que columna estén porque eso en el futuro puede cambiar de columna. Sería mejor que al abrir el archivo 2 pueda buscar el nombre de la columna Orden de compra y Posición y que lo compare con el Orden de Compra y la Posición del archivo1.

Nota: Los rangos de las posiciones están distribuidas en filas. Solo lo puse en rangos para evitar hacer mas filas.

Otro problema que tengo es este con el mismo archivo1: Continuar el correlativo al copiar datos Excel Macros 

Gracias Dante.

Disculpa, pero necesito conocer los archivos. Envíame el archivo1 y el archivo2 para ver cómo tienes la información.

Mi correo [email protected]

En el asunto del correo escribe tu nombre de usuario “Juan Carlos Pastor Tapara” y el título de esta pregunta.

Lo del correlativo lo dejamos para otra pregunta.

Ya te lo envíe Dante. Gracias

Puedes revisar el correo, no me llegó el archivo

[email protected]

Se había quedado pegado en mi bandeja de salida. Revizalo Please. Gracias

Ya llegó, te anexo la respuesta cuando termine.

Te anexo la macro.

La macro debe ir en el archivo1

La macro marca de amarillo los registros del archivo2 que ya existen en el archivo1.

Sub Comparar()
'Por.Dante Amor
    Set l1 = ThisWorkbook
    Set h1 = l1.ActiveSheet
    '
    Set b = h1.Rows(1).Find("ORDEN DE COMPRA", lookat:=xlWhole)
    If Not b Is Nothing Then
        col1 = b.Column
    Else
        MsgBox "No existe la columna: Orden de compra"
        Exit Sub
    End If
    '
    Set b = h1.Rows(1).Find("POSICION", lookat:=xlWhole)
    If Not b Is Nothing Then
        col2 = b.Column
    Else
        MsgBox "No existe la columna: POSICION"
        Exit Sub
    End If
    '
    With Application.FileDialog(msoFileDialogFilePicker)
        .Title = "Seleccione archivo de excel"
        .Filters.Add "xls.*", "*.xls*"
        .AllowMultiSelect = False
        .InitialFileName = ThisWorkbook.Path & "\"
        If .Show Then
            Set l2 = Workbooks.Open(.SelectedItems.Item(1))
            Set h2 = l2.Sheets(1)
            Set b = h2.Rows(1).Find("ORDEN DE COMPRA", lookat:=xlWhole)
            If Not b Is Nothing Then
                col3 = b.Column
            Else
                MsgBox "No existe la columna en archivo2: Orden de compra"
                Exit Sub
            End If
            '
            Set b = h2.Rows(1).Find("POSICION", lookat:=xlWhole)
            If Not b Is Nothing Then
                col4 = b.Column
            Else
                MsgBox "No existe la columna en archivo2: POSICION"
                Exit Sub
            End If
            '
            For i = 2 To h2.Range("A" & Rows.Count).End(xlUp).Row
                Set r = h1.Columns(col1)
                Set b = r.Find(h2.Cells(i, col3), lookat:=xlWhole)
                If Not b Is Nothing Then
                    ncell = b.Address
                    Do
                        'detalle
                        If h1.Cells(b.Row, col2) = h2.Cells(i, col4) Then
                            h2.Rows(i).Interior.ColorIndex = 6
                        End If
                        Set b = r.FindNext(b)
                    Loop While Not b Is Nothing And b.Address <> ncell
                End If
            Next
        End If
    End With
    MsgBox "Terminado"
End Sub

Saludos.Dante Amor

Recuerda valorar la respuesta.

Ok. Lo probare

Ok. No olvides valorar, como podrás ver es una macro grande, que hacer varias cosas.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas