Previous page | 1 | Next page
Facebook  

Seleziona Area e calcola Ritardi

Last Update: 5/25/2019 5:56 PM
Author
Print | Email Notification    
Post: 150
Registered in: 10/3/2015
Location: ALBAREDO PER SAN MARCO
Age: 39
Junior User
2003
OFFLINE
5/20/2019 7:40 PM
 
Modify
 
Delete
 
Quote

Buona sera mi servirebbe una macro che mi calcola i ritardi.Inserisco i 90 numeri nelle colonne nominate "contatore",ho compilato le prime 5 righe manualmente.Come vedete dalla riga 6 l'anno è diverso ,si potrebbe inserire una userform che dice "Seleziona area";in questo esempio (le 5 righe evidenziate in rosso),una volta selezionate la
macro mi riporta i valori nelle colonne nominate (ritarda).Il foglio sarà poi esteso fino alla riga 1.048.576.
Accetto anche formule.Grazie anticipatamente Matteo
Il ForumGP degli Utenti - Finito il GP #2 - Vincono Hard is Ono ed EdoardoAnkie & Friends - L&#...70 pt.6/16/2019 10:42 PM by anklelock89
Maria Leitner a TG2 MotoriTELEGIORNALISTE FANS FORU...42 pt.6/16/2019 10:56 PM by CarliniCarlo
...l’ultima ora...” cosa signi-? 1 Giovanni 2:18 “Testimoni di Geova Online...29 pt.6/16/2019 10:29 PM by Angelo Serafino53
Post: 1,255
Registered in: 6/27/2011
Veteran User
excel 2007
OFFLINE
5/20/2019 9:51 PM
 
Modify
 
Delete
 
Quote

ciao a tutti [SM=x423028]

ciao Matteo,
lo ammetto: dal tuo file, non ho capito cosa vuoi fare!

nel tuo esempio, i numeri che hai messo nelle colonne "ritarda",
gli hai messi a capocchia, o hanno un citerio?

quale se ce l'hanno?

Con quale criterio le celle rosse dovrebbero essere riportate
nelle colonne "ritarda"?

Devono essere trasposte?

Se sì, non sarebbe meglio fare entrambe le tabelle nello stesso
verso ed evitare la trasposizione?
(orizzontale-orizzontale o verticale-verticale)

Spiega meglio ed allega un file con esempio a mano, ma reale.

ciao
Frank
[Edited by tanimon 5/20/2019 9:52 PM]
Excel 2007

1 - Per "prodotti finiti", ricordo l'esistenza di apposite Software House a pagamento. Questo è un Forum
2 per cortesia, leggi questa e questa discussione.
3 - allega SUL FORUM un file di esempio, chi ti vuole aiutare risparmia tempo, e tu forse hai una soluzione prima di quello che ti aspetti :-)
Usa siti di hosting SOLO in estrema necessità: in caso il server del forum abbia problemi.
4 - Ricordati di condividere le soluzioni che trovi da solo: potrebbero essere utili anche per le persone a cui chiedi aiuto.
Post: 3,384
Registered in: 4/3/2013
Master User
Excel 2000 - 2013
OFFLINE
5/20/2019 11:10 PM
 
Modify
 
Delete
 
Quote

Buona sera a tutti;
a mio modesto parere il vero problema é:

@gattodimarmo1980, scrive:

... Il foglio sarà poi esteso fino alla riga 1.048.576 ...



Matteo, considera che dopo i 1.500 ÷ 2.000 Record, senza esitare, scelgo ACCESS; oltre questo limite i tempi di esecuzione sono una sofferenza.

Voglio dire, utilizzare Excel con una tale mole di Dati sarebbe come pretendere di arare un campo con una Macchina di F1 o di partecipare ad un GP di F1 con ... un trattore.

Ogni applicazione ha i propri limiti; è importante scegliere l'applicazione più idonea per gestire la quantità di Dati da valutare.

Poi, ovviamente vedi tu come procedere.



Buona serata.

Giuseppe

Windows XP - Excel 2000
Windows 10 - Excel 2013
Post: 150
Registered in: 10/3/2015
Location: ALBAREDO PER SAN MARCO
Age: 39
Junior User
2003
OFFLINE
5/21/2019 7:37 AM
 
Modify
 
Delete
 
Quote

Ciao Tanimon i numeri che ha messo nelle colonne "ritarda"hanno un criterio.Ciao Giuseppe va bene anche 1.500 ÷ 2.000 Record,riallego il foglio,ho compilato manualmente il contatore per tutti i numeri che ho nelle prime tre righe.Esempio ;Riga 2 il numero 42 manca da 1 estrazione perciò 1,il numero 11 manca da 1 estrazione perciò 1 il numero 80 manca da 1 estrazione perciò 1il numero 35 manca da 1 estrazione.Numero 63 valore 0 siccome è uscito nella riga 1.Riallego il foglio spero di essere stato chiaro ,va bene anche una formula.A disposione Matteo.Buona giornata
Post: 3,388
Registered in: 4/3/2013
Master User
Excel 2000 - 2013
OFFLINE
5/22/2019 7:31 AM
 
Modify
 
Delete
 
Quote

Buona giornata, Matteo;
se hai dei numeri che si ripetono come ti comporti?

Voglio dire in una ipotetica situazione del tipo riportata nell'immagine in allegato, considerando di analizzare solo il numeri 45 e 71, la risposta che ti aspetteresti è quella riportata in "Risultati attesi"?



Buon Lavoro.

Giuseppe

Windows XP - Excel 2000
Windows 10 - Excel 2013
Post: 5,678
Registered in: 11/14/2004
Master User
Versione Excel
ONLINE
5/22/2019 8:05 AM
 
Modify
 
Delete
 
Quote

Ritardi
Ciao Giuseppe, si tratta del Lotto, per ritardo e ce ne sono 2 indica da quante estrazioni non esce un numero da 1 a 90 e sarebbe quello "Ritardo attuale" cioè esempio il 15 non esce da 5 estrazioni, il "Ritardo storico" si intende qual'è stato il massimo ritardo dell'uscita del numero, cioè in 1000 estrazioni il massimo ritardo del numero 15 sarà stato 22 estrazioni che non è uscito.

l'ho detto per farti capire il concetto, nella tua tabella il 71 ha un ritardo di 3 colpi, il 45 di 4 colpi(estrazioni), vedendo le date ordine decrescente

mentre il ritardo storico sempre riferito alla tabella del 71 e di 4 colpi dal 17/1 al 27/1, mi sono fatto ingannare dalle date che sono in ordine decrescente, l'altra dal 13/1 al 17/1 e soltanto di 1 colpo.

Ciao By Sal [SM=x423051]

Excel 2013

Iscriviti al nuovo sito che ho aperto troverai altre RISPOSTE

https://www.bysal-excel.it
Post: 3,389
Registered in: 4/3/2013
Master User
Excel 2000 - 2013
OFFLINE
5/22/2019 8:38 AM
 
Modify
 
Delete
 
Quote

Buona giornata, Sal;
grazie della tua attenzione.

In realtà avevo provato ad analizzare i ritardi nelle varie Date, vedi immagine in allegato; mi auguravo non fosse quello che desiderava ottenere Matteo, già ci vuole una vita per analizzare i ritardi del valore dell'ultima estrazione rispetto alla penultima estrazione, poi, se si vogliono analizzare tutti i ritardi credo sia improponibile l'analisi.



A disposizione.

Giuseppe

Windows XP - Excel 2000
Windows 10 - Excel 2013
Post: 5,679
Registered in: 11/14/2004
Master User
Versione Excel
ONLINE
5/22/2019 8:52 AM
 
Modify
 
Delete
 
Quote

Ritardi
Ciao Giuseppe, non è cosi improponibile, in tutto sono 2 cicli for, visto che le estrazioni possono essere di 5 o più numeri dipende dal gioco tipo 10elotto che sono 20 numeri estratti ed ogni numero è presente 1 sola volta nell'estrazione.

il primo ciclo di 90 numeri confronta nel secondo ciclo Estrazioni con un Conta.se se è presente il numero e passa alla successiva estrazione, alla fine delle estrazioni contando le uscite ed i ritardi si ha il risultato di quel numero e si passa al successivo numero fino a 90.

vedo se riesco a trovare una macro per i ritardi

Ciao By Sal [SM=x423051]



Excel 2013

Iscriviti al nuovo sito che ho aperto troverai altre RISPOSTE

https://www.bysal-excel.it
Post: 3,390
Registered in: 4/3/2013
Master User
Excel 2000 - 2013
OFFLINE
5/22/2019 9:11 AM
 
Modify
 
Delete
 
Quote

Buona giornata, Sal;
molto probabilmente mi sono "incartato io".
Ho previsto più Cicli For Next che analizzano il numeo estratto con lo stesso numero estratto precedentemente ma non necessariamente nella stessa Colonna e, visti i tempi di elaborazione su 300 Record, ho preferito desistere; ripeto, molto probabilmente ho impostato il Codice VBA in modo errato.


A disposizione.

Giuseppe

Windows XP - Excel 2000
Windows 10 - Excel 2013
Post: 5,680
Registered in: 11/14/2004
Master User
Versione Excel
ONLINE
5/22/2019 10:18 AM
 
Modify
 
Delete
 
Quote

Ritardi
Ciao Giuseppe ecco la macro

Sub RitardiSA()
Dim Rs, Ra, r, c, rng, x, y, d, n

Range("Z2:AA37").ClearContents
For x = 1 To 36
    For y = 1 To Cells(Rows.Count, 1).End(xlUp).Row
        Set rng = Range(Cells(y, 3), Cells(y, 7))
        n = WorksheetFunction.CountIf(rng, x)
        If n >= 1 Then
            Ra = 0
        Else
            Ra = Ra + 1
        End If
        If Rs < Ra Then Rs = Ra
    Next y
    Cells(x + 1, 26) = Rs
    Cells(x + 1, 27) = Ra
    Ra = 0
    Rs = 0
Next x
End Sub


questa è una vecchia macro ma per 36 numeri basta mettere 90 al posto di 36, è un altro tipo di lotteria a 36 numeri.

come vedi esamina un estrazione alla volta con

Set rng = Range(Cells(y, 3), Cells(y, 7))

e sotto fa il conta.se, rs = ritardo storico, ra = ritardo attuale.

Ciao By Sal [SM=x423051]

[Edited by by sal 5/22/2019 10:20 AM]
Excel 2013

Iscriviti al nuovo sito che ho aperto troverai altre RISPOSTE

https://www.bysal-excel.it
Post: 3,391
Registered in: 4/3/2013
Master User
Excel 2000 - 2013
OFFLINE
5/22/2019 12:11 PM
 
Modify
 
Delete
 
Quote

Buon pomeriggio, Sal;
mi rendo conto che io e il lotto non abbiamo un buon rapporto.

Mi auguro che Matteo possa apprezzare il tuo supporto; io non sarei mai stato in grado di pensare ad una soluzione analoga alla tua.




A disposizione.

Giuseppe

Windows XP - Excel 2000
Windows 10 - Excel 2013
Post: 151
Registered in: 10/3/2015
Location: ALBAREDO PER SAN MARCO
Age: 39
Junior User
2003
OFFLINE
5/22/2019 11:09 PM
 
Modify
 
Delete
 
Quote


Ciao Giuseppe, ciao Sal vi ringrazio subito ma non ho risolto la discussione, per GiuseppeMn interessante il tuo quinto e settimo post
"Risultati attesi"aprirò brevemente un altra discussione simile,la logica più o meno è quella dopo spiegherò il perchè non posso farlo ora.Per Sal allego il foglio con dati nuovi,ho ordinato le righe in modo crescente per le date,ho ordinato i numeri per ordine in modo crescente,ho modificato il range, ho eliminato il contatore ecc. ecc.
ho modificato il codice da 36 a 90 ma quando digito la macro ho sbagliato sicuramente io qualcosa.Le macro non le so leggere come voi,sto imparando piano piano ci vogliono secoli per arrivare ai vostri livelli,potete correggermi l'errore.A disposizione Matteo
Post: 1,257
Registered in: 6/27/2011
Veteran User
excel 2007
OFFLINE
5/23/2019 12:44 AM
 
Modify
 
Delete
 
Quote

ciao a tutti [SM=x423028]

ciao Sal, Giuseppe e Matteo,
azz, sono arrivato tardi e Matteo ha cambiato la struttura del file.

Credo che quello che cercasse con il suo file al post #4,
sia nel file che allego.

Di seguito la macro.
Spero di non avere lasciato dei refusi.

ciao
Frank

vb
Option Explicit
Sub ritardi()
Dim rng_estrazione As Range, rng_tabellone As Range
Dim rng_ritardi As Range, cella As Range, rng_risultati As Range

Dim c_estrazione As Object, tabellone As Object
Dim ritardo As Integer
Dim ur As Long, c As Long, r As Long
 
ur = Cells(Rows.Count, "d").End(xlUp).Row

Set rng_tabellone = Uni0n(Range("i2:i21"), Range("k2:k21"), _
    Range("m2:m21"), Range("o2:o21"), Range("q2:q21"))
Set rng_risultati = Uni0n(Range("j2:j21"), Range("l2:l21"), _
    Range("n2:n21"), Range("p2:p21"), Range("r2:r21"))
    
Set rng_ritardi = Range("c2:h" & ur)
Set rng_estrazione = Range("d1:h1")

Application.ScreenUpdating = False

rng_risultati.ClearContents

For Each cella In rng_ritardi
    If IsNumeric(cella.Value) = False Then
    Else
        Set c_estrazione = rng_estrazione.Find(cella.Value, LookIn:=xlValues, lookat:=xlWhole)
        If Not c_estrazione Is Nothing Then
            ritardo = 0
        Else
            ritardo = cella.Row - 1
        End If
       
    
        Set tabellone = rng_tabellone.Find(cella.Value, LookIn:=xlValues, lookat:=xlWhole)
        r = tabellone.Row
        c = tabellone.Column
        If Cells(r, c + 1).Value <> "" Then
        Else
            Cells(r, c + 1).Value = ritardo
        End If
    End If
Next cella
Application.ScreenUpdating = True

Set c_estrazione = Nothing
Set tabellone = Nothing
Set rng_ritardi = Nothing
Set rng_estrazione = Nothing
Set rng_tabellone = Nothing
Set rng_risultati = Nothing
End Sub


[Edited by tanimon 5/23/2019 1:14 AM]
Excel 2007

1 - Per "prodotti finiti", ricordo l'esistenza di apposite Software House a pagamento. Questo è un Forum
2 per cortesia, leggi questa e questa discussione.
3 - allega SUL FORUM un file di esempio, chi ti vuole aiutare risparmia tempo, e tu forse hai una soluzione prima di quello che ti aspetti :-)
Usa siti di hosting SOLO in estrema necessità: in caso il server del forum abbia problemi.
4 - Ricordati di condividere le soluzioni che trovi da solo: potrebbero essere utili anche per le persone a cui chiedi aiuto.
Post: 3,392
Registered in: 4/3/2013
Master User
Excel 2000 - 2013
OFFLINE
5/23/2019 7:30 AM
 
Modify
 
Delete
 
Quote

Buona giornata, a Tutti.

Matteo, mi sembra che i risultati attesi siano quelli proposti da @tanimon; o mi sbaglio?

Sal, ho provato a testare il tuo Codice VBA ma, sicuramente a causa dei miei limiti, non sono riuscito a comprendere la logica del risultato dell'elaborazione

Frank, devo studiarmi il tuo Codice VBA, l'elaborazione mi sembra molto veloce e il risulato conforme a quello che mi sarei apettato; l'unica cosa, avrei preferito avere le "estrazioni" in ordine decrescente in modo da poter aggiungere le prossime estrazioni senza difficoltà, ma questo è solo un dettaglio.



A disposizione.

Giuseppe

Windows XP - Excel 2000
Windows 10 - Excel 2013
Post: 5,681
Registered in: 11/14/2004
Master User
Versione Excel
ONLINE
5/23/2019 8:23 AM
 
Modify
 
Delete
 
Quote

Ritardi
Ciao Matteo, ecco il file, per non farti scorrere tutto l'elenco dei 90 numeri li ho raggruppati per 10, all'elenco delle estrazioni puoi inserirne quante ne vuoi, ma ricorda che i dati vanno in ordine di data l'ultima è in basso, altrimenti devo far funzionare la macro al contrario, perche non porterebbe i dati corretti.

Noti subito che i numeri dell'ultima estrazione come Rit.Attuale è 0zero.

la freccia rossa pulisce e quella verde pulisce e ti da i risultati.

Ciao Giuseppe, la logica per i ritardi è questa ed è quello che fa la macro.

il primo ciclo la x prende da 1 a 90 questo è assodato
il secondo ciclo scorre le estrazioni mette in un range tutti i 5 numeri per usare il Conta.se(), ora se il numero di x è presente nei 5 numeri, n diventa 1.
La parte importante è proprio questa

        If n >= 1 Then
            Ra = 0
        Else
            Ra = Ra + 1
        End If
        If Rs < Ra Then Rs = Ra


che dice se n>0 allora il numero è uscito e quindi il Ra=Ritardo attuale è uguale a 0zero se non è uscito allora Ra si incrementa di 1 fino a trovare una nuova uscita, scorrendo le estrazioni, quindi Ra torna a 0zero

dopo endif ogni volta controlla se Rs=Ritardo storico e minore di Ra al primo passaggio quindi Ra che è a 0 prende 1 se è uscito il numero e cosi di seguito ammettendo che Ra sia superiore a Rs allora vuole dire che è aumentato il Ritardo storico e quindi Rs diventa Ra

il prossimo passo scrive i ritardi nelle 2 celle.

essendo pochi i dati la risposta è quasi immediata, ho l'archivio dal 1945 e sono circa 5800 estrazioni, ma ci sono archivi dalla fine dell'800

quando l'archivio è grande, uso gli Array e faccio tutto il lavoro in memoria trascrivendo solo i risultati finali, il tempo in questo caso si riduce notevolmente.

allego il file

Ciao By Sal [SM=x423051]

[Edited by by sal 5/23/2019 8:28 AM]
Excel 2013

Iscriviti al nuovo sito che ho aperto troverai altre RISPOSTE

https://www.bysal-excel.it
Post: 3,394
Registered in: 4/3/2013
Master User
Excel 2000 - 2013
OFFLINE
5/23/2019 9:12 AM
 
Modify
 
Delete
 
Quote

Buona giornata, Sal.

Grazie della tua spiegazione, adesso è più chiaro il risultato del tuo Codice VBA.

Adesso devo solo studiare per bene il tuo Codice VBA.




A disposizione.

Giuseppe

Windows XP - Excel 2000
Windows 10 - Excel 2013
Post: 152
Registered in: 10/3/2015
Location: ALBAREDO PER SAN MARCO
Age: 39
Junior User
2003
OFFLINE
5/23/2019 10:47 PM
 
Modify
 
Delete
 
Quote

Riscontro perfetto
Ringrazio tre professionisti del Vba .Bellissimi tutte due i codici.
La macro di Tanimon permette di mettere le righe sia in ordine crescente che decrescente ottenendo lo stesso risultato.Grazie buona serata
Post: 1,258
Registered in: 6/27/2011
Veteran User
excel 2007
OFFLINE
5/23/2019 11:22 PM
 
Modify
 
Delete
 
Quote

Re: Riscontro perfetto
Ciao a tutti [SM=x423028]

ciao Sal, Giuseppe e Matteo.


Grazie del riscontro positivo ed alla prossima.

Ciao
Frank
[Edited by tanimon 5/23/2019 11:38 PM]
Excel 2007

1 - Per "prodotti finiti", ricordo l'esistenza di apposite Software House a pagamento. Questo è un Forum
2 per cortesia, leggi questa e questa discussione.
3 - allega SUL FORUM un file di esempio, chi ti vuole aiutare risparmia tempo, e tu forse hai una soluzione prima di quello che ti aspetti :-)
Usa siti di hosting SOLO in estrema necessità: in caso il server del forum abbia problemi.
4 - Ricordati di condividere le soluzioni che trovi da solo: potrebbero essere utili anche per le persone a cui chiedi aiuto.
Post: 3,395
Registered in: 4/3/2013
Master User
Excel 2000 - 2013
OFFLINE
5/24/2019 6:48 AM
 
Modify
 
Delete
 
Quote

Buona giornata a Tutti;

@gattodimarmo1980

... La macro di Tanimon permette di mettere le righe sia in ordine crescente che decrescente ottenendo lo stesso risultato. ...


Perdonami Matteo ma temo non sia proprio così; le ottime soluzioni proposte da Sal e Frank funzionano egregiamente con l'ordinamento delle date in forma decrescente; con l'ordinamento crescente credo proprio si debba pensare ad una soluzione diversa.

Sinceramente non ho condotto test approfonditi, sai che il mio interesse per il lotto, in una scala da 1 a 100, è uguale a 0 (Zero).

Solo per curiosità proverò a pensare ad un Codice VBA per la serie di date con ordinamento decrescente (dalla meno recente alla più recente che consentirebbe di aggiungere nuove estrazioni senza dover eseguire tutte le volte un nuovo ordinamento), non credo sia una cosa molto semplice.
Voglio dire, nei Codice VBA proposti, mi sembra di capire che il Range di ricerca sia determinato da:

 Set Rng_ritardi = Range("C2:H" & Ur) 

nel Codice VBA proposto da @tanimon oppure da:

 Set rng = Range(Cells(y, 4), Cells(y, 8)) 

nel Codice VBA proposto da @by sal

Nel Codice VBA a cui posso pensare la presenza di ogni numero estratto, partendo dall'ultima cinquina, escludendo i numeri già valutati, dovrà essere verificato con i numeri estratti nella cinquina precedente fino al riscontro della corrispondenza.

Quindi, la verifica della corrispondenza dovrebbere essere esguita su;

 Range(Cells(w -1, 4), Cells(w -1, 8)) 

dove "w" è un Ciclo definito da.

 For w = Ur - 1 To 1 Step -1 

Questo ciclo andrebbe eseguito tante volte fino alla verifica di un riscontro valido; numero da valutare presente nella cinquina selezionata.
Ovviamente il tempo di elaborazione si allungherebbe in modo esponenziale in funzione del numero di estrazioni da valutare.
Magari ci sarà una verifica meno impegnativa in termini di tempo di elaborazione ma, in questo momento, mi sfugge.

Magari mi sbaglio, ma questo è quanto ho ritenuto di dover partecipare a beneficio degli Utenti di Forum interessati a questa Discussione.



A disposizione.

Giuseppe

Windows XP - Excel 2000
Windows 10 - Excel 2013
Post: 5,683
Registered in: 11/14/2004
Master User
Versione Excel
ONLINE
5/24/2019 7:23 AM
 
Modify
 
Delete
 
Quote

Ritardi
Ciao a tutti, con le date invertite, bisogna solo invertire il secondo ciclo delle estrazioni come ha proposto Giuseppe qui

For w = Ur To 1 Step -1


ho tolto il "-1" dopo Ur in quanto deve considerare anche l'ultima riga delle estrazioni

si potrebbe anche fare un automatismo che riconosca le date se sono in ordine crescente o decrescente del tipo

if cells(1,1) > cells(2,1) then 
    For w = Ur To 1 Step -1
else
    For w = 1 To Ur
endif


scritta al volo dovrebbe funzionare.

Ciao By Sal [SM=x423051]

[Edited by by sal 5/24/2019 7:24 AM]
Excel 2013

Iscriviti al nuovo sito che ho aperto troverai altre RISPOSTE

https://www.bysal-excel.it
Post: 5,684
Registered in: 11/14/2004
Master User
Versione Excel
ONLINE
5/24/2019 7:45 AM
 
Modify
 
Delete
 
Quote

Ritardi
Ciao mi è venuto un dubbio sul codice proposto, ed infatti non funziona, in quanto si blocca su "Else", per cui si deve duplicare il secondo ciclo di ricerca sulle estrazioni, ecco la macro modificata funzionante in base alle 2 date iniziali, se la prima data è minore della seconda vuol dire che le date sono in ordine crescente altrimenti il contrario.

Sub RitardiSA()
Dim Rs, Ra, ur, r, c, rng, x, y, d, n
 
Range("Ritardi").ClearContents
r = 2: c = 27
For x = 1 To 90
    If x = 41 Then
        x = x
    End If
    ur = Cells(Rows.Count, 4).End(xlUp).Row
    If Cells(1, 1) > Cells(2, 1) Then
        For y = ur To 1 Step -1
            Set rng = Range(Cells(y, 4), Cells(y, 8))
            n = WorksheetFunction.CountIf(rng, x)
            If n >= 1 Then
                Ra = 0
            Else
                Ra = Ra + 1
            End If
            If Rs < Ra Then Rs = Ra
        Next y
    Else
        For y = 1 To ur
            Set rng = Range(Cells(y, 4), Cells(y, 8))
            n = WorksheetFunction.CountIf(rng, x)
            If n >= 1 Then
                Ra = 0
            Else
                Ra = Ra + 1
            End If
            If Rs < Ra Then Rs = Ra
        Next y
    End If
    Cells(r, c) = Rs
    Cells(r + 1, c) = Ra
    c = c + 1
    If c = 37 Then r = r + 3: c = 27
    Ra = 0
    Rs = 0
Next x
End Sub


Ciao By Sal [SM=x423051]

Excel 2013

Iscriviti al nuovo sito che ho aperto troverai altre RISPOSTE

https://www.bysal-excel.it
Post: 1,259
Registered in: 6/27/2011
Veteran User
excel 2007
OFFLINE
5/24/2019 8:06 AM
 
Modify
 
Delete
 
Quote

ciao a tutti,

ciao Sal, Giuseppe e Matteo.

Concordo pienamente con Giuseppe:
dalla riga 2 le estrazioni DEVONO essere riportate dalla data più
recente alla meno recente, altrimenti il ritardo non sarà il più
recente ma il più vecchio.


Ciao
Frank
Excel 2007

1 - Per "prodotti finiti", ricordo l'esistenza di apposite Software House a pagamento. Questo è un Forum
2 per cortesia, leggi questa e questa discussione.
3 - allega SUL FORUM un file di esempio, chi ti vuole aiutare risparmia tempo, e tu forse hai una soluzione prima di quello che ti aspetti :-)
Usa siti di hosting SOLO in estrema necessità: in caso il server del forum abbia problemi.
4 - Ricordati di condividere le soluzioni che trovi da solo: potrebbero essere utili anche per le persone a cui chiedi aiuto.
Post: 3,398
Registered in: 4/3/2013
Master User
Excel 2000 - 2013
OFFLINE
5/24/2019 12:38 PM
 
Modify
 
Delete
 
Quote

Buona giornata a Tutti.

Matteo, dopo aver preso buona nota dei Codici VBA forniti da @by sal e @tanimon, un saluto ad Entrambi, potresti dare uno sguardo al File in allegato.

Alcune premesse; sono partito con il concetto di analizzare solo i numeri riportati nel Range A1:H14 ma non c'è un limite se non quello definito dal tempo di elaborazione.
Voglio dire, per 14 estrazioni il Tempo di elaborazione direi che è accettabile; un paio di secondi.

- il Codice VBA:

Option Explicit

Sub Ritardi()
Application.ScreenUpdating = False
Dim NDR As Range, Rng As Range
Dim Ur As Long, x As Long, z As Long, RgP As Long, Rtd As Long, Est As Long
Dim y As Byte, NRc As Byte

    Ur = Cells(Rows.Count, "D").End(xlUp).Row
        Range(Cells(2, 24), Cells(91, 24)).ClearContents
    RgP = Ur - 1
        For x = Ur To 2 Step -1
            For y = 4 To 8
                Rtd = 0
                NRc = Cells(x, y).Value
                Set NDR = Cells(x, y)
                    For z = RgP To 1 Step -1
                        Set Rng = Range(Cells(z, 4), Cells(z, 8))
                    Est = WorksheetFunction.CountIf(Rng, NRc)
                        If Est = 0 Then
                            Rtd = Rtd + 1
                                If z = 1 And Cells(NRc + 1, 24).Value = "" Then Cells(NRc + 1, 24).Value = "Oltre " & Rtd
                        Else
                            If Cells(NRc + 1, 24).Value = "" Then Cells(NRc + 1, 24).Value = Rtd
                                Exit For
                        End If
                    Next z
            Next y
                RgP = RgP - 1
        Next x
Application.ScreenUpdating = True
End Sub

analizza tutte le estrazioni ordinate in modo decrescente, in Cella "A1" estrazione della Data meno recente, in Cella "A14 " estrazione della Data più recente.
I numeri estratti sono 70 (5 x 14) ma i numeri univoci sono solo 41; è sui numeri univoci che ho strutturato il Codice VBA sopra riportato.

Alcune precisazioni, per agevolare l'analisi di tutti i numeri estratti ho utilizzato la Funzione "Formattazione condizionale" legata alla corrispondenza con il Valore inserito in Cella "Z1"; una volta completati i Test potrà essere eliminata la "Formattazione condizionale" che richiede inutili risorse.

Credo che aumentando in modo considerevole il numero delle "estrazioni" si potrebbero verificare seri problemi sui tempi di elaborazione, ma avendo tempo d'attendere ... 😏



A disposizione.

Giuseppe

P.s. Vorrei ringraziare @by sal che ha proposto questa soluzione:

 Set Rng = Range(Cells(y, 4), Cells(y, 8))
            n = WorksheetFunction.CountIf(Rng, x)

Soluzione molto intere che non avevo mai utilizzato.

Windows XP - Excel 2000
Windows 10 - Excel 2013
Post: 1,260
Registered in: 6/27/2011
Veteran User
excel 2007
OFFLINE
5/24/2019 9:04 PM
 
Modify
 
Delete
 
Quote

ciao a tutti [SM=x423028]
ciao Sal Giuseppe e Matteo.

riallego il file del post #13 al quale ho aggiunto il foglio2
con le date dalla più vecchia alla più recente ed il range dell'ultima estrazione su questo foglio è l'ultima riga:

si possono di conseguenza inserire le estrazioni in fondo al foglio
ed è sicuramente più comodo.

Ho creato una nuova macro fondamentalmente simile a quella per il Foglio1, ed ora il ritardo più recente si trova partendo dal basso.

Con 2100 righe sul mio computer, impiega 2,17 secondi.
Ecco la macro:

vb
Option Explicit
Sub ritardi_date_crescenti()
Dim rng_estrazione As Range, rng_tabellone As Range
Dim rng_ritardi As Range, cella As Range, rng_risultati As Range

Dim c_estrazione As Object, tabellone As Object
Dim ritardo As Integer
Dim ur As Long, c As Long, r As Long

Sheets("Foglio2").Activate

ur = Cells(Rows.Count, "d").End(xlUp).Row

Set rng_tabellone = Uni0n(Range("i2:i21"), Range("k2:k21"), _
    Range("m2:m21"), Range("o2:o21"), Range("q2:q21"))
Set rng_risultati = Uni0n(Range("j2:j21"), Range("l2:l21"), _
    Range("n2:n21"), Range("p2:p21"), Range("r2:r21"))
    
Set rng_ritardi = Range("c1:h" & ur)
Set rng_estrazione = Range("d" & ur & ":" & "h" & ur)

Application.ScreenUpdating = False

rng_risultati.ClearContents

For Each cella In rng_ritardi
    If IsNumeric(cella.Value) = False Then
    Else
        Set c_estrazione = rng_estrazione.Find(cella.Value, LookIn:=xlValues, lookat:=xlWhole)
        If Not c_estrazione Is Nothing Then
            ritardo = 0
        Else
            ritardo = ur - cella.Row
        End If
       
    
        Set tabellone = rng_tabellone.Find(cella.Value, LookIn:=xlValues, lookat:=xlWhole)
        r = tabellone.Row
        c = tabellone.Column
        Cells(r, c + 1).Value = ritardo
        
    End If
Next cella
Application.ScreenUpdating = True

Set c_estrazione = Nothing
Set tabellone = Nothing
Set rng_ritardi = Nothing
Set rng_estrazione = Nothing
Set rng_tabellone = Nothing
Set rng_risultati = Nothing
End Sub


ciao
Frank
[Edited by tanimon 5/24/2019 9:26 PM]
Excel 2007

1 - Per "prodotti finiti", ricordo l'esistenza di apposite Software House a pagamento. Questo è un Forum
2 per cortesia, leggi questa e questa discussione.
3 - allega SUL FORUM un file di esempio, chi ti vuole aiutare risparmia tempo, e tu forse hai una soluzione prima di quello che ti aspetti :-)
Usa siti di hosting SOLO in estrema necessità: in caso il server del forum abbia problemi.
4 - Ricordati di condividere le soluzioni che trovi da solo: potrebbero essere utili anche per le persone a cui chiedi aiuto.
Post: 1,261
Registered in: 6/27/2011
Veteran User
excel 2007
OFFLINE
5/25/2019 12:08 PM
 
Modify
 
Delete
 
Quote

sostituzione file
ciao a tutti [SM=x423028]

il file del post precedente non è quello corretto.

riallego e ringrazio Giuseppe per la segnalazione


ciao
Frank

edit:
con l'occasione segnalo che la richiesta di Mattero da lui formulata
al post #4 con relativo allegato,
è CONCETTUALMENTE errata in quanto i ritardi devono essere calcolati per ogni singolo numero da 1 a 90,
e NON su singolo numero delle estrazioni precedenti.

Mi sono limitato a quanto da lui richiesto.
[Edited by tanimon 5/25/2019 1:01 PM]
Excel 2007

1 - Per "prodotti finiti", ricordo l'esistenza di apposite Software House a pagamento. Questo è un Forum
2 per cortesia, leggi questa e questa discussione.
3 - allega SUL FORUM un file di esempio, chi ti vuole aiutare risparmia tempo, e tu forse hai una soluzione prima di quello che ti aspetti :-)
Usa siti di hosting SOLO in estrema necessità: in caso il server del forum abbia problemi.
4 - Ricordati di condividere le soluzioni che trovi da solo: potrebbero essere utili anche per le persone a cui chiedi aiuto.
Post: 3,399
Registered in: 4/3/2013
Master User
Excel 2000 - 2013
OFFLINE
5/25/2019 5:56 PM
 
Modify
 
Delete
 
Quote

Buona sera a Tutti.
per quanto mi riguarda vorrei concludere la mia partecipazione a questa Discussione con una considerazione.

Dopo una lunga conversazione privata con @tanimon, mi sono convinto che la soluzione più logica sia quella dell'analisi di tutti i novanta numeri possibili, non solo quelli già estratti.

Credo quindi che l'interpretazione di @by sal sia quella più corretta.

Potrei facilmente adattare il Codice VBA che ho proposto a questa nuova interpretazione ma ritengo sia solo una perdita di tempo; @by sal ha già brillantemente risolto questo aspetto.

Un grazie di cuore a Frank con il quale mi sono confrontato telefonicamente, Frank mi ha fatto capire quale sia il vero spirito dei "ritardi" che, ad un profano del lotto come il sottoscritto, era sfuggito.



Buona serata e buon fine settimana a Tutti.

Giuseppe

Windows XP - Excel 2000
Windows 10 - Excel 2013
Admin Thread: | Close | Move | Delete | Modify | Email Notification Previous page | 1 | Next page
New Thread
 | 
Reply
Cerca nel forum
Tag discussione
Discussioni Simili   [vedi tutte]
Home Forum | Bacheca | Album | Users | Search | Log In | Register | Admin
Tutti gli orari sono GMT+01:00. Adesso sono le 7:34 AM. : Printable | Mobile | Regolamento | Privacy
FreeForumZone [v.5.0.0] - Copyright © 2000-2019 FFZ srl - www.freeforumzone.com