Calcolo Ore Straordinario CCNL Metalmeccanici

Anonimo
2017-02-16T11:22:25+00:00

Buongiorno,

desidererei creare un foglio di calcolo per il conteggio delle ore di straordinario come da tabella seguente:

Per Lavoro non a Turni
a) lavoro straordinario prime due ore 25%
a) lavoro straordinario ore successive 30%
b) notturno fino alle ore 22 20%
b) notturno oltre le ore 22 30%
c) festivo 50%
e) straordinario festivo (oltre le 8 ore) 55%
g) straordinario notturno (prime 2 ore) 50%
g) straordinario notturno (ore successive) 50%
h) notturno festivo 60%
l) straordinario notturno festivo (oltre le 8 ore) 75%

il mio contratto è di 40 ore settimanali per 5 giorni a settimana

magari qualcuno della community ha già un foglio pronto che può condividere con me

grazie

saluti

stefano

Microsoft 365 e Office | Excel | Per la casa | Windows

Domanda bloccata. Questa domanda è stata eseguita dalla community del supporto tecnico Microsoft. È possibile votare se è utile, ma non è possibile aggiungere commenti o risposte o seguire la domanda.

0 commenti Nessun commento

20 risposte

Ordina per: Più utili
  1. Anonimo
    2017-10-27T08:14:44+00:00

    scusa ho dimenticato di inserire due colonne

    TOT Ore

    TOT STR

    Ora Fine TOT Ore TOT STR STR 25%

    grazie

    saluti

    stefano

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2017-10-27T07:13:15+00:00

    Buongiorno Norman,

    grazie mille per il file e l'aiuto

    il file mi da un po di errori

    dom 01/01/2017 lun 02/01/2017 mar 03/01/2017
    Ora inizio 08:00 11:45 08:00
    Ora Fine 18:30 21:45 14:00
    Ore Totale 10:30 10:00 6:00
    OreStraordinario #VALUE! 9,50 #VALUE!
    OreMaggiorazione #VALUE! 14,25 #VALUE!

    sarebbe possibile realizzare un file di questo tipo:

    A B C D E F G H I J K L M N O P Q
    1 Ora inizio Ora Fine Ora inizio Ora Fine Ora inizio Ora Fine STR 25% STR 30% STR 20% STR 30% STR 50% STR 55% STR 50% STR 50% STR 60% STR 75%
    2 01/01/17
    3 02/01/17
    4 03/01/17
    5 04/01/17
    6 05/01/17
    7 06/01/17
    8 07/01/17
    9 08/01/17
    10 09/01/17
    11 10/01/17
    12 11/01/17
    13 12/01/17
    14 13/01/17
    15 14/01/17
    16 15/01/17
    17 16/01/17
    18 17/01/17
    19 18/01/17
    20 19/01/17
    21 20/01/17
    22 21/01/17
    23 22/01/17
    24 23/01/17
    25 24/01/17
    26 25/01/17
    27 26/01/17
    28 27/01/17
    29 28/01/17
    30 29/01/17
    31 30/01/17
    32 31/01/17

    in questo modo possa inserire l'orario di lavoro che faccio ogni giorno e da li calcolare le ore di straordinario che vengono inviate ad un altro foglio per il calcolo della busta paga nella foto sotto

     

    prenditi pure tutto il tempo che vuoi non ho fretta

    grazie mille e buona giornata

    saluti

    stefano

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2017-10-27T05:36:12+00:00

    Ciao Stefano,

    Prova qualcosa del genere:

    • Alt+F11 per aprire l'editor di VBA
    • Alt+IM per inserire un nuovo modulo di codice
    • Nel nuovo modulo vuoto, incolla il seguente codice:

    '=========>>

    Option Explicit

    '--------->>

    Public Function OreStraordinario(Inizio As Date, _

                                     Fine As Date, _

                                     dDate As Date, _

                                     Optional OrePausa As Double = 0.5, _

                                     Optional OreStandard As Long = 8)

        Dim WB As Workbook

        Dim arrFeste As Variant

        Dim Res As Variant

        Dim dOreLavorati, dOreStraordinario As Double

        Dim dOre As Double, dOreStandard As Double, dUplift As Double

        Dim bWeekend As Boolean, bFeste As Boolean

        Dim dOreLavorati2 As Double

        Dim I As Long

        Set WB = ThisWorkbook

        bWeekend = Weekday(dDate, vbMonday) > 5

        arrFeste = WB.Names("Feste").RefersToRange.Value

        For I = 1 To UBound(arrFeste)

            Res = dDate = arrFeste(I, 1)

            If Res Then

                bFeste = True

                Exit For

            End If

        Next I

        If Hour(Fine) > Hour(Inizio) Then

            dOreLavorati = (Fine - Inizio) * 24

        ElseIf Fine > 0 Then

            dOreLavorati = (1 + Fine - Inizio) * 24

        End If

        dOreLavorati = dOreLavorati - Int(dOreLavorati / 8) * 0.5

        If Not bFeste Then

            If bWeekend Then

                dOreStraordinario = dOreLavorati

            Else

                dOre = dOreLavorati - OreStandard

                If dOre > 0 Then

                    dOreStraordinario = dOre

                End If

            End If

        Else

            dOreStraordinario = dOreLavorati

        End If

        OreStraordinario = dOreStraordinario

    End Function

    '--------->>

    Public Function OreMaggiorazioni(Inizio As Date, _

                                     Fine As Date, _

                                     dDate As Date, _

                                     Optional OrePausa As Double = 0.5, _

                                     Optional OreStandard As Long = 8)

        Dim WB As Workbook

        Dim arrFeste As Variant

        Dim Res As Variant

        Dim dOreLavorati, dOreStraordinario As Double

        Dim dOre As Double, dOreStandard As Double, dUplift As Double

        Dim dOreNotturne As Double, dStraordinarioResto As Double

        Dim bWeekend As Boolean, bFeste As Boolean

        Dim dOreLavorati2 As Double

        Dim I As Long

        Set WB = ThisWorkbook

        bWeekend = Weekday(dDate, vbMonday) > 5

        arrFeste = WB.Names("Feste").RefersToRange.Value

        For I = 1 To UBound(arrFeste)

            Res = dDate = arrFeste(I, 1)

            If Res Then

                bFeste = True

                Exit For

            End If

        Next I

        If Hour(Fine) > Hour(Inizio) Then

            dOreLavorati = (Fine - Inizio) * 24

        ElseIf Fine > 0 Then

            dOreLavorati = (1 + Fine - Inizio) * 24

        End If

        dOreLavorati = dOreLavorati - Int(dOreLavorati / 8) * 0.5

        If Not bFeste Then

            If bWeekend Then

                dOreStraordinario = dOreLavorati

            Else

                dOre = dOreLavorati - OreStandard

                If dOre > 0 Then

                    dOreStraordinario = dOre

                End If

            End If

       End If

        If bFeste Then

            Select Case Fine

            Case Is < Inizio    '\ Dopo mezzanotte

                dOreNotturne = Fine * 24

                dStraordinarioResto = dOreLavorati - dOreNotturne

                OreMaggiorazioni = dStraordinarioResto * 1.5 + dOreNotturne * 1.55

            Case Else

                OreMaggiorazioni = dOreLavorati * 1.5

            End Select

        End If

        If Not bFeste Then

            Select Case dOreStraordinario

            Case Is > 2

                OreMaggiorazioni = 2 * 1.25 + (dOreStraordinario - 2) * 1.3

            Case Else

                OreMaggiorazioni = dOreStraordinario * 1.25

            End Select

        End If

    End Function

    '--------->>

    Public Function LunediDiPasqua(year As Long, Optional Orthodox As Boolean) As Date

    '\ Based on Claus Tondering algorithm interpretation.

    '\ See http://www.tondering.dk/claus/cal/node3

    '\ Norman Harker 10-Jul-2004

    '\ https://goo.gl/sGWMfy

        Dim G As Long, C As Long, H As Long

        Dim I As Long, J As Long, L As Long

        Dim EM As Long, ED As Long

        Dim Adj1904 As Long

        Dim AdjJul As Long

        G = year Mod 19

        C = Int(year / 100)

        H = (C - Int(C / 4) - Int((8 * C + 13) / 25) + 19 * G + 15) Mod 30

        If Orthodox = False Then

        I = H - Int(H / 28) * (1 - Int(29 / (H + 1)) * Int((21 - G) / 11))

        J = (year + Int(year / 4) + I + 2 - C + Int(C / 4)) Mod 7

        AdjJul = 0

        End If

        L = I - J

        EM = 3 + Int((L + 40) / 44)

        ED = L + 28 - 31 * Int(EM / 4)

        If ActiveWorkbook.Date1904 = True Then

            Adj1904 = 365 * 4 + 2

        End If

        LunediDiPasqua = DateSerial(year, EM, ED) - Adj1904 + AdjJul + 1

    End Function

    '<<=========

    • Alt+Q per chiudere l'editor di VBA e tornare a Excel
    • Salva il file con l’estensione xlsm

    Per testare questo codice, scarica il mio file di prova Stefano20171027.xlsm

    La formula nella cella B5 è

            =OreStraordinario(B2;B3;B1;0,5 )

    La formula nella cella B6 è

            =OreMaggiorazioni(B2;B3;B1)

    Se tu volessi aggiungere altre condizioni, potrò facilmente modificare il codeice, 

    Nel frattempo,  verifica che i risultati ottenuti siano on acordo con quelli aspettati da te.

    ===

    Regards,

    Norman

    La risposta è stata utile?

    0 commenti Nessun commento
  4. Anonimo
    2017-10-26T09:48:21+00:00

    ciao Norman,

    scusa se rispondo solo adesso ma gli impegni mi hanno distratto dal trovare una soluzione a calcolo dello straordinario

    l'orario convenzionale di lavoro e di 8 ore totali dalle 8.00 alle 17.00 (un ora di pausa) per 5 giorni a settimana (da lun a ven - 40 ore totali a settimana)

    spero che tu abbia ancora il tempo per aiutarmi

    grazie

    saluti

    stefano

    La risposta è stata utile?

    0 commenti Nessun commento
  5. Anonimo
    2017-02-23T18:02:53+00:00

    Buona sera Norman

    l'orario notturno è dalle 18 alle 24 e dalle 00 alle 06 (del giorno dopo)

    grazie

    saluti

    Stefano

    La risposta è stata utile?

    0 commenti Nessun commento