Macro solo tenga en cuenta las condiciones en el rango determinado

Para Dante. Amor

En la macro creada, como hacer que solo se tenga en cuenta un rango determinado, en este caso desde la fila 13 (día 1) hasta la fila 43 (día 31) y en las columnas B (00 horas) hasta la Y (23 horas) dentro de la hoja de calculo "DESCANSO". Se ha de tener en cuenta que si la columna A (dia) se encuentra en blanco no se debe tener en cuenta esa fila, dado que ese día no se trabajo.

Aprovechando la pregunta: Dentro de la macro ya creada, como decir (msgbox) en vez de fila, ¿me diga directamente el día al que corresponde el fallo?. Recuerdo que las condiciones (Por separado) son:

Un minimo de 10 horas de descanso (10 celdas en blancos) en cualquier periodo de 24 horas, (Columnas AE-AG) y

77 horas de descanso en un periodo de 7 días. (Columnas AH-AJ)

2 periodos de descanso y uno de ellos como mínimo de 6 horas seguidas (6 celdas en blanco)

Se envía correo con el programa.

1 Respuesta

Respuesta
3

H o l a:

Te anexo la macro con lo siguiente:

  • Para que lea las filas de la 13 a la 43.
  • Para las columnas de la B a la Y.
  • También en el mensaje aparece el número de hora.
  • No considera las celdas que en la columna A estén en blanco.
Private Sub CommandButton2_Click()
'Por.Dante Amor
    Sheets("DESCANSO").Activate
    Set h = Sheets("DESCANSO")
    For i = 13 To 43
        If h.Cells(i, "A").Value <> Empty Then
            cad = ""
            filahora = h.Cells(i, "A")
            If VerificaPer(h, i, "B", "Y") <> 2 Then
                cad = "No hay 2 periodos en blanco" & vbCr
            End If
            If VerificaDia(h, i, "B", "Y") < 10 Then  'verificar 10 días
                cad = cad & "No hay un mínimo de 10 horas" & vbCr
            End If
            If VerificaHor(h, i, "B", "Y") = False Then
                cad = cad & "No hay un mínimo de 6 horas de descanso"
            End If
            '
            If cad <> "" Then
                MsgBox "En la hora: " & filahora & vbCr & cad
            End If
        End If
    Next
End Sub
'
Function VerificaPer(h, i, ini, fin)
'Por.Dante Amor
    ant = "x"       'Cambiar a blanco para no contar la fila vacía
    For j = Columns(ini).Column To Columns(fin).Column
        If h.Cells(i, j) = "" And ant <> "" Then
            tot = tot + 1
        End If
        ant = h.Cells(i, j)
    Next
    VerificaPer = tot
End Function
'
Function VerificaDia(h, i, ini, fin)
'Por.Dante Amor
    VerificaDia = 24 - WorksheetFunction.CountA(h.Range(h.Cells(i, ini), h.Cells(i, fin)))
End Function
'
Function VerificaHor(h, i, ini, fin)
'Por.Dante Amor
    VerificaHor = False
    For j = Columns(ini).Column To Columns(fin).Column
        If h.Cells(i, j) = "" Then
            tot = tot + 1
            If tot > 5 Then
                VerificaHor = True
                Exit For
            End If
        Else
            tot = 0
        End If
    Next
End Function


' : )
'S aludos. Dante Amor. Recuerda valorar la respuesta. G racias
' : )

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas