Condividi:        

Macro per archiviare "RANGE"

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

Macro per archiviare "RANGE"

Postdi seniorG62 » 12/01/10 01:15

Ciao a tutti.
Ritorno alla carica per avere la vostra assistenza.
La mia esigenza consiste nell'avere una macro che possa copiare un range fatto di quattro colonne e lo trasferisca in un foglio "archivio". Sembrerebbe facile se non fosse che il "range", di 20 numeri con adiacenti altri 2 adiacenti che si sommano tra loro generando il quarto valore, combia continuamente e oni cambiamento va archiviato.
A maggior chiarimento allego un file con il risultato realizzato a mano.
http://rapidshare.de/files/48982496/sen ... .xlsm.html
Vi ringrazio per l'aiuto.
seniorG62 ... in arte ... Giovanni
seniorG62
Utente Junior
 
Post: 72
Iscritto il: 20/07/08 17:37

Sponsor
 

Re: Macro per archiviare "RANGE"

Postdi Anthony47 » 12/01/10 01:42

Dici che il "range", di 20 numeri con adiacenti altri 2 adiacenti che si sommano tra loro generando il quarto valore, combia continuamente e oni cambiamento va archiviato.
Come si producono questi cambiamenti nel tuo foglio, e con che frequenza?

Quali sono le celle di Tot_2009 coinvolte? in Archivio la 4°colonna e' fatta con formula: puoi mettere la stessa formula su foglio Tot_2009 in modo che in Archivio metti solo "valori"?

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

Re: Macro per archiviare "RANGE"

Postdi seniorG62 » 12/01/10 02:41

Ciao Antony,
ti ringrazio per la pronta risposta.
Non so come spiegarmi, il massimo sforzo l'ho fatto allegando il "file" con la soluzione realizzata a mano.
Se non è possibile fare niente va bene lo stesso.
Io ho tentatp con quel poco che riesco a fare, ma nulla; ho letto in diversi forum; ho letto quanto viene scritto sulla Guida in linea di Excel VBA 2007, ma non sono riuscito ad abbozzare alcunchè. Ahime! ho ancora forti limiti.
Se c'è una soluzione ben venga e non credo si possa trattare di questioni "lessicali".
Grazie ancora per l'attenzione da Voi prestata.
seniorG62 ... in arte ... Giovanni
seniorG62
Utente Junior
 
Post: 72
Iscritto il: 20/07/08 17:37

Re: Macro per archiviare "RANGE"

Postdi Anthony47 » 12/01/10 10:27

E' che non uso xl2007, e il convertitore mi ha reso un foglio che non so quanto e' aderente all' originale; e poi se i dati cambiano ogni 27 millisecondi perche' fanno parte di una simulazione o ogni 15 giorni perche' fanno parte di un evento nazionale l' approccio per l' archiviazione cambia. Per quanto riguarda la cella con la formula mi immagino che salvare i valori (e non la formula) sia meglio.

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

Re: Macro per archiviare "RANGE"

Postdi Flash30005 » 12/01/10 11:19

Ho scaricato il file , convertito ma...

non riesco a capire la relazione tra i dati evidenziati nel foglio Tot_2009 e l'Archivio fatto a mano :roll:

In quale colonna si trovano i file evidenziati?

Ciao
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Macro per archiviare "RANGE"

Postdi seniorG62 » 12/01/10 15:24

Ciao Antony, Flash
innanzitutto grazie per la vostra gentilezza.
Cerco di chiarire la finalità della mia richiesta. Sto tentando di elaborare una simulazione della "casualità" attraverso la costruzione di "criteri" elaborati su base matematica dei ritardi e delle frequenze, nonchè della sommatoria di entrambi. La strada è lunga e necessita di numerose indagini ed il percorso non è facile. Come è semplice intuire è applicato al gioco del "Lotto" e nella fattispecie al "10eLotto" le cui estazioni avvengono ogni due o tre giorni e coinvolgono venti(20) numeri da 1 a 90.
Uno dei criteri è la "somma" della frequenza + il ritardo= valore. Per verificare la "somma" che ha maggior frequenza ho la necessità di creare un "data base" che mi dia la "somma" dei singoli 20(venti) numeri estratti per ogni estrazione, che in un anno sono 156/7.
Per concludere ciò che a me interessa è poter avere un "data base" che raccolga una estrazione dopo l'altra le singole colonne di tutto l'anno, al fine di poter avere una classifica delle "somme" più frequenti. Quell'esempio contenuto nell'allegato mi sembra eccessivo, ma è stato il primo (più che) artigianale banco di prova, comunque utile in prima approssimazione.
Per Antony: per me qualsiasi soluzione che conduca al risultato che chiedo va bene, attraverso formule o altro, basta evitare la manualità che spesso è causa di errori.
Per Flash: i dati, credo, che necessariamente vanno ripresi volta per volta dagli utimi 20 numeri del foglio "Tot_2009.
Grazie per l'attenzione.
Allego di nuovo il file in questione convertito.
http://rapidshare.de/files/48984648/sen ... h.xls.html
seniorG62 ... in arte ... Giovanni
seniorG62
Utente Junior
 
Post: 72
Iscritto il: 20/07/08 17:37

Re: Macro per archiviare "RANGE"

Postdi Flash30005 » 12/01/10 16:52

Perdonami Senior
ho scaricato di nuovo il file ma non ho notato nessuna differenza rispetto al primo
Continuo a non capire dove vanno inseriti i dati evidenziati
Codice: Seleziona tutto
2   0   42   21   63
3   0   34   15   49
22   0   33   22   55
32   0   27   18   45
34   0   30   20   50
35   0   40   19   59
41   0   39   13   52
42   0   31   20   51
43   0   33   17   50
44   0   35   13   48
45   0   38   17   55
47   0   46   16   62
48   0   31   19   50
49   0   37   16   53
54   0   41   13   54
57   0   34   21   55
65   0   41   10   51
70   0   37   24   61
72   0   31   22   53
80   0   31   16   47

quelli che sono dalla colonna AF a AJ (5 colonne)
non li vedo riportati nel foglio Archivio da nessuna parte
nel foglio archivio ci sono gruppi di 4 colonne (forse la colonna con 0 = zero non viene riportata?)
vedo scritto esempio fatto a mano ma non c'è alcuna relazione dei valori tra il foglio Tot-2009 e il foglio Archivio

Vorrei vedere i valori evidenziati nel foglio Tot_2009 riportati nel foglio Archivio per capire come una eventuale macro dovrebbe "comportarsi".

Fai sapere
Ciao
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Macro per archiviare "RANGE"

Postdi seniorG62 » 12/01/10 18:41

Ciao Flash,
scusa, scusa, scusa. Pensavo di aver aggiornato l'archivio invece no.
Allego il file con l'aggiornamento.
http://rapidshare.de/files/48985711/sen ... h.xls.html
Quindi, come potrai notare la relazione tra i due fogli c'è. Ok dal foglio TOT_2009 si estraggono i dati da AF:AJ escludendo "AG" .. ovvero lo "0" ha un altro significato nei criteri.
A poco a poco ci capiremo, grazie e scusa ancora. E' dimostrato che facendo il lavo manuale volta per volta, ho dimenticato l'aggiornamento.
A presto.
seniorG62 ... in arte... Giovanni
seniorG62
Utente Junior
 
Post: 72
Iscritto il: 20/07/08 17:37

Re: Macro per archiviare "RANGE"

Postdi Anthony47 » 12/01/10 19:08

C' e' un motivo per cui, in Archivio, hai gia' compilato N colonne con la formula (esempio in HN1) =SOMMA(HL1:HM1)? Questo non e' lo stesso calcolo fatto su col. AJ di Tot_2009, per cui basterebbe fare "incolla valori" da Tot_2009 ad Archivio? Tieni presente che queste colonne compilate incasinano il calcolo della colonna su cui copiare.

C' e' un motivo per cui in Archivio col. HG i dati sono quelli di Tot_2009 AH71 e sottostanti ma "meno 1"?

I dati su Archivio, righe 22 e sottostanti fanno parte del problema o sono cose che possiamo ignorare?

Alla prossima estrazione, i dati da salvare sono sempre su righe 72:91 o cambiano?

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

Macro per archiviare "RANGE"

Postdi seniorG62 » 13/01/10 19:17

Ciao Antony,
cerco di dare le spegazioni passo, passo.
Nel foglio "ARCHIVIO" ho riportato a mano i numeri da AF72:AJ91 con esclusione della colonna AG72:AG91 del foglio "TOT_2009".
CONTENUTO DEL FOGLIO "TOT_2009"
1) la colonna AF72:AF91 contiene i 20 numeri del 10eLOTTO, che vengono estratti ogni 2 o 3 giorni;
2) la colonna AG72:AG91,non viene presa in considerazionein quanto non è oggetto di sommatoria;
3) la colonna AH72:AH91 contiene la frequenza totale dei relativi numeri estratti;
4) la colonna AI72:AI91 contiene il ritardo totale dei relativi numeri estratti;
5) la colonna AJ72:AJ91 contiene la sommatoria delle frequenze totali più (+)i ritardi totali dei relativi numeri estratti;
A ME INTERESSA salvare nel foglio "ARCHIVIO" una (1) colonna per ogni estrazione (SOMMA -attuale ARCHIVIO = colonne da riga 22 a riga 39) che contengono i 20 numeri estratti (14/15 ogni mese) con le seguenti modalità:
a) ordine crescente;
b) esclusione dei mumeri doppi.
Quindi le colonne/righe 22:39(hanno) potrebbero avere meno di 20 numeri (vedi foglio ARCHIVIO).
Per concludere riproduco quanto ho scritto nel post del 12/1 ultimo scorso:
"""Per concludere ciò che a me interessa è poter avere un "data base" che raccolga una estrazione dopo l'altra le singole colonne di tutto l'anno, al fine di poter avere una classifica delle "somme" più frequenti. Quell'esempio contenuto nell'allegato mi sembra eccessivo, ma è stato il primo (più che) artigianale banco di prova, comunque utile in prima approssimazione.
Per Antony: per me qualsiasi soluzione che conduca al risultato che chiedo va bene, attraverso formule o altro, basta evitare la manualità che spesso è causa di errori.
"""
Grazie per l'attenzione, a presto.
seniorG62 ... in arte ... Giovanni
seniorG62
Utente Junior
 
Post: 72
Iscritto il: 20/07/08 17:37

Re: Macro per archiviare "RANGE"

Postdi Flash30005 » 13/01/10 23:33

E vabbe' ma se era così semplice ce lo potevi dire subito... :lol: :lol: :lol:
Copia l'intero codice e incollalo in un modulo
poi esegui la macro

Codice: Seleziona tutto
Sub CompilaArch()
For CC = 4 To 256 Step 5
    If Worksheets("ARCHIVIO").Cells(Rows.Count, CC).End(xlUp).Row = 1 Then
        Col = CC
        GoTo esci
    End If
Next CC
esci:
For RR = 72 To 91
    Worksheets("ARCHIVIO").Cells(RR - 71, CC).Value = Worksheets("TOT_2009").Cells(RR, 32).Value
    Worksheets("ARCHIVIO").Cells(RR - 71, CC + 1).Value = Worksheets("TOT_2009").Cells(RR, 34).Value - 1
    Worksheets("ARCHIVIO").Cells(RR - 71, CC + 2).Value = Worksheets("TOT_2009").Cells(RR, 35).Value
'<<< aggiungere qui l'altra riga se occorre
Next RR
For RS = 1 To 36
    ValS = Range("A" & RS)
        For RRA = 1 To 20
            If ValS = Cells(RRA, CC + 3).Value Then
                If Worksheets("ARCHIVIO").Cells(Rows.Count, CC + 2).End(xlUp).Row = 20 Then
                    Worksheets("ARCHIVIO").Cells(22, CC + 2).Value = ValS
                    GoTo salta
                Else
                    Worksheets("ARCHIVIO").Cells(Rows.Count, CC + 2).End(xlUp).Offset(1, 0).Value = ValS
                    GoTo salta
                End If
            End If
        Next RRA
salta:
Next RS
End Sub

Inutile dire che se aggiungi anche questo codice dove indicato, puoi togliere le formule dalla riga 1 alla riga 20 (HI o HN) nella colonna somma
Codice: Seleziona tutto
    Worksheets("ARCHIVIO").Cells(RR - 71, CC + 3).Value = Worksheets("TOT_2009").Cells(RR, 36).Value - 1


e poi con un'altro piccolo sforzo e con una piccola macro si potrebbero togliere le formule dalla riga 22 alla riga 39 (HI o HN)

Fai sapere
Ciao
Flash30005... in arte... Flash
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Macro per archiviare "RANGE"

Postdi seniorG62 » 14/01/10 13:55

Ciao Flash,
come sempre non finirò mai di ringraziarti per la pazienza e la tua grande capacità. Inoltre ci sta pure la tua simpatica ironia. Anche questa è una bella dote positiva.
Relativamente alla macro di cui sopra:
1) ho eseguito la macro, ma non va: esce il messaggio Errore di run-time '9': Indice non incluso nell'intervallo. Debug indica: If Workesheets("Archivio").Cells(Rows.Count, CC).End(xlUp). Rows = 1 Then;
2) se ti va di fare un piccolo sforzo, con una piccola macro togliamo le formule dalla riga 22 alla riga 39 (HI o HN).
Grazie ancora, a presto.
Aspetto tue notizie
seniorG62 ... in arte ... Giovanni
seniorG62
Utente Junior
 
Post: 72
Iscritto il: 20/07/08 17:37

Re: Macro per archiviare "RANGE"

Postdi Flash30005 » 14/01/10 14:37

Ok, ho modificato la macro per sostituire le formule (dalla colonna in esame in poi) con i valori trovati.

Preferisco inviare direttamente il file che a me non dà alcun errore
download file

Ho notato delle differenze tra i risultati macro e le tue formule perché penso ci sia un errore nelle formule in HI22:HI39 (prendono riferimento nella colonna HD1:HD20 invece che HI1:HI20)

Fai sapere se tutto ok
Ciao
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Macro per archiviare "RANGE"

Postdi seniorG62 » 15/01/10 19:32

Ciao Flash,
la macro funziona perfettamente.
UNA CURIOSITA'ho aggrgato la macro ad un file più articolato.
MI SUCCEDE che:se la collego con "Call" o la avvio attraverso un "Pulsante", la parte ex HF1:HF20, si riproduce perfettamente, mentre la parte sotto ex HI22:HL39, non funziona, nel senso che non riproduce i numeri e le quantità .
Invece se la "eseguo" attravaerso la procedura Visualizza - Macro - Esegui funziona perfettamente.
Tu GURU delle applicazioni macro mi aiuti a capire.
Grazie, per la macro e per la risposta di cui sopra.
seniorG62 .. in arte ... Giovannu
seniorG62
Utente Junior
 
Post: 72
Iscritto il: 20/07/08 17:37

Re: Macro per archiviare "RANGE"

Postdi Flash30005 » 16/01/10 10:15

Sicuramente ti trovi sul foglio Tot_2009 invece che sul foglio Archivio
in effetti c'erano due variabili (evidenziate nella nuova macro) che avevano i riferimenti cella ma non foglio
quindi sostituisci l'intera macro (per evitare errori)
Codice: Seleziona tutto
Sub CompilaArch()
For CC = 4 To 256 Step 5
    If Worksheets("ARCHIVIO").Cells(Rows.Count, CC).End(xlUp).Row = 1 Then
        Col = CC
        GoTo esci
    End If
Next CC
esci:
For RR = 72 To 91
    Worksheets("ARCHIVIO").Cells(RR - 71, Col).Value = Worksheets("TOT_2009").Cells(RR, 32).Value
    Worksheets("ARCHIVIO").Cells(RR - 71, Col + 1).Value = Worksheets("TOT_2009").Cells(RR, 34).Value - 1
    Worksheets("ARCHIVIO").Cells(RR - 71, Col + 2).Value = Worksheets("TOT_2009").Cells(RR, 35).Value
    Worksheets("ARCHIVIO").Cells(RR - 71, Col + 3).Value = Worksheets("TOT_2009").Cells(RR, 36).Value - 1
Next RR
For RS = 1 To 36
    ValS = Worksheets("ARCHIVIO").Range("A" & RS).Value  '<<< variabile corretta
        For RRA = 1 To 20
            If ValS = Worksheets("ARCHIVIO").Cells(RRA, Col + 3).Value Then  '<<< variabile corretta
                If Worksheets("ARCHIVIO").Cells(Rows.Count, Col + 2).End(xlUp).Row = 20 Then
                    Worksheets("ARCHIVIO").Cells(22, Col + 2).Value = ValS
                    GoTo salta
                Else
                    Worksheets("ARCHIVIO").Cells(Rows.Count, Col + 2).End(xlUp).Offset(1, 0).Value = ValS
                    GoTo salta
                End If
            End If
        Next RRA
salta:
Next RS
For RS2 = 22 To 39
   SS = Worksheets("ARCHIVIO").Cells(RS2, Col + 2).Value
   For RRA = 1 To 20
   Worksheets("ARCHIVIO").Cells(RRA, Col + 3).Select
    If SS = Worksheets("ARCHIVIO").Cells(RRA, Col + 3).Value Then Worksheets("ARCHIVIO").Cells(RS2, Col + 3).Value = Worksheets("ARCHIVIO").Cells(RS2, Col + 3).Value + 1
   Next RRA
Next RS2
End Sub


Fai sapere
Ciao
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Macro per archiviare "RANGE"

Postdi seniorG62 » 16/01/10 13:14

Ciao Flash,
ho copiato il codice nel foglio "ARCHIVIO", ma rispetto a prima, collegandolo ad un pulsante, funziona ex HF1:HI20; funziona la colonna sottostante HH22:HH39;mentre la ex HI22:HI39non appare. DOVE SBAGLIO. Ovviamente "eseguendolo" attraverso la procedura = Visualizza - Macro - Esegui = funziona perfettamente.
A presto.
seniorG62 ... in arte ... Giovanni
seniorG62
Utente Junior
 
Post: 72
Iscritto il: 20/07/08 17:37

Re: Macro per archiviare "RANGE"

Postdi Flash30005 » 16/01/10 20:08

No,
devi sostituire la macro esistente (quella che è nel modulo) con quella inviata (che riproduco qui, avendo corretto ancora una riga) e togliere quella che hai messo nel foglio "Archivio"

Codice: Seleziona tutto
Sub CompilaArch()
For CC = 4 To 256 Step 5
    If Worksheets("ARCHIVIO").Cells(Rows.Count, CC).End(xlUp).Row = 1 Then
        Col = CC
        GoTo esci
    End If
Next CC
esci:
For RR = 72 To 91
    Worksheets("ARCHIVIO").Cells(RR - 71, Col).Value = Worksheets("TOT_2009").Cells(RR, 32).Value
    Worksheets("ARCHIVIO").Cells(RR - 71, Col + 1).Value = Worksheets("TOT_2009").Cells(RR, 34).Value - 1
    Worksheets("ARCHIVIO").Cells(RR - 71, Col + 2).Value = Worksheets("TOT_2009").Cells(RR, 35).Value
    Worksheets("ARCHIVIO").Cells(RR - 71, Col + 3).Value = Worksheets("TOT_2009").Cells(RR, 36).Value - 1
Next RR
For RS = 1 To 36
    ValS = Worksheets("ARCHIVIO").Range("A" & RS).Value
        For RRA = 1 To 20
            If ValS = Worksheets("ARCHIVIO").Cells(RRA, Col + 3).Value Then
                If Worksheets("ARCHIVIO").Cells(Rows.Count, Col + 2).End(xlUp).Row = 20 Then
                    Worksheets("ARCHIVIO").Cells(22, Col + 2).Value = ValS
                    GoTo salta
                Else
                    Worksheets("ARCHIVIO").Cells(Rows.Count, Col + 2).End(xlUp).Offset(1, 0).Value = ValS
                    GoTo salta
                End If
            End If
        Next RRA
salta:
Next RS
For RS2 = 22 To 39
   SS = Worksheets("ARCHIVIO").Cells(RS2, Col + 2).Value
   For RRA = 1 To 20
     If SS = Worksheets("ARCHIVIO").Cells(RRA, Col + 3).Value Then Worksheets("ARCHIVIO").Cells(RS2, Col + 3).Value = Worksheets("ARCHIVIO").Cells(RS2, Col + 3).Value + 1
   Next RRA
Next RS2
End Sub


Se proprio non riesci ti invio il foglio

Fai sapere
Ciao
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Macro per archiviare "RANGE"

Postdi seniorG62 » 16/01/10 21:25

Ciao Flash,
funziona perfettamente, grazie ancora.
Penso ti dovrò disturbare ancora per altre due soluzioni.
Prima farò qualche tentativo sulla scorta degli ultimi codici che mi hai fornito.
Spero di riuscire ad imparare qualcosina in più rispetto ad ora, utilizzando il preziosissimo ausilio TUO e di Antony.
A presto.
seniorG62 ... in arte ... Giovanni
seniorG62
Utente Junior
 
Post: 72
Iscritto il: 20/07/08 17:37

Re: Macro per archiviare "RANGE"

Postdi mari_o » 16/01/10 22:05

Ciao senior, sto seguendo la votra discussione sulla realizzazione di questa macro.
Non sono intervenuto, perchè nn sono bravo come flash in fase di programmazione...!
Sarei curioso di sapere come si potrebbe utilizzare questo database per ricavarne delle previsioni da mettere in gioco.
Puoi illuminarci??
Ciao. ;)
mario
mari_o
Utente Junior
 
Post: 43
Iscritto il: 10/08/09 21:42

Macro per archiviare "RANGE"

Postdi seniorG62 » 17/01/10 14:06

Ciao mari_o,
attualmente la formaazione dei "criteri" a base matematica sono in fase di indagine e si basano sulle frequenze e i ritardi.
In realtà si sta cercando di imitare "random" attraverso una serie di ricerche e verifiche.
I risultati raggiunti, ancorchè insoddisfacenti, sono incoraggianti.
Lo strumento che sto cercando di costruire e banale, ma utile per fare delle prime verifiche, ahimè non è ancora completo e necessita ahimè di altri due passaggi (macro).
Qualdo lo strumento sarà completo metterò a disposizione il file di chi vorrà farne uso, con le relative spiegazioni del caso.
Cordialità.
seniorG62 ... in arte ... Giovanni
seniorG62
Utente Junior
 
Post: 72
Iscritto il: 20/07/08 17:37

Prossimo

Torna a Applicazioni Office Windows


Topic correlati a "Macro per archiviare "RANGE"":


Chi c’è in linea

Visitano il forum: Nessuno e 61 ospiti