Búsqueda entre 2 fechas un validador Y OTRO CAMPO

Tengo 2 columnas una guarda la fecha del inicio, y la otra gurda la fecha de termino, ademas tengo en la misma hoja una columna que funge como validador. Otro campo de búsqueda es uno llamado UN que esta en la posición i. (HOJA1)

La fecha de inicio esta en el campo AF y la fecha termino AG, el validador esta en el campo CM, y la UN esta en i

Estoy intentando que al ejecutar la macro se busque en hoja2, hoja 3 y hoja 4 todos los coincidentes entre las 2 fechas cuyo validador en hoja 1 sea falso, Y el valor de la columna en i sea igual en la columna D de las 4 hojas, todo dentro de las fechas inicio y termino. Y posteriormente asignar en la columa B de la hoja 2 3 4 el valor de la columna A a los coincidentes

Adjunto algunas fotos

En rojo, el valor a buscar en las hojas 2,3,4 en azul las fechas entre las cuales debe estar contenida todos los resultados.

Esta es la columna validadora, si la columna es TRUE la macro debe ignora estas filas y no debe buscar nada para ellas

Este es el valor a colocar en los resultados de la busqueda en hoja 2,3,4

Esta es la estructura de la Hoja 2,3,4. Donde se debe buscar ente las fechas coincidentes, de la columna G, y el valor de la columna D. Y colocar en C de hoja2, 3,4 el valor de la columna A de hoja1

Espero haberme dado a entender es algo enredado este proceso. Y hasta ahora lo vengo realizando de forma manual, pero la carga de trabajo se ha vuelto insostenible.

1 respuesta

Respuesta
1

Si te parece, enviame una muestra de la Hoja1 y una de las otras que entiendo serán con la misma estructura. Mis correos aparecen en sección Contactos de mi sitio.

Estimada elsa, he enviado un correo.

Saludos.

Qué pena estimado... en la muestra ni hay fechas en las col AF:AG ni valores en CM. Además ningún valor de la col I se encuentra en col D de la segunda hoja ... ;(

¿Podrías enviarme alguna muestra donde me dejes marcados los registros coincidentes?... Solo un par ... como para probar cualquier macro que desarrolle.

Sdos!

se me ha pasado ya te lo envio

El cambio se debió a la copia tratare de adjuntartela correctamente esta vez

Se te olvidó el adjunto ;(

enviado nuevamente

Bien, esta es la macro según modelo enviado.

Sub marcaRegistros()
'x Elsamatilde
Set hoa = Sheets("Hoja1")
Set hob = Sheets("Hoja2")
Application.ScreenUpdating = False
With hob
    .Select
    'quita posibles filtros de Hoja1
    If .FilterMode = True Then .ShowAllData
End With
With hoa
    'quita posibles filtros de Hoja1
    If .FilterMode = True Then .ShowAllData
    'encuentra fin de rango
    x = .Range("A" & Rows.Count).End(xlUp).Row
    .Range("$A$2:$CA$" & x).AutoFilter Field:=79, Criteria1:="<>*TRUE*", Operator:=xlAnd
    'se evalúa si hay registros para analizar
    If .Range("A" & Rows.Count).End(xlUp).Row < 3 Then
        MsgBox "NO hay datos para analizar.", , "Información"
        .ShowAllData
        Exit Sub
    End If
End With
'comienza el proceso desde la hoja 1
hoa.Select
For Each cd In ActiveSheet.Range("A3:A" & x).SpecialCells(xlCellTypeVisible)
    'busca el valor de col I en hoja2 col D
    fec1 = Range("BY" & cd.Row): fec2 = Range("BZ" & cd.Row)
    Set busco = hob.Range("D:D").Find(Trim(Range("I" & cd.Row)), LookIn:=xlValues, lookat:=xlWhole)
    'si lo encuentra revisa las fechas
    If Not busco Is Nothing Then
        y = busco.Row
        Do
        If hob.Range("H" & busco.Row) >= fec1 And hob.Range("H" & busco.Row) <= fec2 Then
            'pasa col A a col C de la hoja2, coloca TRUE en Hoja1 y realiza búsquedas siguientes
            hob.Range("C" & busco.Row) = cd.Value
            'Range("CA" & cd.Row) = "TRUE"          'REVISAR
        End If
        Set busco = hob.Range("D:D").FindNext(busco)
        Loop While Not busco Is Nothing And busco.Row <> y
    End If
    'pasa al reg sgte de la hoja filtrada
Next cd
'quita los filtros
ActiveSheet.ShowAllData
MsgBox "Fin del proceso."
End Sub

Fijate que agregué la línea para colocar TRUE en col del Validador. 

Pero como en un modelo encontré que había más de una coincidencia, y solo una corresponde al rango de fecha (la otra la modifiqué para revisar todas las opciones posibles), inhabilité la línea.

En tu modelo final comprueba que los repetidos siempre estén en el mismo rango de fechas y habilita la línea:

Range("CA" & cd.Row) = "TRUE"          'REVISAR

Sdos y no olvides valorar la respuesta.

https://www.youtube.com/c/ElsaMatilde 

Estimada Elsa muchas gracias por tu invaluable ayuda. Mi más sincero respeto y admiración, tengo 7 días tratando de realizar esto y tu lo has realizado en menos líneas de código que las que yo llevo fallidas.

Como aclaración siempre habrá más de una coincidencia dentro del rango de fechas, si esta fuera del rango de fechas no se puede colocar el valor en la columna A de hoja2 porque el movimiento no pertenece a esa fecha. Aunque el filtro de la columna DE en hoja 2 coincida. No se si me hago entender.

Ahora se coloca el valor del reg de col A (hoja1) en col C de Hoja2 con la instrucción:

hob.Range("C" & busco.Row) = cd.Value

 Así lo interpreté porque la hoja 2 no tenía esos valores. 

Pero si ahora resulta que es al revés, de Hoja1 a Hoja2, hay que hacer otros cambios, que te los comento en el mismo libro.

Sdos!

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas