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-27T17:55:54+00:00

    Ciao Stefano,

    norman le pause devo deciderle io

    nel modulo aziendale io devo inserire le ore nei campi

    Ora inizio Ora Fine Ora inizio Ora Fine Ora inizio Ora Fine

    se possibile preferirei che lo str si calcolasse sulle ore che inserisco

    per esempio (tieni conto che ancora non ho capito bene come dividere lo str con le varie percentuali)

    Ora inizio Ora Fine Ora inizio Ora Fine Ora inizio Ora Fine TOT Ore TOT STR STR 25% STR 30% STR 20% STR 30% STR 50% STR 55% STR 50% STR 50% STR 60% STR 75%
    8:00 12:00 13:00 17:00 8,0 8,0 8,0
    7:00 12:00 13:00 18:00 21:00 23:00 12,0 4,0 2,0 2,0
    6:00 13:00 14:00 22:00 15,0 7,0 2,0 5,0

    Mi pare che il traguardo venga spostato oppure, probabilmente sono io che non abbia ben capito il tuo obiettivo ! 

    Ad ogno modo, ignora totalmente il mio suggerimento e invece crea e caricare un semplice file per esemplificare ogni esigenza e dimostrando i risultati desiderati da te.

    ===

    Regards,

    Norman

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2017-10-27T17:14:22+00:00

    norman le pause devo deciderle io

    nel modulo aziendale io devo inserire le ore nei campi

    Ora inizio Ora Fine Ora inizio Ora Fine Ora inizio Ora Fine

    se possibile preferirei che lo str si calcolasse sulle ore che inserisco

    per esempio (tieni conto che ancora non ho capito bene come dividere lo str con le varie percentuali)

    Ora inizio Ora Fine Ora inizio Ora Fine Ora inizio Ora Fine TOT Ore TOT STR STR 25% STR 30% STR 20% STR 30% STR 50% STR 55% STR 50% STR 50% STR 60% STR 75%
    8:00 12:00 13:00 17:00 8,0 8,0 8,0
    7:00 12:00 13:00 18:00 21:00 23:00 12,0 4,0 2,0 2,0
    6:00 13:00 14:00 22:00 15,0 7,0 2,0 5,0

    grazie

    saluti

    stefano

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2017-10-27T16:42:24+00:00

    Ciao Stefano,

    Norman ora che ho riaperto i tuo file gli errori sono scomparsi

    non saprei perchè

    Forse, prima volta, non avevi abilitate le macro.

    per le ore di pausa dipendono dalle esigenze di cantiere

    posso fare due pause di 0,5h ciascuna o di 1h

    posso andare e poi rientrare di notte se mi chiamano

    l'orario è molto variabile ma va sempre a 0,5h

    cioè

    8,00 - 8,30 - 9,00 etc etc

    mai 8,15 o 8,45 o 8,25

    per questo mi servirebbero i tre campi perchè in una giornata posso lavorare un minimo di 8 ore ed un massimo di 16

    Nota che le funzioni già impostano automaticamente due pause di 0,5 ora: una pausa dopo 4 ore del primo turno di 8 ora e una seconda pausa nel caso di un secondo turno di 8 ore,

    Tuttavia, per impostare una seconda pausa dopo 12 ore di lavoro, prova a sostiruire il codice con la seguente leggera modifica:

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

    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 - Round(dOreLavorati / 8.25) * 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

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

    Ho aggiornato il mio file di prova Stefano20171027.xlsm

    ===

    Regards,

    Norman

    La risposta è stata utile?

    0 commenti Nessun commento
  4. Anonimo
    2017-10-27T12:37:15+00:00

    Norman ora che ho riaperto i tuo file gli errori sono scomparsi

    non saprei perchè

    per le ore di pausa dipendono dalle esigenze di cantiere

    posso fare due pause di 0,5h ciascuna o di 1h

    posso andare e poi rientrare di notte se mi chiamano

    l'orario è molto variabile ma va sempre a 0,5h

    cioè

    8,00 - 8,30 - 9,00 etc etc

    mai 8,15 o 8,45 o 8,25

    per questo mi servirebbero i tre campi perchè in una giornata posso lavorare un minimo di 8 ore ed un massimo di 16

    spero di essere stato chiaro

    grazie

    saluti

    La risposta è stata utile?

    0 commenti Nessun commento
  5. Anonimo
    2017-10-27T10:23:46+00:00

    Ciao Stefano,

    grazie mille per il file e l'aiuto

    Prego!

    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!

     Io invece non ho riscontrato nessun problema! Infatti, i tre 'problemi' che hai indicato representano proprio le prime tre esempi del mio file di prova e, come si vede, non ci sono i tuoi errori:

    Pertanto,  ti chiederei gentilmente di caricare la tua versione problematica.                        

    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%

    Si potrebbe creare un file con una qualsivoglia disposizione di dati: basta passare alle funzioni le celle che contengono l'ora di inizio, l'ora di fine e la data. Facoltivemente si puo anche passare valiro per la pausa di mezzogiorno e il numero di standard ore ma, se non precisi queste due argomento, la pausa sarà preso come 0.5 ore e il totale normale di ore verrà preso come 40.

    Ad ogni modo, prima di considerare la modidifica richiesta, vorrei risolvere il mistero dei tuoi problemi.                                                                                    ,                   

    ===

    Regards,

    Norman

    La risposta è stata utile?

    0 commenti Nessun commento