Macro para comprar datos de dos filas en hojas diferentes

En hoja1 en columna I tengo una serie de códigos, los mismos que en hoja2 pero en columna A (estos pueden no estar en la misma ubicación que los de hoja1).

Necesito que compare los datos de hoja1 columna I con los de hoja2 columna A y si son iguales, en columna B hoja2 me ponga el nombre del usuario.

1 respuesta

Respuesta
2

Checa esta macro, en la imagen te pongo el resultado de la comparación

Sub compara_datos()
Set origen = Worksheets("hoja1").Range("a1").CurrentRegion
Set h2 = Worksheets("hoja2")
Set destino = h2.Range("a1").CurrentRegion
With origen
    filas = .Rows.Count
    For i = 1 To filas
        valor = .Cells(i, 1)
        cuenta = WorksheetFunction.CountIf(destino.Columns(1), valor)
        For j = 1 To cuenta
            If j = 1 Then Set busca = destino.Columns(1).Find(valor)
            If j > 1 Then Set busca = destino.Columns(1).FindNext(busca)
               h2.Range(busca.Address).Offset(0, 1) = "nombre de usuario"
        Next j
    Next i
End With
destino.EntireColumn.AutoFit
Set origen = Nothing: Set destino = Nothing
End Sub

No me funciona muy bien, lo adapté de esta manera

Set h1 = Sheets("TRÁMITES").Range("I:I").CurrentRegion
Set h2 = Sheets("CORRESPONDENCIA")
Set aux = h2.Range("A:A").CurrentRegion
Sheets("CORRESPONDENCIA").Select
Range("A2").Select
With h1
    b = .Cells(Rows.Count, "A").End(xlUp).Row
    For i = 2 To b
        valor = .Cells(i, 1)
        cuenta = WorksheetFunction.CountIf(aux.Columns(1), valor)
        For j = 2 To cuenta
            If j = 1 Then Set busca = aux.Columns(1).Find(valor)
            If j > 1 Then Set busca = aux.Columns(1).FindNext(busca)
            h2.Range(buca.Address).Offset(0, 17) = MENSAJERO
            h2.Range(buca.Address).Offset(0, 22) = DateValue(FECHENTREGA)
            h2.Range(buca.Address).Offset(0, 25) = MENSAJERO
        Next j
    Next i
End With

Y este era el que estaba usando solo que me asigna los valores en donde encuentre el mismo solicitante así el código sea diferente

Set aux = h1.Range("I:I")
For i = 2 To h2.Range("A" & Rows.Count).End(xlUp).Row
    Set b = aux.Find(h2.Cells(i, "A"))
    If b Is Nothing And Cells(i, "E") = SOLICITANTE Then
        Cells(i, "R") = MENSAJERO
        Cells(i, "S") = ZONA
        Cells(i, "W") = DateValue(FECHENTREGA)
        Cells(i, "Z") = "ASIGNADO"
    End If
Next

No se si se pueda ajustar lo que le falta al mio

Olvidé mencionar que las columnas de códigos tiene un formato personalizado, ej: LOG-18-001, DIM-18-001, por lo que la macro me identifica el valor 1, necesito que valide el campo como texto, es decir que compare el valor exacto de la celda.

Tienes un error en la macro que modificaste pusiste busca y luego pusiste buca esto te genera resultados diferentes, cuando usas set h1 para nombrar las hojas esta de mas los select, los set h1 y h2 le dicen al excel de donde va a tomar los datos son necesidad de ir a la hoja, ¿me cuesta trabajo entender tu macro puedes subir una pantalla de tu info y el resultado que esperar lograr?.

Esta es la info inicial

Hoja1

Hoja2

Este es el resultado que espero

Este es el formulario que uso para ingresar la info

En la Hoja1 busco el trámite, pero como en la Hoja2 esta columna no existe entonces actualizo la Hoja2 en base a la columna de código que está en las dos hojas. 

Prueba esta macro

Sub buscar_datos()
Set h1 = Worksheets("tramites")
Set h2 = Worksheets("correspondencia")
filas1 = h1.Range("a1").CurrentRegion.Rows.Count
filas2 = h2.Range("a1").CurrentRegion.Rows.Count
Set tramites = h1.Range("a2:ae" & filas1)
Set correspondencia = h2.Range("a2:aa" & filas2)
col1 = Range("j1").Column: col2 = Range("r1").Column
col3 = Range("s1").Column: col4 = Range("w1").Column
col5 = Range("z1").Column
With tramites
    For i = 1 To filas1
        consecutivo = .Cells(i, col1)
        If consecutivo = vbNullString Then GoTo siguiente
        On Error Resume Next
        Set busca = h2.Columns(1).Find(consecutivo)
        If Err.Number = 0 And h2.Cells(i, 5) = "solicitante" Then
        rango = busca.Address
            With h2
                Range(rango).Offset(0, col2 - 1) = "MENSAJERO"
                Range(rango).Offset(0, col3 - 1) = "ZONA"
                Range(rango).Offset(0, col4 - 1) = "FECHENTREGA"
                Range(rango).Offset(0, col5 - 1) = "ASIGNADO"
            End With
            On Error GoTo 0
    End If
siguiente:
    Next i
End With
End Sub

Muchas gracias. Y si quisiera hacer esto mismo pero con libros diferentes que tendría que cambiar?

Tendrías que agregar lo siguiente

set b1=worksheests("nombre libro1")
set b2=worksheests("nombre libro2")
set h1=b1.worksheets("hoja libro 1")
set h2=bi.worksheets("hoja libro 2")
Y después el resto del código

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas