FORMULA di calcolo



  • FORMULA di calcolo
    di Ermes (utente non iscritto) data: 06/12/2014 18:38:49

    Salve ragazzi,

    spero vivamente di riuscire a farvi capire cosa vorrei ottenere in modo automatico dalla formula.
    La mia tabella giusto per capirci è composta in questo modo: 1° cella nome e cognome, 2° cella 1° giorno del mese, 3° cella 2° giorno del mese.... cosi via sino alla fine del mese.
    Alla fine alla cella AE ho ciò che mi interessa calcolare automaticamente, cioè quanti 6° giorni di lavoro sono stati fatti.

    I valori che determinano GIORNATA LAVOTATA sono :
    C, 1, 2, 3, C+, 1+, 2+, 3+, C*, 1*, 2*, 3*, C**, 1**, 2**, 3**, F , DISP e DS
    Non hanno nessuna differenza tra loro al fine del risultato quindi inutile che vi dica a cosa sono riferiti.


    I valori che determinano GIORNATA DI RIPOSO sono:
    RC, RO, RFI e M

    Questi 4 valori, se ne sono presenti ALMENO 2 nella settimana ESCLUDONO il 6° Giorno lavorativo.

    Se nella settimana è presente 1 solo valore tra RC, RO, RFI e M, vuol dire che è una settimana con 6°giorno lavorativo.

    Sostanzialmente quanto appena detto è la formula da applicare mah.... non saprei come.......


    Nell'esempio che riporterò usero 1 per indicare giornata lavorata solo per comodità, ma potrei utilizzare qualsiasi altro valore citato tra le GIORNATE LAVORATE.

    ESEMPI SETTIMANE CON 6° GIORNO:

    1, 1, 1, 1, 1, 1, RO / 1, 1, 1, 1, RO, 1, 1


    ESEMPI SETTIMANA SENZA 6° GIRONO:

    1, 1, 1, 1, M, M, M / 1, 1, RFI, RO, 1, 1, 1 / 1, 1, RO, CR, 1, 1, 1

    Negli esempi con 6° giorno la mia tabella mi darà come risultato 1, negli esempi senza 6° giorno mi darà 0.

    Il 6°giorno si CALCOLA solo "NELLE SETTIMANA" e non tra due settimane

    ESEMPIO

    1, 1, RO, CR, 1, 1, 1 ... 1, 1, 1, RO, CR, 1, 1


    [(RICHIESTA EXTRA)

    Sarebbe la ciliegina sulla torta se... una formula o formattazione condizionale mi evidenziasse un errore nel caso vi fossero 7 giorni di lavoro consecutivi (tra 2 settimane)... ma non vorrei chiedere troppo.

    ESEMPIO

    1, 1, RO, CR, 1, 1, 1 ... 1, 1, 1, 1, RO, CR, 1

    Grazie ]


    Spero di essermi spiegato in modo chiaro e comprensibile...

    Grazie dell'aiuto sin da ora a TUTTI



  • di Mister_x (utente non iscritto) data: 06/12/2014 19:44:14

    ciao

    ti passo una funzione da inserire in un modulo di classe
    PS con le spiegazioni quasi ci siamo, manca un particolare
    batava scrivere che i giorni in questo caso vengono calcolati da 7 a 7 quindi il calcolo bisognava farlo dal giorno 1-7 8-14 15-21 22-28 quindi iniziando da 1 e prendendo in considerazione solo 7 giorni alla volta
    comunque ti riposto il tuo file con allinterno la funzione per questo lavoro come vedrai in colonna a fianco dei tuoi dati
    utilizzo

    AF=cont_sei(B2:AC2) e trascini

    ciao



     
    Option Explicit
    Function Cont_Sei(B_AC As Range) As Long
    Application.Volatile
    Dim Bac As Variant
    Dim Sei, uno, Ciclo As Long
    For Each Bac In B_AC
     Ciclo = Ciclo + 1
     If Bac = 1 Then uno = uno + 1
     If Ciclo = 7 Then
       If uno = 6 Then
          Sei = Sei + 1
       End If
      uno = 0
      Ciclo = 0
     End If
    Next
    Cont_Sei = Sei
    End Function
    






  • di Mister_x (utente non iscritto) data: 06/12/2014 22:11:05

    riciao

    prima ti ho passato una funzione in VBA la quale la puoi espandere a tuo piacimento in quanto avevo scritto la funzione in excel, ma non mi piaceva tanto
    comunque te la propongo per farti capire l'utilizzo anche con le formule e funzioni di excel

    AE2=(CONTA.SE(B2:H2;1)=6)*1+(CONTA.SE(I2:O2;1)=6)*1+(CONTA.SE(P2:V2;1)=6)*1+(CONTA.SE(W2:AC2;1)=6)*1

    questa fa lo stesso lavoro di quella di VBA tenendo in considerazioni 7 celle alla volta pero' fisse se non variabili manualmente mentre in VBA con due clik definisci il Range() dove operare

    ciao

     
    AE2=(CONTA.SE(B2:H2;1)=6)*1+(CONTA.SE(I2:O2;1)=6)*1+(CONTA.SE(P2:V2;1)=6)*1+(CONTA.SE(W2:AC2;1)=6)*1
    
    






  • di Ermes (utente non iscritto) data: 07/12/2014 02:23:14

    Ciao... Premetto che non ho avuto modo di provare.le formule... Ne VBA ne l'altra...

    Mah... Nella seconda noto un piccolo problemino... Che spero non vi sia anche nella prima in vba

    La formula conta quanti 1 sono presenti ogni 7 giorni... E se ce ne sono 6 mi restituisce il valore di 1 mah... Come detto... Io ho usato sempre e solo 1 solo x comodità...

    Potrei trovarmi al posto di 1 ognuno di questi valori.... C, 1, 2, 3, C+, 1+, 2+, 3+, C*, 1*, 2*, 3*, C**, 1**, 2**, 3**, F , DISP e DS

    Secondo me la formula deve lavorare inversamente

    Se ogni 7 giorni ho un solo valore uguale a Ro, RC, RFI o M, mi restituisce 1

    Se.ne ho 2... Uguali tra loro o divers, minrestituisce 0



  • di Ermes (utente non iscritto) data: 07/12/2014 03:12:51

    Non ce l'ho fatta e ho voluto provare.....

    Come immaginavo prendeva solo il servizio 1 e allora ho modificato la tua macro in quel modo....

    Ora prende e calcola tutti i valori... ad eccezzione del 1+, 2*, 3+ e C+

    Mi sai spiegare xcke?
     
    Function Cont_Sei(B_AC As Range) As Long
    Application.Volatile
    Dim Bac As Variant
    Dim Sei, uno, Ciclo As Long
    For Each Bac In B_AC
     Ciclo = Ciclo + 1
     If Bac = 1 Then uno = uno + 1
     If Bac = "1+" Then uno = uno + 1
     If Bac = "1*" Then uno = uno + 1
     If Bac = "1**" Then uno = uno + 1
     If Bac = 2 Then uno = uno + 1
     If Bac = "2+" Then uno = uno + 1
     If Bac = "2*" Then uno = uno + 1
     If Bac = "2**" Then uno = uno + 1
     If Bac = 3 Then uno = uno + 1
     If Bac = "3+" Then uno = uno + 1
     If Bac = "3*" Then uno = uno + 1
     If Bac = "3**" Then uno = uno + 1
     If Bac = "C" Then uno = uno + 1
     If Bac = "C*" Then uno = uno + 1
     If Bac = "C**" Then uno = uno + 1
     If Bac = "C+" Then uno = uno + 1
     If Bac = "F" Then uno = uno + 1
     If Bac = "DISP" Then uno = uno + 1
     If Bac = "DS" Then uno = uno + 1
     If Ciclo = 7 Then
       If uno = 6 Then
          Sei = Sei + 1
       End If
      uno = 0
      Ciclo = 0
     End If
    Next
    Cont_Sei = Sei
    End Function
    



  • di Ermes (utente non iscritto) data: 07/12/2014 11:47:20

    Non riesco a capire xche' tutti i codici funzionino correttamente mentre il C+, 1+, 2+ e 3+ non li prende



  • di Ermes (utente non iscritto) data: 07/12/2014 18:31:13

    Maghi del VBA...

    AIUTOOOOOOOOOOOO



  • di Mister_x (utente non iscritto) data: 07/12/2014 23:52:22

    ciao

    che pastrocchio ai fatto?? bastavano 4 verifiche con And e le righe della programmazione sono sempre 18 e non come le tue 36

    ti ripasso il file modificato nella funzione
    nella funzione scrivero' Diverso perche' come al solito mi taglia la sintassi, nel file e esatta


    ciao

     
    Option Explicit
    Function Cont_Sei(B_AC As Range) As Long
    Application.Volatile
    Dim Bac As Variant
    Dim Sei, uno, Ciclo As Long
    For Each Bac In B_AC
     Ciclo = Ciclo + 1
     If Bac Diverso "RC" And Bac Diverso "RO" And Bac Diverso "RFI" And Bac Diverso "M" Then uno = uno + 1
     If Ciclo = 7 Then
       If uno = 6 Then
          Sei = Sei + 1
       End If
      uno = 0
      Ciclo = 0
     End If
    Next
    Cont_Sei = Sei
    End Function
    






  • di Ermes (utente non iscritto) data: 08/12/2014 01:02:48

    Mister_X....... GRAZIEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE

    Davvero 1000 grazie di cuore....



    Questa notte mi metto a letto con il sorriso sulle labbra