Comparar dos tipos de fechas en un rango de celdas

Deseo elaborar una macro que compare si el usuario ha viaticado dos veces en la misma fecha

Por ejemplo:

viaticos1: sandra perez   10/01/2016 al 12/01/2016

viaticos2: sandra perez 11/01/2016 al 13/01/2016

En el caso del ejemplo Sandra Perez habría viatiacados doblemente el día 11 y 12 de enero en este caso el programa debería arrojar un aviso que señalara la falla

1 respuesta

Respuesta
1

Me puedes comentar, en cuál columna están los nombres y los lapsos. ¿Siempre empiezan los nombres en la fila 528?

Hola Dante

si el rango es del 528 al 584

lapso fecha 1: columna B

lapso fecha 2: columna C

nombre: columna D

Mil gracias !!!

Te anexo la macro, solamente proporcioname 2 columnas. En esta parte de la macro, cambia la "E" por la columna donde quieres que ponga los avisos; y cambia la "Z" por una columna que tengas disponible, la requiere la macro para realizar unas operaciones.

    c1 = "E"    'columna de avisos
    c2 = "Z"    'columna disponible

La macro completa:

Dim fec1 As New Collection, fec2 As New Collection, reng As New Collection
'
Sub Quien()
'Por.Dante Amor
    ini = 528   'fila inicial de nombres
    c1 = "E"    'columna de avisos
    c2 = "Z"    'columna disponible
    '
    fin = ini
    Do While Cells(fin, "D") <> ""
        fin = fin + 1
    Loop
    If fin > ini Then fin = fin - 1
    '
    Range(c1 & ini & ":" & c1 & fin).ClearContents
    Range("D" & ini - 1 & ":D" & fin).Copy Range(c2 & ini - 1)
    u = Range(c2 & Rows.Count).End(xlUp).Row
    Range(c2 & ini - 1 & ":" & c2 & u).RemoveDuplicates Columns:=1, Header:=xlYes
    '
    For i = ini To Range(c2 & Rows.Count).End(xlUp).Row
        Set fec1 = Nothing
        Set fec2 = Nothing
        Set reng = Nothing
        Set r = Range("D" & ini - 1 & ":D" & u)
        Set b = r.Find(Cells(i, c2), lookat:=xlWhole)
        If Not b Is Nothing Then
            celda = b.Address
            Do
                Call Agregar(b.Row, c1)
                Set b = r.FindNext(b)
            Loop While Not b Is Nothing And b.Address <> celda
        End If
    Next
    '
    Range(c2 & ini - 1 & ":" & c2 & fin).ClearContents
    Set fec1 = Nothing
    Set fec2 = Nothing
    Set reng = Nothing
    Set r = Nothing
    Set b = Nothing
    MsgBox "Comparación Terminada", vbInformation, "VIÁTICOS"
End Sub
'
Sub Agregar(fila, c1)
'Por.Dante Amor
    lap1 = Cells(fila, "B")
    lap2 = Cells(fila, "C")
    For i = 1 To fec1.Count
        For j = lap1 To lap2
            If j >= fec1(i) And j <= fec2(i) Then
                Cells(fila, c1) = "Alerta con la fila " & reng(i)
            End If
        Next
    Next
    Fec1. Add lap1
    Fec2. Add lap2
    Reng. Add fila
End Sub

Sigue las Instrucciones para un botón y ejecutar la macro

  1. Abre tu libro de Excel
  2. Para abrir Vba-macros y poder pegar la macro, Presiona Alt + F11
  3. En el menú elige Insertar / Módulo
  4. En el panel del lado derecho copia la macro
  5. Ahora para crear un botón, puedes hacer lo siguiente:
  6. Inserta una imagen en tu libro, elige del menú Insertar / Imagen / Autoformas
  7. Elige una imagen y con el Mouse, dentro de tu hoja, presiona click y arrastra el Mouse para hacer grande la imagen.
  8. Una vez que insertaste la imagen en tu hoja, dale click derecho dentro de la imagen y selecciona: Tamaño y Propiedades. En la ventana que se abre selecciona la pestaña: Propiedades. Desmarca la opción “Imprimir Objeto”. Presiona “Cerrar”
  9. Vuelve a presionar click derecho dentro de la imagen y ahora selecciona: Asignar macro. Selecciona: Quien
  10. Aceptar.
  11. Para ejecutarla dale click a la imagen.

Sal u dos

Dante mil gracias por tu apoyo, tengo una duda, cuando el programa llega a la siguiente línea

Se salta y no llama al subproceso agregar, y por tal motivo no funciona,,, ¿qué estoy haciendo mal?

Si modificaste la macro, puedes poner la macro modificada para revisarla.

También envíame una imagen de cómo están tus datos.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas