Macro para impedir registros repetidos considerando dos columnas

Estoy intentando buscar un código que me impida crear valores repetidos considerando dos columnas, es decir,

Yo dispongo de una hoja que se llama registro en donde ingreso datos masivos y con una macro se añaden esos datos a una base de datos que se encuentra en otra hoja

Por ahora me copia todos los datos estén repetidos o no y es lo que no quiero, entonces lo que necesito es que antes de añadir los nuevos ingresos me busque en la columna (A) si el registro existe. Si existe, que compruebe si la columna B ha cambiado y sino ha cambiado que no me lo copie. En caso de que la columna B halla cambiado, que cambie la columna B. Si no existe ningún valor de registro, entonces que lo añada.

2 Respuestas

Respuesta
3

Te dejo el ajuste en tu macro.

Set hojaorigen = Hoja8   'Altas
Set tablaorigen = hojaorigen.ListObjects("AltaLinces")
FilasOrigen = tablaorigen.ListRows.Count
Set hojadatos = Hoja1    'DATOS
Set tabla = hojadatos.ListObjects("LINCEDATOS")
For i = 1 To FilasOrigen
    'buscar la solicitud
    Dim dato, dato2         'asignar el tipo de datos que corresponda
    dato = tablaorigen.ListRows(i).Range(1).Value
    dato2 = tablaorigen.ListRows(i).Range(2).Value
    Set busco = hojadatos.Range("LINCEDATOS[[#All],[Solicitud]]").Find(dato, LookIn:=xlValues, lookat:=xlWhole)
    'si lo encuentra revisa la col B
    If Not busco Is Nothing Then
        If hojadatos.Cells(busco.Row, 2) <> dato2 Then
            'si son diferentes, actualiza la col B
            hojadatos.Cells(busco.Row, 2) = dato2       'CONSULTAR si debe pasar el resto de las celdas también
        End If
    Else
        'si no lo encuentra, crea el registro
        Set NuevaFila = tabla.ListRows.Add
        With tablaorigen.ListRows(i)
            NuevaFila.Range(1) = .Range(1).Value
'a partir de aquí el resto de tus líneas de pase hasta la fila 52
            NuevaFila.Range(53) = .Range(53).Value
        End With
    End If
Next i

Te estoy devolviendo el libro probado y ajustado.

Respuesta

Aquí tienes un ejemplo de código en VBA que puedes utilizar para evitar registros duplicados considerando dos columnas en Excel:

Sub AgregarRegistro()
    Dim wsRegistro As Worksheet
    Dim wsBaseDatos As Worksheet
    Dim registro As Range
    Dim baseDatos As Range
    Dim nuevoRegistro As Range
    Dim duplicado As Boolean
    ' Define las hojas de trabajo
    Set wsRegistro = ThisWorkbook.Sheets("registro")
    Set wsBaseDatos = ThisWorkbook.Sheets("base de datos")
    ' Define el rango de los datos en la hoja de registro
    Set registro = wsRegistro.Range("A2:B" & wsRegistro.Cells(Rows.Count, 1).End(xlUp).Row)
    ' Itera sobre cada registro en la hoja de registro
    For Each nuevoRegistro In registro.Rows
        duplicado = False
        ' Define el rango de búsqueda en la hoja de base de datos
        Set baseDatos = wsBaseDatos.Range("A2:B" & wsBaseDatos.Cells(Rows.Count, 1).End(xlUp).Row)
        ' Busca el registro en la hoja de base de datos
        For Each celda In baseDatos.Rows
            If celda.Cells(1, 1).Value = nuevoRegistro.Cells(1, 1).Value Then
                ' Comprueba si la columna B ha cambiado
                If celda.Cells(1, 2).Value <> nuevoRegistro.Cells(1, 2).Value Then
                    ' Actualiza la columna B en la hoja de base de datos
                    celda.Cells(1, 2).Value = nuevoRegistro.Cells(1, 2).Value
                End If
                duplicado = True
                Exit For
            End If
        Next celda
        ' Si no se encontró el registro, añádelo a la hoja de base de datos
        If Not duplicado Then
            wsBaseDatos.Cells(wsBaseDatos.Cells(Rows.Count, 1).End(xlUp).Row + 1, 1).Resize(1, 2).Value = nuevoRegistro.Value
        End If
    Next nuevoRegistro
    MsgBox "Registros agregados correctamente."
End Sub

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas