Valutazione 4.87/ 5 (100.00%) 5838 voti

Condividi:        

TRASFORMARE FORMULA EXCEL IN VBA MACRO

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

Re: TRASFORMARE FORMULA EXCEL IN VBA MACRO

Postdi Flash30005 » 26/05/10 14:02

Ho impostato queste due macro collegate tra loro, eventualmente possiamo far attivare una o l'altra
Codice: Seleziona tutto
Sub Compila1()
Application.ScreenUpdating = False
Application.Calculation = xlManual
Range("C7:EV158").ClearContents
For RR = 7 To 158
For CC = 3 To 152
Str1 = Range("A" & RR).Value & Range("A1").Value & Cells(4, CC).Value & Range("B1").Value
For RR2 = 4 To 14
Str2 = Worksheets("OP_O").Range("U" & RR2).Value
If UCase(Str1) = UCase(Str2) Then
Cells(RR, CC).Value = Worksheets("OP_O").Range("V" & RR2).Value
Else
End If
Next RR2
Next CC
Next RR
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
Call Compila2
End Sub
Sub Compila2()
Application.ScreenUpdating = False
Application.Calculation = xlManual
Range("C161:EV313").ClearContents
For RR = 161 To 313
For CC = 3 To 152
Str1 = Range("A" & RR).Value & Range("A1").Value & Cells(4, CC).Value & Range("B2").Value
For RR2 = 4 To 14
Str2 = Worksheets("OP_O").Range("W" & RR2).Value
If UCase(Str1) = UCase(Str2) Then
Cells(RR, CC).Value = Worksheets("OP_O").Range("X" & RR2).Value
Else
End If
Next RR2
Next CC
Next RR
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
End Sub

Nel vba del foglio "AA oP" inserirai questo codice
Codice: Seleziona tutto
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Target.Address <> "$A$2" Then Exit Sub
Call Compila1
End Sub

In maniera tale che cliccando due volte su A2 "Aggiornamento" si attiveranno le macro
Inoltre bisogna modificare la formattazione delle celle e mettere fondo rosso se <> ""
ho preferito non mettere caratteri per dimunire il peso del file che come vedrai ora è solo il 10% del tuo (660 kb contro 7.000 kb)
La velocità di esecuzione dipende dalla velocità del Pc ma si aggira intorno ai 15 secondi (per ambedue le macro).
Ma penso si possa fare di meglio...

allego file esempio

Fai sapere
ciao
Flash
Win7 + Office 2010 Ita
"Fotografica" al servizio dell'immagine

Ottime opportunità di lavoro (part-time o full-time) con guadagni immediati. Info in MP
Avatar utente
Flash30005
Moderatore
 
Post: 8460
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Sponsor
 

Re: TRASFORMARE FORMULA EXCEL IN VBA MACRO

Postdi gidio » 27/05/10 11:19

:eeh:
Ciao Flash30005
PAURA!!!!!!
Invidio la tua conoscenza...
SPETTACOLAREEE!!! :o 8)

Posso sempre creare una pagina con dentro i pulsanti per far partire le macro ( bella la soluzione doppio clik sulla cella...non la conoscevo)

Il fondo rosso è gia impostato con una formattazione condizionale quindi no problem
Concordo con il fatto di lasciare la cella vuota... ( i caratteri pesano)


Ora provo ad importarlo in una copia del file originale , imposto il primo dei 26 fogli e provo.
se va faccio in modo che il codice prosegua con i successivi fogli.


:idea:
Domanda extra...
invece di moltiplicare 26 volte il codice.(cambiando il nome del folgio).. si potrebbe dire che una volta completato le due macro porceda con il foglio sucessivo.

esempio
Nextsheet = 8 to Worksheets.count
.
.
Str2 = Nextsheet.Range("U" & RR2).Value
.
.
Cells(RR, CC).Value = Nextsheet.Range("V" & RR2).Value

Dove 8 corrisponde il primo foglio in cui devo creare la macro ( ho altri 7 fogli prima tra dati, appoggi ecc)

Lasciando perdere la sintassi direi che devo prendere quella direzione ...

Mi rimane solo una domanda....
Sei un mago o un programmatore....
per me un mix di entrambi!!!

Grazie mille.
Avatar utente
gidio
Utente Junior
 
Post: 14
Iscritto il: 25/05/10 10:43

Re: TRASFORMARE FORMULA EXCEL IN VBA MACRO

Postdi gidio » 27/05/10 12:15

Sniff....
ci sta una vita....

ho cambiato RR2 = 4 to 2000

e dopo 5 minuti era appena a RR2 = 164

Sigh
Avatar utente
gidio
Utente Junior
 
Post: 14
Iscritto il: 25/05/10 10:43

Re: TRASFORMARE FORMULA EXCEL IN VBA MACRO

Postdi Flash30005 » 27/05/10 12:33

Sono contento che ti soddisfa quanto fatto
perché significa che non ho perso tempo inutilmente.

per quanto riguarda il ciclo for next per tutti i fogli puoi usare questo codice
Codice: Seleziona tutto
   
For Each Ws In Worksheets
        If Ws.Name <> "FoglioDaNonProcessare1" Or Ws.Name <> "FoglioDaNonProcessare2" Or Ws.Name <> "FoglioDaNonProcessare.." Then
        Worksheets(Ws.Name).Select
         call Compila1
        end if
Next Ws

Oppure come con il Worksheets.Count , ma senza richiamare le celle di ogni foglio
Codice: Seleziona tutto
   
 For NF = 2 To Worksheets.Count
Sheets(NF).Select
Call Compila1
Next NF


Non conosco lo schema dei tuoi dati e se esiste una relazione tra i 26 fogli perché se non c'è variazione sul singolo foglio non credo sia necessario rielaborarli tutti. (solo nel caso di variazione foglio "OP_O", credo).
Se è così puoi far aggiornare solo il foglio modificato mentre potresti fare il ciclo completo se varia il foglio "OP_O".

Se vuoi aggiungere dei pulsanti puoi usare qualsiasi forma (disegno: cerchio, rettangolo o altro) che potrai colorare, inserire un testo e assegnare una macro (sempre con il tasto destro del mouse sull'oggetto).

Fai sapere
Ciao

P.s. Non sono programmatore ma amo automatizzare lavori ripetitivi, lavori nei quali l'uomo può facilmente incorrere in errore
Flash
Win7 + Office 2010 Ita
"Fotografica" al servizio dell'immagine

Ottime opportunità di lavoro (part-time o full-time) con guadagni immediati. Info in MP
Avatar utente
Flash30005
Moderatore
 
Post: 8460
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: TRASFORMARE FORMULA EXCEL IN VBA MACRO

Postdi Flash30005 » 27/05/10 12:45

gidio ha scritto:ci sta una vita....
ho cambiato RR2 = 4 to 2000
e dopo 5 minuti era appena a RR2 = 164


Possiamo rimediare creando un foglio appoggio nel quale riportiamo solo le righe (delle colonne U e V) filtrate automaticamente dalla macro e "lavoriamo" solo su queste righe
che ne pensi?
Flash
Win7 + Office 2010 Ita
"Fotografica" al servizio dell'immagine

Ottime opportunità di lavoro (part-time o full-time) con guadagni immediati. Info in MP
Avatar utente
Flash30005
Moderatore
 
Post: 8460
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: TRASFORMARE FORMULA EXCEL IN VBA MACRO

Postdi gidio » 27/05/10 13:24

Per ogni riga c'è un valore quindi non cambierebbe niente.
Prima di importare il dato faccio una pulizia e quelle che hanno 0 le elimino
quindi non penso ci sia un efettivo miglioramento ( ti prego smentiscimi)

Pensavo in oltre di automatizzare il valore RR2 = 4 to 2000
in realtà per questo file ha in questo caso 1337 righe,
un foglio di appoggio nel quale c'è una cella con un conta valori , e mi restituisce il numero effettivo di righe da elaborare.
In quanto ad ogni aggiornamento dati le righe possono variare.

cmq il miglioramento almeno in termini di peso c'è quindi vale la pena fare questo procedimento.

Grzie!!!

Cito un frase che mi piace molto

“Se in un primo momento l'idea non è assurda, allora non c'è nessuna speranza che si realizzi”.

Albert Einstein
Avatar utente
gidio
Utente Junior
 
Post: 14
Iscritto il: 25/05/10 10:43

Re: TRASFORMARE FORMULA EXCEL IN VBA MACRO

Postdi gidio » 27/05/10 13:58

Sto integrando il codice multi foglio... con il Worksheets.Count

Oppure come con il Worksheets.Count , ma senza richiamare le celle di ogni foglio
Codice: Seleziona tutto
For NF = 2 To Worksheets.Count
Sheets(NF).Select
Call Compila1
Next NF

Questo è l'ideale ...
Ora mi devo anche smentire.....
Probabilemte avevo la macchina incriccata prima in quanto ora mi ha fatto rr2 = 1200 in poco meno di un paio di minuti.

quindi ottimo.
Anche ci stesse 15/20 minuti ad aggiornare i 26 fogli faccio partire il codice solo in cui ho una variazione di dati in V e U .
Lasciando il file leggere in cui cèe una tabelle tutta blla colorata in cui i BOSS possono trarre informazioni a livello visivo diretto e rapido ( i lverde ed il rosso funzionano sempre bene""" :) )

Ora provo ad aggiungere il count ad un pulsante e vediamo....

P.s. Non sono programmatore ma amo automatizzare lavori ripetitivi, lavori nei quali l'uomo può facilmente incorrere in errore


GRANDE VERITA'

Ancora grazie....

Fiero di poter dire....
Ho conosciuto un GURU !!!!!!

GRAZZIE!!!!! :D 8)
Avatar utente
gidio
Utente Junior
 
Post: 14
Iscritto il: 25/05/10 10:43

Re: TRASFORMARE FORMULA EXCEL IN VBA MACRO

Postdi Flash30005 » 27/05/10 14:52

Penso che "le perdite di tempo" diano fastidio a chiunque
pertanto ho modificato la macro utilizzando la funzione Find invece del For...Next (molto più veloce)
Il tempo ora dovrebbe essere ridotto a 1/3 del precedente

scarica questo file

Inoltre adesso vengono calcolate le righe del foglio "OP_P" e non è necessario cambiare il valore al For..next

Prova facendo test di corrispondenza dei valori
e fai sapere
Ciao
Flash
Win7 + Office 2010 Ita
"Fotografica" al servizio dell'immagine

Ottime opportunità di lavoro (part-time o full-time) con guadagni immediati. Info in MP
Avatar utente
Flash30005
Moderatore
 
Post: 8460
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: TRASFORMARE FORMULA EXCEL IN VBA MACRO

Postdi gidio » 27/05/10 16:24

Ciao Flash30005
Sniff...
Test versione 2 ...
dopo 30 minuti aveva appena iniziato il call2 del primo foglio ...


test versione 3
Sul tuo funziona
Importando sul mio no ( ho cambiato solo riferimento del nome fooglio "OP_O")

se prodseguo con f8 va avanti con f5 si blocca a :
If Not C Is Nothing Then

URR = 1337 (giusto)

Set C = .Find(STR1, LookIn:=xlValues, LookAt:=xlWhole)
C= Nothing....
LookIn:=xlValues= -4563
LookAt:=xlWhole = 1
STR1 = (chiave corretta)

grazie
domani ci riprovo
Avatar utente
gidio
Utente Junior
 
Post: 14
Iscritto il: 25/05/10 10:43

Re: TRASFORMARE FORMULA EXCEL IN VBA MACRO

Postdi Flash30005 » 27/05/10 19:27

Se non funziona significa che c'è qualche altro riferimento errato
Quando fai delle sostituzioni es.:
foglio OP_P selezioni con il nome OP_P e poi premi il comando trova (binocolo)
si apre la funzione nella quale premi "Sostituisci" con NomeNuovoFoglio
mettendo l'opzione su "progetto corrente" ( non modulo corrente)
ad ogni occorrenza del nome trovato effettui la sostituzione
e così per tutte le variazioni che devi fare nella macro

Ricorda che c'è anche un codice VBA anche nel foglio AA oP (non solo nel modulo)
quel codice fa avviare la macro con il doppio click del mouse sulla cella A2

Fai sapere
Ciao
Flash
Win7 + Office 2010 Ita
"Fotografica" al servizio dell'immagine

Ottime opportunità di lavoro (part-time o full-time) con guadagni immediati. Info in MP
Avatar utente
Flash30005
Moderatore
 
Post: 8460
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: TRASFORMARE FORMULA EXCEL IN VBA MACRO

Postdi gidio » 28/05/10 07:03

Grazie Flash30005
Ora controllo....
ieri ero cotto alla fine.....e sicuramente mi è sfuggito qualche cosa..... :oops:

poi ti faccio sapere.

Grazie mille
Avatar utente
gidio
Utente Junior
 
Post: 14
Iscritto il: 25/05/10 10:43

Re: TRASFORMARE FORMULA EXCEL IN VBA MACRO

Postdi gidio » 28/05/10 07:11

Ho fatto le verifiche!
Non c'erano sostituzioni da fare.
ho fatto partire i primi passaggi step by step ( F8) e non mi ha dato errore , quindi ho proseguito con (F5) ...ora gira..
Bho...mistero... :-?
ho aggiunto
MsgBox ( "fine" now())
così vedo l'orario preciso di fine aggiornamento .... partito alle 08:08...sono curioso!

Grazie ancora
Avatar utente
gidio
Utente Junior
 
Post: 14
Iscritto il: 25/05/10 10:43

Re: TRASFORMARE FORMULA EXCEL IN VBA MACRO

Postdi Flash30005 » 28/05/10 07:45

Se con la versione 2 impiegava 30 minuti per la prima macro suppongo che ora ne occorrano circa 20 o 25 minuti per entrambi le macro

Per sapere il tempo occorrente per il processo puoi inserire all'inizio della macro
Codice: Seleziona tutto
Start = Time


e alla fine
Codice: Seleziona tutto
MsgBox "Tempo: " & Format(Time - Start, "hh:mm:ss")


Se dovesse capitare di nuovo quel blocco invia il tipo di errore, trascrivendo tutto oppure inviando l'immagine del messaggio di errore

Ciao
Flash
Win7 + Office 2010 Ita
"Fotografica" al servizio dell'immagine

Ottime opportunità di lavoro (part-time o full-time) con guadagni immediati. Info in MP
Avatar utente
Flash30005
Moderatore
 
Post: 8460
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: TRASFORMARE FORMULA EXCEL IN VBA MACRO

Postdi gidio » 28/05/10 09:24

Ciao,
Dopo 2 ore (dalle 08:08 alle 10:20) era appena arrivato a Nf 10.
Ossia a metà del 2 foglio....
Sigh..
La cpu sempre al 50% !!! ( di più xls non ne occupa a meno che tu non faccia partire 2 procedure diverse )

l'errore non lo da più.... ma ci mette troppo

devo inventarmi altro!!!

Haaarg.... mi piacevo così tanto..... da 180 mb a 10 mb.....

Ora vedo cosa posso inventare.


Per sapere il tempo occorrente per il processo puoi inserire all'inizio della macro

Codice: Seleziona tutto
Start = Time

e alla fine

Codice: Seleziona tutto
MsgBox "Tempo: " & Format(Time - Start, "hh:mm:ss")

Questo è bello!!!
Lo userò spesso!

Grazie ancora
Avatar utente
gidio
Utente Junior
 
Post: 14
Iscritto il: 25/05/10 10:43

Re: TRASFORMARE FORMULA EXCEL IN VBA MACRO

Postdi Flash30005 » 28/05/10 09:40

Ma quante righe hai nel foglio OP_O ?
Secondo me c'è qualcosa che non va
non posso credere che dopo due ore ti trovi ancora al secondo foglio.
Fai una prova su un file test
lascia solo un foglio di elaborazione senza il ciclo for... next dei fogli
e vedi quanto tempo impiega per un singolo foglio

Fai sapere
ciao
Flash
Win7 + Office 2010 Ita
"Fotografica" al servizio dell'immagine

Ottime opportunità di lavoro (part-time o full-time) con guadagni immediati. Info in MP
Avatar utente
Flash30005
Moderatore
 
Post: 8460
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: TRASFORMARE FORMULA EXCEL IN VBA MACRO

Postdi gidio » 31/05/10 14:25

Ciao
Tempo di esecusione di un foglio:
01:45:12

Incredibile ma vero!!!!
le righe del file OP_O sono attualmente :
1108 (destinate probabilmente a crescere).

ho fatto questo sul ciclo for
For NF = 9 To 9
quindi ha elaborato solo il primo foglio.


Attualmente il ricalcola impiega tra i 10 e i 15 minuti ( sul file con teutte le formule) e per il momento rimango con quello disattivo il rcalcola automatico e spiego agli utenti il metodo di lavoro.

Ho imparato molte cose da questi post e per questo vi ringrazio.
Non vorrei approfitttare troppo del vostro prezioso aiuto, quindi se la ricerca procede ne sarei felicissimo, ma non vorrei rubare troppo spazio agli altri.

Vi ringrazio ancora per la pazienza e cortesia incontrata in questo forum.
Un ringraziamento speciale a Flash30005 ( ho conosciuto IL MAGO di Excel ...... Mi inchino)

ANCORA GRAZIE A TUTTI
Avatar utente
gidio
Utente Junior
 
Post: 14
Iscritto il: 25/05/10 10:43

Re: TRASFORMARE FORMULA EXCEL IN VBA MACRO

Postdi Flash30005 » 31/05/10 14:56

1000 righe non dovrebbero impiegare tutto quel tempo...

Hai un Messaggio Privato da leggere dal giorno 28 maggio
(in alto a questa pagina vi è il link per accedere ai tuoi messaggi privati)

Fai sapere
Ciao
Flash
Win7 + Office 2010 Ita
"Fotografica" al servizio dell'immagine

Ottime opportunità di lavoro (part-time o full-time) con guadagni immediati. Info in MP
Avatar utente
Flash30005
Moderatore
 
Post: 8460
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Precedente

Torna a Applicazioni Office Windows


Topic correlati a "TRASFORMARE FORMULA EXCEL IN VBA MACRO":


Chi c’è in linea

Visitano il forum: Nessuno e 12 ospiti