Valutazione 4.87/ 5 (100.00%) 5838 voti

Condividi:        

Vorrei passare ad Access, per la velocità di esecuzione

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

Vorrei passare ad Access, per la velocità di esecuzione

Postdi By Sal » 09/06/15 18:38

Ciao a tutti ho un file Excel, ma data la gran mole di dati da controllare il ciclo For...Next impiega più di 1 ora spero che access possa aiutarmi di più.

ho 2 tabelle una cosi composta 1 colonna

So6
4,9,10,17,30,40
14,17,22,39,42,43
3,13,32,42,45,48
12,24,26,27,31,41
8,11,14,26,39,46
3,5,13,19,34,42
5,22,27,35,37,49
3,34,37,43,46,48
7,11,12,26,41,48
7,14,17,22,35,39
3,22,33,40,42,45
7,14,16,30,31,42
14,22,25,27,31,46

ed un altra su più colonne cosi composta

1° 2° 3° 4° 5°
1 5 8 11 12
1 5 8 11 13
1 5 8 11 21
1 5 8 11 28
1 5 8 11 29
1 5 8 11 30
1 5 8 11 32
1 5 8 11 35
1 5 8 11 36
1 5 8 11 38
1 5 8 11 39
1 5 8 11 40
1 5 8 11 43
1 5 8 12 13


la prima sono estrazioni separate da virgola 6-7 numeri, la seconda sono combinazioni di 5 numeri

quello che faccio con Excel, confronto i 5 numeri della combinazione se sono presenti 2 o più numeri nelle estrazioni mi deve incrementare un contatore in modo che abbia 2 dati "Ritardo Storico" e ultima uscita di un ambo "Ritardo Attuale" in effetti da quando non esce una combinazione, come ho detto con Excel ho risolto ma impiega molto tempo, non credo sia la macro che uso, perche i dati che deve valutare sono 6188 combinazioni per oltre 6300 estrazioni.

per cui ho pensato che usando access sia possibile accelerare i tempi

ma il guaio che non so neppure da dove cominciare con Access, se non caricare le 2 tabelle con i dati in Access.

la prima cosa credete che con Access si possa ottenere una cosa del genere.

Un Saluto By Sal :)
A rileggerci By Sal
Avatar utente
By Sal
Utente Junior
 
Post: 79
Iscritto il: 27/08/06 14:40

Sponsor
 

Re: Vorrei passare ad Access, per la velocità di esecuzione

Postdi Anthony47 » 09/06/15 23:26

Di Access non so niente, ma se pubblichi il file che usi potremo vedere se si riesce a velocizzare la ricerca.
Ciao
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13895
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Vorrei passare ad Access, per la velocità di esecuzione

Postdi By Sal » 10/06/15 06:52

Ciao Antony, non ho problemi a pubblicare il file, ecco il link

https://www.dropbox.com/s/crra0653qfddp ... .xlsm?dl=0

ci sono alcune spiegazioni nel el foglio spiegazioni, comunque si tratta del gioco UK49s,

Per vedere i ritardi Storici e ultimo ritardo di una serie di combinazioni a 5 numeri nell'archivio delle estrazioni, deve controllare se sono usciti 2 o più numeri, l'estratto non conta.

la macro interessata è "Sviluppa" quella che fa i controlli è riporta i dati, per fare le prove inserire nella colonna 31, uso la notazione R1C1 vado meglio ad usare Cells, dalla riga7, 6-7 numeri a piacere fino a 49 come massimo premere tasto "combinazione" per svilupparle e poi il tasto "Sviluppa" per avere il risultato.

la macro prende una combinazione alla volta la confronta con l'archivio sia per 6 che per 7 numeri con jolly controlla se sono usciti 2 o più numeri, come ho detto 1 non interessa, e nel conteggio mi riporta il ritardo storico con la riga dove è avvenuto, e poi l'ultima il ritardo attuale con la riga, e passa alla combinazione successiva ripetendo il processo.

ma da come si vede le combinazioni sono 6188 perche controllo 17 numeri che devono confrontarsi con oltre 6300 estrazioni, pertanto il tempo impiegato diventa notevole oltre 1 ora con il mio PC, per cui volevo trovare un metodo più veloce anche con Excel.

Ma mi hanno detto che con le query di Access avrei potuto risolvere il problema, ed ecco la mia richiesta, perchè di Access come te non ne capisco niente, e non so nemmeno se può fare una cosa del genere.

con le Pivot di Excel, a parte che non le uso molto, ma non credo che possono svolgere un simile compito.

Ciao By Sal :)
A rileggerci By Sal
Avatar utente
By Sal
Utente Junior
 
Post: 79
Iscritto il: 27/08/06 14:40

Re: Vorrei passare ad Access, per la velocità di esecuzione

Postdi Anthony47 » 10/06/15 13:51

Ho un paio di dubbi...
Ho capito che le estrazioni sono in colonna 15-21; la 21 e' il jolly, che va preso in considerazione nelle ricerche; non ti chiedo cosa sono le colonne 3-9, che hanno stesse date ma contengono numeri diversi (me lo spieghi eventualmente solo se serve per le elaborazioni da fare).
Ogni combinazione, es celle 7-32:7-36, va confrontata con tutte le estrazioni per vedere se ogni singola estrazione (7 numeri, jolly compreso) contiene almeno 2 numeri di quella combinazione; giusto?

Che significa "l'estratto 1 non lo prende in considerazione"? La colonna 15 (il primo estratto di ogni estrazione) va ignorata??

Nel tuo post mi sembra che descrivi alcuni step intermedi della tua macro (es "nel conteggio mi riporta il ritardo storico con la riga dove è avvenuto, e poi l'ultima il ritardo attuale con la riga, e passa alla combinazione successiva") ma non ho capito quale risultato deve dare la macro e dove deve scriverlo. Questo si incrocia con la domanda finale: cosa significano le colonne 38:47, sempre se sono interessate dal calcolo di cui discutiamo.

Ti aspetto con questi chiarimenti....

Ciao
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13895
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Vorrei passare ad Access, per la velocità di esecuzione

Postdi By Sal » 10/06/15 16:16

Ciao Antony, le colonne da 1 a 11 sono le stesse da 13 a 22 con l'unica differenza che le prime sono le estrazioni in ordine di uscita mentre le seconde sono ordinate dal più piccolo al più grande e solo su queste dalla 15 all 21 con il Jolly vengono prese dalla macro, le altre non vengono prese in considerazione.

si esatto ogni combinazione di 5 numeri viene confrontata con le colonne da 15 a 21 se calcolo il jolly

By Sal ha scritto:Che significa "l'estratto 1 non lo prende in considerazione"? La colonna 15 (il primo estratto di ogni estrazione) va ignorata??


no la colonna 15 va presa in considerazione, intendevo dire che se in un confronto viene riscontrato 1 solo numero non si deve considerare come combinazione uscita, viene considerata solo se sono da 2 a 5.

come vedi le combinazioni vengono sviluppate dalla 32 alla 36 la 37 è il numero progressivo, invece dalla 38 alla 47 sono i risultati della Macro per ogni combinazione, prendiamo la combinazione n° 1, 1-5-8-11-12 di fianco viene riportato il RS6 ritardo storico 6 numeri, riportando il numero 56 che significa che c'è stato un periodo di 56 estrazioni che non è uscita nessuna combinazione di 2 o più numeri come numero massimo, certo saranno uscite altre combinazioni, ma la distanza tra le combinazioni è stata minore di 56.

Ed ancora appresso viene riportato il numero di riga 838 dove è avvenuto l'evento, se selezioni il numero di riga e poi premi "Vai" ti porta sull'estrazione, cosi da controllare, la data, tornado a premere "Vai" ti riporta dove stavi, questo la fa con tutti i numeri di riga colonne 39-41-43-45

poi c'è RA6 che è il Ritardo attuale a 6 numeri, cioè l'ultima volta che si è verificata una combinazione valida, riportando anch'essa il numero di riga

successivamente RS7, lo stesso discorso del ritardo storico ma a 7 numeri compreso lo Jolly ad anche RA7.

Le ultime due colonne 46-47 sono la differenza tra il D6 = RS6-RA6, e D7 = RS7-RA7, una semplice sottrazione, che non serve ad altro per vedere quante estrazioni mancano per poter avere una combinazione giocabile, per essere giocabile dovrebbe essere un numero negativo, più alto è il negativo più ce probabilità che esca un ambo.

penso di averti chiarito quello che avevi chiesto, nel caso sono qui.

Ciao By Sal :)
A rileggerci By Sal
Avatar utente
By Sal
Utente Junior
 
Post: 79
Iscritto il: 27/08/06 14:40

Re: Vorrei passare ad Access, per la velocità di esecuzione

Postdi Anthony47 » 12/06/15 00:07

Nei ritagli di tempo ho fatto un po' di esperimenti e la migliore prestazione e' Sub sviluppaANT44() su Modulo5 del file scaricabile qui:
https://www.dropbox.com/s/ir8zlec1ez3ay ... .xlsm?dl=0

I tempi di esecuzione sono circa 1/10 della originale Sub sviluppa() in Modulo1, e non so se questa prestazione e' sufficiente; a me lo "sviluppo" sulle combinazioni & estrazioni del foglio pubblicato ha richiesto 240 sec su un pc vecchio di almeno 2 anni e XL2010.

Al momento c' e' una divergenza tra i risultati ottenuti con la macro originale e la sviluppaANT44, nel senso che la "riga" (colonne intestate R) per me rappresenta l'inizio degli eventi (per te e' invece, mi pare di capire, la fine dell'evento). Io ho adottato questo criterio ragionando sul ritardo corrente, che si sa quando e' cominciato ma non si sa quando finira'.
Non so quanto sia grave la diversa interpretazione: scientificamente non dovrebbe farne, per un lottologo non so valutare.

La prima parte (il "ciclo per le date") non ho idea a cosa serve e l'ho lasciato pari pari.

Spero che quanto fatto sia di qualche utilita'.

Ciao
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13895
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Vorrei passare ad Access, per la velocità di esecuzione

Postdi By Sal » 12/06/15 07:27

Ciao Antony, ho scaricato il file, e sembra funzionare alla perfezione, come hai detto 1/10 del tempo con la mia macro, non ha importanza il fatto dell'inizio o della fine del ritardo, in quanto è solo un controllo a posteriori per sapere la data, ma trovando la riga posso vedere tutto l'evento, usando il pulsante singola sulla combinazione.

L'importante è il calcolo del Ritardo storico ed attuale e sembra che questo combaci alla perfezione, mi studio la tua macro, cosi da poterla applicare ad altri progetti che impiegano molto tempo.

mi spieghi il funzionamento della macro, come mai la macro lavora meglio con le matrici.

per il momento un Saluto e Grazie

Ciao By Sal (8-D
A rileggerci By Sal
Avatar utente
By Sal
Utente Junior
 
Post: 79
Iscritto il: 27/08/06 14:40

Re: Vorrei passare ad Access, per la velocità di esecuzione

Postdi Anthony47 » 12/06/15 23:39

La macro e' piu' veloce perche' durante i calcoli non accede ai dati sul foglio Excel ma a una copia memorizzata sulle matrici EstrArr e CombArr; idem i dati transitori non vengono scrtti sulle colonne 38:47 ma sulla matrice ResArr che solo alla fine viene copiata in blocco sul foglio.
Infatti l' accesso alla struttura dati Excel e' molto lenta, in proporzione all'accesso ai dati di una matrice.
Stranamente la tua macro gia' abbozzava l'uso di una matrice, limitandola pero' alla singola riga delle estrazioni, quindi con beneficio finale modesto (si tratta della variabile rg1; rg2 ed rg3 sono invece dei riferimenti ai range sul foglio excel).
La tua macro inoltre fa due "giri": uno per controllare 6 estrazioni, e un secondo per controllare anche il jolly; la mia al contrario risolve tutto in un passaggio.
Avrai notato che l' ultimo controllo non lo fa con un ciclo For /Next ma con un controllo a catena di tutti i numeri della combinazione corrente: questo dopo aver verificato che tale soluzione, anche se "scema", e' piu' veloce del ciclo For /Next, ed e' comparabile al decimo di secondo coi tempi di una struttura piu' articolata contenente
Codice: Seleziona tutto
            If CombArr(Z, 1) = CEstr Then
                nn = nn + 1
            ElseIf CombArr(Z, 2) = CEstr Then
            ' etc etc

Ciao
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13895
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Vorrei passare ad Access, per la velocità di esecuzione

Postdi By Sal » 13/06/15 07:08

Ciao Farò tesoro il sistema di lavorare con le matrici anzichè pescare i dati dal foglio, non avevo pensato che prendendo i dati dal foglio impiegasse più tempo.

pensa che la prima stesura della macro aveva due cicli distinti uno per 6 numeri ed uno con il jolly, poi l'ho accorpato in un solo passaggio controllando nello stesso il 6 ed il jolly, ma visti i tempi ho cercato aiuto per vedere di ridurre.

ma lo stesso discorso, visto che i dati sono presenti, Estrazioni e Combinazioni, una tabella Pivot riuscirebbe a definire i ritardi storici e attuali e mostrarli.

per la verità sto cercando se si possa fare con le Pivot, so che la tabella Pivot riesce a prendere più tabelle ma non riesco a capire come organizzare le cose, cioè se riesce a fare un confronto, ho pensato di manipolare i dati, nel senso di fare solo 2 colonne con i numeri separati da virgola o altro.

a me interessa una visualizzazione, e le Pivot sono brave in questo, ma è una mia elucubrazione.

Un saluto e Grazie By Sal (8-D
A rileggerci By Sal
Avatar utente
By Sal
Utente Junior
 
Post: 79
Iscritto il: 27/08/06 14:40

Re: Vorrei passare ad Access, per la velocità di esecuzione

Postdi Anthony47 » 16/06/15 01:52

Non sono un grande esperto di pivot, ma non vedo al volo come possano essere usate per calcolare questi dati.

Ciao
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13895
Iscritto il: 21/03/06 16:03
Località: Ivrea


Torna a Applicazioni Office Windows


Topic correlati a "Vorrei passare ad Access, per la velocità di esecuzione":


Chi c’è in linea

Visitano il forum: Marius44 e 9 ospiti