Condividi:        

Calcolare metri dalla data odierna a ritroso

Vuoi potenziare i tuoi documenti Word? Non sai come si fa una macro in Excel? Devi creare una presentazione in PowerPoint?
Oppure sei passato a OpenOffice e non sei sicuro di come lavorare al meglio?

Moderatori: Anthony47, Flash30005

Calcolare metri dalla data odierna a ritroso

Postdi BG66 » 06/12/20 19:49

Ciao a tutti.
Come d'abitudine mi sono impelagato in qualcosa di più grosso di me.... e Il giro che faccio è arzigogolato.
https://www.dropbox.com/s/g7b1h39cusa3k7g/DICEMBRE_2020_FORUM.xlsm?dl=0
In pratica:
Nella colonna R di "PRODUZIONE" sommo i metri per singolo turno presente nel foglio "forno_T09"
Nella colonna V di "PRODUZIONE" verifico se vi è una cella compilata nella colonna Y di "forno_T09" sempre per singolo turno.

Poi vorrei sommare i metri lavorati dalla data odierna al fino ad incontrare il valore della colonna V diverso da 0.
----------------------------------------------------------------
Alla Data odierna del 06/12/20 il dato atteso dovrebbe essere mt: 123.276
[il valore diverso da vuoto (cella Y6) è presente solamente nel 2° turno del 01/12/20 ]

PS In realtà il cambio è avvenuto nella seconda riga del foglio di lavoro forno_T09 alla cella Y13 quindi andrebbero sottratti anche :
Mt 1753 presenti in N12
Mt 5729 presenti in N13
quindi il valore corretto sarebbe: Mt 115.794

MA è una complicazione ulteriore che non so come gestire.
-------------------------------------------------------------
Alla complicazione precedente si aggiunge anche il fatto che questo file è mensile e quindi dovrei "trascinarmi" il dato nel nuovo file del mese successivo.


Certo della vs. benevolenza in merito alle perversioni dello scrivente... :lol: ..... Attendo fiducioso.

PS Le celle unite nella data giornaliera sono eredità di un file storico e condiviso da molti utenti...se è necessario provo a convincerli per poi splittarle singolarmente.....i files da ritoccare sarebbero 13!!

Gene
BG66
Excel2010
Avatar utente
BG66
Utente Senior
 
Post: 320
Iscritto il: 20/08/16 07:44

Sponsor
 

Re: Calcolare metri dalla data odierna a ritroso

Postdi Anthony47 » 07/12/20 02:14

Ho fatto fatica a capire come sono organizzati i dati, cosa devi calcolare e che cosa hai gia' calcolato (per capire su cosa dovremmo provare ad aiutare); complice anche qualche svista nel tuo testo e soprattutto il valore da calcolare che, da quel che mi sono convinto, non e' 123.276 - 1753 - 5729 ma 123.276 + 4412

Ovviamente non aiuta nel foglio Forno_T09 avere gli addendi e i totali di turno nella stessa colonna, mischiati e senza regola altro che il colore.

Nell'ipotesi che ti interessa calcolare i "metri" dall'ultimo cambio mandini fino all'ultima data con dati compilati, e che il risultato debba essere quello che io ho dedotto e non quello che hai scritto, mi sono rassegnato a scrivere questa succosa Funzione Utente:
Codice: Seleziona tutto
Function Mah(ByRef Turno As Range, ByRef ReCol As Range, ByRef Cambio As Range) As Double
Dim SommaMt As Double, I As Long, J As Long, CArr, mtRan As Range
CArr = Cambio.Value
'
    For I = UBound(CArr) To 1 Step -1
        If CArr(I, 1) <> 0 Then Exit For
    Next I
'Riporto?? Vedi testo
    For J = I To UBound(CArr)
        If Turno.Cells(J, 1).MergeCells = False Then Exit For
    Next J
    Set mtRan = ReCol.Offset(J, 0).Resize(ReCol.Rows.Count - J)
    SommaMt = Application.WorksheetFunction.Sum(mtRan) / 2
    Set mtRan = ReCol.Offset(I, 0).Resize(J - I - 1, 1)
    Debug.Print mtRan.Address
    Mah = SommaMt + Application.WorksheetFunction.Sum(mtRan)
End Function

Va richiamata passandogli:
-l'indirizzo degli elenchi turni sul foglio "Forno_xy"; quindi forno_T09!B5:B655
-l'indirizzo delle celle coi metri lineari; quindi forno_T09!N5:N655
-l'indirizzo delle celle con i "cambi mandrini"; quindi forno_T09!Y5:Y655

Insomma, dovresti usare (coi dati pubblicati) la formula
Codice: Seleziona tutto
=MAH(forno_T09!B5:B655;forno_T09!N5:N655;forno_T09!Y5:Y655)


Quanto al problema del mese successivo, secondo me devi creare da qualche parte un "riporto dal mese precedente", pari ai metri gia' prodotti dopo l'ultimo cambio.
Nell'ipotesi che tu riesca a mettere questo "riporto" subito prima delle celle coi metri lineari del nuovo mese, cioe' in Forno_T09!N4, allora nel codice gia' dato sostituisci la riga 'Riporto? Con queste
Codice: Seleziona tutto
    If I = 0 Then           'Gestione riporto
        If IsNumeric(ReCol.Cells(1, 1).Offset(-1, 0).Value) Then _
           SommaMt = ReCol.Cells(1, 1).Offset(-1, 0).Value
    End If


Spero che "c'azzecchi" col tuo quesito...
Avatar utente
Anthony47
Moderatore
 
Post: 19221
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Calcolare metri dalla data odierna a ritroso

Postdi BG66 » 07/12/20 07:46

Ciao Anthony,
ovviamente hai ragione sul dato atteso. Ho scritto a ritroso e poi vado a sottrarre, partendo dall'alto, quello che non serviva :oops: .

Hai per caso ancora il file fisico su cui hai fatto eventualmente le prove?
Alcuni passaggi della spiegazione non riesco a capirli e la tua traccia mi permetterebbe di seguire meglio il ragionamento.

Grazie se puoi.
Gene
BG66
Excel2010
Avatar utente
BG66
Utente Senior
 
Post: 320
Iscritto il: 20/08/16 07:44

Re: Calcolare metri dalla data odierna a ritroso

Postdi BG66 » 07/12/20 12:45

Ciao ancora.
Con l'aiuto da "casa Marius" sono riuscito ad aggiornare il file.
https://www.dropbox.com/s/g7b1h39cusa3k7g/DICEMBRE_2020_FORUM.xlsm?dl=0

Quello che mi sfugge è il funzionamento ( anzi il mancato funzionamento) del riporto in N4.
In pratica dovrei digitare un valore e questo dovrebbe essere sommato nella cella W2 (quella con la formula MAH).
Giusto?
Se cosi fosse stavo pensando di impostare una userform che all'apertura del file verificasse la presenza di un numero in N4. Se vuota si attiva altrimenti esce dallo script.
Può andare o, a tuo avviso, è un'inutile complicazione aggiuntiva?

Gene
BG66
Excel2010
Avatar utente
BG66
Utente Senior
 
Post: 320
Iscritto il: 20/08/16 07:44

Re: Calcolare metri dalla data odierna a ritroso

Postdi Anthony47 » 07/12/20 13:41

Non ho ancora guardato il tuo file, comunque il codice che ti ho suggerito gia' verifica che in N4 (anzi: nella cella subito prima a quella dichiarata nel richiamo della funzione) ci sia un numero, e se No ignora quella cella:
Codice: Seleziona tutto
If IsNumeric(ReCol.Cells(1, 1).Offset(-1, 0).Value)

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19221
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Calcolare metri dalla data odierna a ritroso

Postdi Anthony47 » 07/12/20 21:16

Non ho capito dove sei arrivato...

Quando provi le cose considera una cosa:
-mentre N5:Nxx, Y5:Yxx e anche B%:Bxx sono parametri della funzione MAH, N4 non lo e'; tecnicamente i "parametri" sono anche i "precedenti" del risultato e ogni volta che ne cambia uno la formula ricalcola il risultato. Con N4 non e' così, quindi quando modifichi N4 il risultato non si ricalcola automaticamente: o modifichi un "precedente" (es N5), o (selezionata la formula) premi F2 e poi Enter, o usi F9 per ricalcolare tutto.
Non mi sembrava una complicazione, vista la staticita' del riporto; ma se lo e', far diventare anche la cella del riporto uno dei parametri della MAH e' un minuto.

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19221
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Calcolare metri dalla data odierna a ritroso

Postdi BG66 » 07/12/20 21:50

Ciao Anthony,
non inorridire ma avevo provato a modificarlo cosi:
Codice: Seleziona tutto
=MAH(forno_T09!B5:B655;forno_T09!N5:N655;forno_T09!Y5:Y655)+forno_T09!N4

In ogni caso mi piacerebbe imparare come:
Anthony47 ha scritto:.... far diventare anche la cella del riporto uno dei parametri della MAH e' un minuto.

Io ho provato cosi ma non è, ovviamente, corretto:
Codice: Seleziona tutto
=MAH(forno_T09!B5:B655;forno_T09!N5:N655;forno_T09!Y5:Y655;forno_T09!N4)


Grazie... per la pazienza!!
Gene
BG66
Excel2010
Avatar utente
BG66
Utente Senior
 
Post: 320
Iscritto il: 20/08/16 07:44

Re: Calcolare metri dalla data odierna a ritroso

Postdi Anthony47 » 08/12/20 00:10

non inorridire ma avevo provato a modificarlo cosi...
Funzionerebbe; ma sarebbe troppo semplice... :D

Se vuoi che il "Riporto" sia un parametro della funzione MAH:
Codice: Seleziona tutto
Function Mah(ByRef Turno As Range, ByRef ReCol As Range, ByRef Cambio As Range, Optional ByRef myRip As Range) As Double
Dim SommaMt As Double, I As Long, J As Long, CArr, mtRan As Range
'
CArr = Cambio.Value
'
    For I = UBound(CArr) To 1 Step -1
        If CArr(I, 1) <> 0 Then Exit For
    Next I
    If Not myRip Is Nothing And I = 0 Then        'Gestione Riporto
        SommaMt = myRip.Value
    End If
    For J = I To UBound(CArr)
        If Turno.Cells(J, 1).MergeCells = False Then Exit For
    Next J
    Set mtRan = ReCol.Offset(J, 0).Resize(ReCol.Rows.Count - J)
    SommaMt = SommaMt + Application.WorksheetFunction.Sum(mtRan) / 2
    Set mtRan = ReCol.Offset(I, 0).Resize(J - I - 1, 1)
    Mah = SommaMt + Application.WorksheetFunction.Sum(mtRan)
End Function

Ora userai:
Codice: Seleziona tutto
=MAH(forno_T09!B5:B655;forno_T09!N5:N655;forno_T09!Y5:Y655;forno_T09!N4)
Il quarto parametro e' la cella del Riporto, che quindi non ha piu' l'obbligo di essere posizionato nella cella subito prima dell'intervallo contenente i metri lineari; comunque e' opzionale, quindi potrebbe essere omesso nella formula.

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19221
Iscritto il: 21/03/06 16:03
Località: Ivrea


Torna a Applicazioni Office Windows


Topic correlati a "Calcolare metri dalla data odierna a ritroso":


Chi c’è in linea

Visitano il forum: papiriof e 61 ospiti