Condividi:        

Conteggio date in giorni e contare le righe delle date

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

Conteggio date in giorni e contare le righe delle date

Postdi ikwae » 06/10/20 18:58

Ciao a tutti del Forum… Ho dei blocchi di date in colonna C e per ogni blocco applico, con una macro, in colonna L la formula =SE(C1="";"1";C2-C1). Questa formula calcola la differenza di due date poste in colonna C.

Nel dettaglio come visibile sul foglio Demo
(in cella C2) 06/12/2018
(in cella C3) 08/10/2019 (in cella L3) 306

Vorrei anche, se possibile, che sull’ultima cella in ogni blocco oltre al risultato della formula aggiungesse una
stringa “Ritardo ”con un ulteriore calcolo (in questo caso C9) con la data posta in Q1.

Quindi nel dettaglio del primo blocco come visibile sul foglio Demo
(in cella C8) 06/08/2020
(in cella C9) 20/08/2020 (in cella L9) 14 Ritardo 46 … perché (cella Q1) 05/10/2020 – (cella C9) 20/08/2020 = 46

altro esempio per il secondo blocco come visibile sul foglio Demo
(in cella C27) 22/08/2020
(in cella C28) 26/09/2020 (in cella L28) 35 Ritardo 9 … perché (cella Q1) 05/10/2020 – (cella C28) 26/09/2020 = 9

Ho realizzato anche una macro per contare le righe delle date contenti in ogni blocco ma arriva fino a 20 righe
e quindi inutilizzabile per campionature di date superiori a 20 righe.

Quindi da aggiungere, alla macro se possibile, il conteggio di ogni blocco, il numero di ripetizioni delle date e lo scrive in
colonna M sulla stessa riga della coppia di numeri. Se la coppia di numeri non ha righe di data perché non sono mai
state conteggiate scrivere in colonna M (sulla stessa riga) la stringa “Mai Uscito“

Ricapitolando punto per punto la macro di aiuto dovrebbe compiere i seguenti operazioni:
1) Scorrere la colonna L.
2) Scrivere il numero 1 all’inizio di ogni blocco.
3) Scrivere la differenza con la data della riga precedente fino all’ultima cella del blocco.
4) Sull’ultima cella del blocco aggiungere, al numero presente, la stringa “Ritardo ” con i conteggi sopra descritti.
5) Contare le date di ogni singolo blocco e scriverli sulla colonna M sulla stesa riga della coppia di numeri interessati.
6) Se una coppia di numeri non ha date scrivere sulla stessa riga in colonna M la stringa “Mai Uscito”.

In allegato un file con due fogli uno “Demo” che indica la struttura in modo visivo i vari passi su descritti e un foglio “Org” dove eseguire la macro di aiuto appena finita. Il file Org è molto lungo ha altre 250 mila righe e volutamente le coppie di numeri 1 e 3 (riga 68); 49 e 50 (riga 209.433); 88 e 89 (riga 266.386) sono state eliminate le righe delle date per dare modo, alla macro, di svolgere il compito del punto 6. (come visibile in M29 e M42 del foglio Demo).

Note: Le colonne D:K sul foglio Demo sono nascoste per una migliore presa visione.

Ringraziando anticipatamente tutti coloro che mi aiuteranno 73 ikwae.

http://www.filedropper.com/estrazionedataingiornirete
Excel 2007
Avatar utente
ikwae
Utente Senior
 
Post: 309
Iscritto il: 27/12/17 23:14

Sponsor
 

Re: Conteggio date in giorni e contare le righe delle date

Postdi Anthony47 » 07/10/20 20:37

Con tutti i dubbi che sono collegati alle tue richieste, prova:
Codice: Seleziona tutto
Sub IKMore()
Dim wArr, lastA As Long
Dim mArr(), pArr(), iBlk As Long
'
Sheets("Org").Select
lastA = Cells(Rows.Count, 1).End(xlUp).Row
Range("M:M,P:P").ClearContents
wArr = Range("A1").Resize(lastA + 2, 3).Value
ReDim pArr(1 To lastA, 1 To 1)
ReDim mArr(1 To lastA, 1 To 1)
iBlk = 1
If Range("Q1").Value = 0 Then Range("Q1").Value = Date      '?? Se Q1=Vuoto, mette Oggi
For i = 2 To lastA
    If wArr(i + 1, 3) > 0 Then
        If wArr(i - 1, 3) = 0 Then
            If wArr(i, 3) > 0 Then pArr(i, 1) = 1
        Else
            If wArr(i, 3) > 0 Then pArr(i, 1) = CLng(wArr(i, 3) - wArr(i - 1, 3))
        End If
    Else
        If wArr(i + 1, 3) = 0 And wArr(i, 3) > 0 Then
            pArr(i, 1) = CLng(wArr(i, 3) - wArr(i - 1, 3)) & " Ritardo " & CLng(Range("Q1").Value - wArr(i, 3))
        End If
    End If
    If wArr(i, 3) = 0 Then
        mArr(iBlk, 1) = i - iBlk - 1
        iBlk = i
    End If
Next i
Range("M1").Resize(lastA, 1) = mArr
Range("P1").Resize(lastA, 1) = pArr
MsgBox ("Completato...")
End Sub

Fai sapere...
Avatar utente
Anthony47
Moderatore
 
Post: 19222
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Conteggio date in giorni e contare le righe delle date

Postdi ikwae » 08/10/20 02:33

Gentilissimo Anthony :D :D :D e non aggiungo altro…

Ma per il giusto riscontro scrivo le prove eseguite:
1) Per tutta la colonna O ho scritto la Funzione =DATA.DIFF(C2;C3;"d") per la differenza cella sopra e cella sotto
2) Per tutta la colonna Q ho scritto la Funzione =DATA.DIFF(C2;$Q$1;"d") per la differenza cella sotto e cella Q1
quindi in mezzo, ossia la colonna P i risultati della macro e controllando i calcoli è un terno preciso e puntuale.

3) Ho contato a campione una decina di blocchi per il conteggio delle righe delle date ossia i numeri scritti sulla colonna M e sono anche qui giusti, precisi e puntuali.

4)La velocità dell’esecuzione è super istantanea ha già finito ancora prima che il tasto del mouse ritorna al suo posto.

Devo aggiungere che tutti questi dati non sono da leggere scorrendo la pagina ma sono inserite in un ciclo che operano altre macro che vanno a prendere e lavorano i dati che interessano specialmente sulle colonne L e M.

Quindi sono riuscito a capire la data in Q1 e anche spostare la scritta dalla colonna P in colonna L ma non sono riuscito a far scrivere oltre al numero in colonna M una stringa qualunque ho provato a modificare la riga di codice
Range("M1").Resize(lastA, 1) = mArr aggiungendo & “Volte” ma da errore .

Se hai la possibilità di modificare la macro, per la sola colonna M, che oltre al numero scriva qualche cosa tipo “Volte” che
poi io aggiungo con le varie (&) e formulette che servono a far lavorare tutte le mie macro “casarecce” per capire il dato
come sta lavorando e, soprattutto da dove arriva.

Ho capito che è una matrice ma se il “costo” per poter scrive oltre al numero in colonna M anche una stringa è peggiorare la velocità di esecuzione preferisco la stringa al posto della velocità.

Ringraziandoti per il tuo, apprezzato e molto gradito, lavoro aggiungo che tempo fa o pensato che scrivo sul Forum e mi viene sempre concesso l’aiuto chiesto. Quindi “prendo sempre” e pensando di dare qualche cosa tipo il caffè o due spaghetti sui Navigli a Milano che vengono sempre rifiutati mi son messo a fare un programmino, anzi due, per i numeri più frequenti e i numeri più ritardatari sia per il Super Enalotto sia per il lotto per postarli sul Forum per gli appassionati come me di gioco solo a scopo didattico.
Il programma per SE è finito e anche una ruota per il Lotto è finito e si chiama Fretardi. Quello per il Lotto lo voglio ampliare
a tutte le ruote e ho già il “selettore” per commutare gli archivi di ogni singola ruota. Una volta capito il funzionamento devo
modificare le macro "casarecce"di conseguenza. Appena finito lo posto immediatamente sulla Sezione “I Vostri Lavori”.
Cordialmente ikwae
Excel 2007
Avatar utente
ikwae
Utente Senior
 
Post: 309
Iscritto il: 27/12/17 23:14

Re: Conteggio date in giorni e contare le righe delle date

Postdi Anthony47 » 08/10/20 09:52

Per l'aggiunta del testo devi modificare una riga come segue (la velocita' non ne risentira'):
Codice: Seleziona tutto
    If wArr(i, 3) = 0 Then
        mArr(iBlk, 1) = (i - iBlk - 1) & "_Volte"    'MMMM Modificata
'        If (i - iBlk - 1) = 0 Then mArr(iBlk, 1) = "Mai Uscito"
        iBlk = i
    End If

Ti scrivera' in qualche caso "0_Volte", invece che "Mai uscito"; se non va bene allora togli l'Apostrofo che vedi dopo la riga modificata

Quanto all'omaggio per la sezione I Miei Lavori lo pubblicizzero' con piacere; quanto al caffè o ben-altro sui navigli, io non ho mai rifiutato.... Qualche anno fa il venerdi' sera mi avresti trovato spesso al last blast del mio amico Bruno, ora e' un po' piu' problematico far quadrare gli impegni. Ma... mai dire mai
Avatar utente
Anthony47
Moderatore
 
Post: 19222
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Conteggio date in giorni e contare le righe delle date

Postdi ikwae » 08/10/20 13:15

Gentilissimo Anthony :) e non aggiungo altro…

Quindi è completo come da richiesta e, oltre … Nel precedente post ho dimenticato di scrivere che nell’esecuzione della macro e, delle Funzioni, ho notato valori negativi e tantissimi #NUM! e ho scoperto che la matrice che genera le date ha 164 errori tutti inerenti al 2008 ossia la seconda estrazione del 2009 ha come anno il 2008 anziché il 2009 e quindi corretti gli errori è andato tutto a posto.
Dico corretto gli errori ma ho dovuto, come il precedente foglio Org rifarlo tutto di sana pianta e per fare il foglio Org il mio programma impiega dalle ore 19 e rotti fino alle 2-3 del mattino.
Di conseguenza è questo il secondo aiuto che ho scritto da qualche parte sui post quindi come posso e, senza monopolizzare il Forum, farò richiesta per velocizzare la mia macro che ha pochissimi passaggi di operazioni.

Un milione di anni fa, circa, all’uscita della discoteca era abitudine quasi d’obbligo andare al Giardino Pubblico che si trova subito dopo la birreria last blast che probabilmente avrai visto….

Oltre ai ringraziamenti per l’aiuto avuto rinnovo l’invito, come detto tante volte, a te e al tuo Team per una spaghettata o altro di vostro gradimento e sarei veramente felice se stavolta lo accettassi… grazie ancora grazie cordialmente ikwae
Excel 2007
Avatar utente
ikwae
Utente Senior
 
Post: 309
Iscritto il: 27/12/17 23:14


Torna a Applicazioni Office Windows


Topic correlati a "Conteggio date in giorni e contare le righe delle date":


Chi c’è in linea

Visitano il forum: papiriof e 65 ospiti