Condividi:        

[Excel] Macro per elaborazione

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

[Excel] Macro per elaborazione

Postdi Lucio Peruggini » 08/05/11 17:24

Buona serata

Avrei uno dei miei soliti quesiti che spero si possa risolvere con una macro e probabilmente un pochino più complicato.
Il foglio excel contiene 240.000 righe e sette colonne (A:G) ovviamente con dei dati come da allegato in (code).
Avrei la necessità di fare alcuni calcoli e inserirli nelle colonne (H:L). Nella fattispecie, la colonna (H) alla riga (06) contiene il prodotto ottenuto da (G6 – G5) che è uguale a 06, così per tutte le ruote della colonna (C).
In pratica, quando l’ultimo numero della cinquina è sortito si fa la differenza con il numero sortito precedentemente. Fatto questo per ogni ruota, in questo caso dell’estrazione 3950 corrispondente all’ ID 47, colonna (B); nelle colonne che seguono (I – J – K – L) dovrei avere rispettivamente e nell’ultima riga dell’estrazione menzionata (riga 51) e prima di passare ad una successiva quanto segue:

Colonna ( I ) marca la ruota dell’ultimo numero sortito dell’estrazione 3950 a ritardo 60, in questo caso (Pa).

Colonna ( J ) scrive “RL”.

Colonna ( K ) scrive il corrispondente di colonna ( F ) in questo caso “st”.

Colonna ( L ) scrive il risultato ottenuto dal numero più grande in colonna ( H ) meno il penultimo sempre della medesima colonna e medesima estrazione di partenza 3950, in questo caso il numero 13 riga 46.

Codice: Seleziona tutto
ID   Iniz.   Ruota   Num.   Esce   st/at   Ritardo   RL            
01   3950   Ba   60   3951   st   01               
02   3950   Ba   68   3958   st   08               
03   3950   Ba   58   3960   st   10               
01   3950   Ba   22   3962   st   12               
02   3950   Ba   78   3968   st   18   06            
03   3950   Ca   18   3956   st   06               
04   3950   Ca   04   3961   st   11               
05   3950   Ca   05   3971   st   21               
06   3950   Ca   71   3977   st   27               
07   3950   Ca   66   3980   st   30   03            
08   3950   Fi   71   3955   st   05               
09   3950   Fi   40   3978   st   28               
10   3950   Fi   10   3991   st   41               
11   3950   Fi   72   3996   st   46               
12   3950   Fi   28   3999   st   49   03            
13   3950   Ge   17   3961   st   11               
14   3950   Ge   16   3963   st   13               
15   3950   Ge   03   3967   st   17               
16   3950   Ge   54   3972   st   22               
17   3950   Ge   52   3982   st   32   10            
18   3950   Mi   79   3958   st   08               
19   3950   Mi   90   3959   st   09               
20   3950   Mi   23   3965   st   15               
21   3950   Mi   84   3966   st   16               
22   3950   Mi   82   3977   st   27   11            
23   3950   Na   55   3966   st   16               
24   3950   Na   02   3976   st   26               
25   3950   Na   26   3977   st   27               
26   3950   Na   11   3983   st   33               
27   3950   Na   27   3984   st   34   01            
28   3950   Pa   68   3951   st   01               
29   3950   Pa   63   3953   st   03               
30   3950   Pa   45   3962   st   12               
31   3950   Pa   38   3966   st   16               
32   3950   Pa   37   4010   st   60   44            
33   3950   Ro   05   3952   st   02               
34   3950   Ro   64   3965   st   15               
35   3950   Ro   51   3970   st   20               
36   3950   Ro   12   3975   st   25               
37   3950   Ro   24   3976   st   26   01            
38   3950   To   03   3955   st   05               
39   3950   To   41   3962   st   12               
40   3950   To   35   3971   st   21               
41   3950   To   17   3973   st   23               
42   3950   To   01   3986   st   36   13            
43   3950   Ve   90   3957   st   07               
44   3950   Ve   16   3959   st   09               
45   3950   Ve   88   3959   st   09               
46   3950   Ve   77   3972   st   22               
47   3950   Ve   24   3975   st   25   03   Pa   RL   st   21
48   3951   Ba   28   3952   st   01               
49   3951   Ba   43   3962   st   11               
50   3951   Ba   72   3962   st   11               
51   3951   Ba   77   3963   st   12               
52   3951   Ba   60   3964   st   13   01            
53   3951   Ca   36   3962   st   11               
54   3951   Ca   80   3985   st   34               
55   3951   Ca   50   3987   st   36               
56   3951   Ca   72   3992   st   41               
57   3951   Ca   16   4003   st   52   11            
58   3951   Fi   63   3965   st   14               
59   3951   Fi   15   3969   st   18               
60   3951   Fi   29   3977   st   26               
61   3951   Fi   06   3982   st   31               
62   3951   Fi   60   3990   st   39   08            
63   3951   Ge   59   3958   st   07               
64   3951   Ge   13   3959   st   08               
65   3951   Ge   34   3962   st   11               
66   3951   Ge   63   3969   st   18               
67   3951   Ge   60   3984   st   33   15            
68   3951   Mi   13   3953   st   02               
69   3951   Mi   59   3953   st   02               
70   3951   Mi   87   3953   st   02               
71   3951   Mi   08   3956   st   05               
72   3951   Mi   20   3963   st   12   07            
73   3951   Na   64   3955   st   04               
74   3951   Na   35   3960   st   09               
75   3951   Na   52   3962   st   11               
76   3951   Na   33   3975   st   24               
77   3951   Na   24   3994   st   43   19            
78   3951   Pa   68   3959   st   08               
79   3951   Pa   59   3968   st   17               
80   3951   Pa   60   3968   st   17               
81   3951   Pa   34   4025   st   74               
82   3951   Pa   40   4036   st   85   11            
83   3951   Ro   83   3952   st   01               
84   3951   Ro   42   3954   st   03               
85   3951   Ro   08   3976   st   25               
86   3951   Ro   75   3979   st   28               
87   3951   Ro   19   4003   st   52   24            
88   3951   To   20   3953   st   02               
89   3951   To   73   3953   st   02               
90   3951   To   16   3955   st   04               
91   3951   To   21   3960   st   09               
92   3951   To   49   3974   st   23   14            
93   3951   Ve   56   3955   st   04               
94   3951   Ve   20   3963   st   12               
95   3951   Ve   34   3968   st   17               
96   3951   Ve   63   4005   st   54               
97   3951   Ve   36   4014   st   63   09   Ro   RL   at   05
98   3952   Ba   42   3959   st   07               
99   3952   Ba   71   3964   st   12               
100   3952   Ba   18   3990   st   38               
101   3952   Ba   28   3992   st   40               
102   3952   Ba   59   3993   st   41   01            
103   3952   Ca   87   3953   st   01               
104   3952   Ca   07   3955   st   03               
105   3952   Ca   88   3955   st   03               
106   3952   Ca   48   3967   st   15               
107   3952   Ca   13   3973   st   21   06            
108   3952   Fi   75   3957   st   05               
109   3952   Fi   65   3960   st   08               
110   3952   Fi   88   3971   st   19               
111   3952   Fi   53   3976   st   24               
112   3952   Fi   86   4000   st   48   24            
113   3952   Ge   76   3953   st   01               
114   3952   Ge   80   3955   st   03               
115   3952   Ge   83   3956   st   04               
116   3952   Ge   43   3964   st   12               
117   3952   Ge   73   3969   st   17   05            
118   3952   Mi   38   3955   st   03               
119   3952   Mi   65   3962   st   10               
120   3952   Mi   10   3967   st   15               
121   3952   Mi   41   3975   st   23               
122   3952   Mi   83   3977   st   25   02            
123   3952   Na   83   3955   st   03               
124   3952   Na   67   3956   st   04               
125   3952   Na   05   3957   st   05               
126   3952   Na   62   3958   st   06               
127   3952   Na   71   4001   st   49   43            
128   3952   Pa   58   3956   st   04               
129   3952   Pa   39   3967   st   15               
130   3952   Pa   41   3972   st   20               
131   3952   Pa   47   3976   st   24               
132   3952   Pa   51   3983   st   31   07            
133   3952   Ro   90   3956   st   04               
134   3952   Ro   83   3957   st   05               
135   3952   Ro   66   3959   st   07               
136   3952   Ro   32   3965   st   13               
137   3952   Ro   05   3967   st   15   02            
138   3952   To   67   3957   st   05               
139   3952   To   04   3962   st   10               
140   3952   To   76   3964   st   12               
141   3952   To   05   3992   st   40               
142   3952   To   08   4011   st   59   19            
143   3952   Ve   35   3955   st   03               
144   3952   Ve   74   3956   st   04               
145   3952   Ve   11   3968   st   16               
146   3952   Ve   39   4001   st   49               
147   3952   Ve   62   4043   st   91   42   Na   RL   at   01


Allego anche foto

http://screenshotuploader.com/s/6sz5F8HPjTY

Spero di non essere stato troppo prolisso; un caro saluto.
Lucio P.
Versione Office - 2013
Lucio Peruggini
Utente Senior
 
Post: 896
Iscritto il: 24/01/11 16:23

Sponsor
 

Re: [Excel] Macro per elaborazione

Postdi Anthony47 » 08/05/11 22:03

Prova questa macro, una variante di quanto ti avevo suggerito qui: viewtopic.php?f=26&t=91164
Codice: Seleziona tutto
Option Base 1
Sub LPCheck()
'variante di http://www.pc-facile.com/forum/viewtopic.php?f=26&t=91164
Dim ArrAG, ArrH
Dim VRit As Integer, RRit As String
Dim DDelta As Integer, MaxH1 As Integer, MaxH2 As Integer

Dim LastR As Long, I As Long, J As Long, CAst As Long
Dim FreCol As String
'
FreCol = "Z"       '<<< Una colonna libera che sara AZZERATA
VRit = 60          '<<< Ma questo e' fisso??
'
LastR = Cells(Rows.Count, 1).End(xlUp).Row
Range(FreCol & "1:" & FreCol & LastR).Clear

Range("H:L").Clear
ArrAG = Range("A1:G" & LastR + 1)
ArrH = Range(FreCol & "1:" & FreCol & LastR)
'
For I = 2 To LastR
If ArrAG(I, 7) = VRit Then RRit = ArrAG(I, 3)
If ArrAG(I, 3) <> ArrAG(I + 1, 3) Then
    DDelta = ArrAG(I, 7) - ArrAG(I - 1, 7)
    ArrH(I, 1) = DDelta
    If DDelta > MaxH1 Then
        MaxH2 = MaxH1: MaxH1 = DDelta
        Else
        If DDelta > MaxH2 Then MaxH2 = DDelta
    End If
End If
'
If ArrAG(I, 2) <> ArrAG(I + 1, 2) Then
    Cells(I, "I").Value = RRit
    Cells(I, "J").Value = "RL"
    Cells(I, "K").Value = ArrAG(I, 6)
    Cells(I, "L").Value = MaxH1 - MaxH2
MaxH1 = 0: MaxH2 = 0

End If
   
Next I
'
Range("H1:H" & LastR) = ArrH
'
End Sub

Nota che per quanto riguarda col L la descrizione non mi sembra chiarissima, e il dato elaborato sull' estrazione 3950 a me viene 31 mentre tu descrivi 21.
Se i dati non coinciano da riga 2 allora modifica il valore iniziale in For I = 2 To LastR

Se hai problemi di performance metti il classico Application.ScreenUpdating = False in testa e Application.ScreenUpdating = True in coda.

Comunque fai sapere, ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: [Excel] Macro per elaborazione

Postdi Avatar3 » 08/05/11 22:10

:eeh:

Se il suggerimento di Anthony non funziona allora invia il file con un paio di esempi esaustivi
(mi gira la testa solo a seguire il ragionamento)
ciao
Per il funzionamento delle macro si deve impostare la protezione a Bassa o Media.
Menu Strumenti -> Macro -> Protezione...
Avatar utente
Avatar3
Utente Senior
 
Post: 569
Iscritto il: 04/04/11 09:04

Re: [Excel] Macro per elaborazione

Postdi Lucio Peruggini » 08/05/11 23:38

E' vero! Per chi conosce il proprio mestiere nulla è impossibile.
Complimenti per l'eccezionale bravura, funziona perfettamente.

Grazie di cuore, Lucio

N.B. l'errore era il mio! Il 31 è giusto.
Lucio P.
Versione Office - 2013
Lucio Peruggini
Utente Senior
 
Post: 896
Iscritto il: 24/01/11 16:23


Torna a Applicazioni Office Windows


Topic correlati a "[Excel] Macro per elaborazione":


Chi c’è in linea

Visitano il forum: Nessuno e 39 ospiti