Valutazione 4.87/ 5 (100.00%) 5838 voti

Condividi:        

Trasformare un codice vba in formula excel 2003

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

Trasformare un codice vba in formula excel 2003

Postdi trittico69 » 16/05/11 12:01

È possibile trasformare questo codice in una semplice formula

Codice: Seleziona tutto
Sub minuti()
Dim AG As Range
Dim AH As Range
Dim AI As Range
Dim F As Range
Dim G As Range
Dim H As Range
Dim vero As Boolean

Set AG = ThisWorkbook.ActiveSheet.Range("AG31")
Set AH = ThisWorkbook.ActiveSheet.Range("AH31")
Set AI = ThisWorkbook.ActiveSheet.Range("AI31")
Set F = ThisWorkbook.ActiveSheet.Range("F10")
Set G = ThisWorkbook.ActiveSheet.Range("G10")
Set H = ThisWorkbook.ActiveSheet.Range("H10")

vero = False
If ActiveSheet.Name = "RIEP" Then vero = True
If Not vero Then

Select Case True

'1° CASO AGGIUNTO
'TUTTE E 3 LE CELLE MINORI O UGUALI A 30
Case VBA.Minute(AG) <= 30 And VBA.Minute(AH) <= 30 And VBA.Minute(AI) <= 30
   Application.EnableEvents = False
   If AG > 1 Then F = VBA.Int((AG) * 24) Else F = VBA.Hour(AG)
   If AH > 1 Then G = VBA.Int((AH) * 24) Else G = VBA.Hour(AH)
   If AI > 1 Then H = VBA.Int((AI) * 24) Else H = VBA.Hour(AI)
'--------------------------------------------------------------------------------
'2° CASO AGGIUNTO
'1 CELLA su 3 MINORE O UGUALE A 30 (le altre 2 uguali a 0)
Case VBA.Minute(AG) <= 30 And VBA.Minute(AH) = 0 And VBA.Minute(AI) = 0
   Application.EnableEvents = False
   If AG > 1 Then F = VBA.Int((AG) * 24) Else F = VBA.Hour(AG)
   If AH > 1 Then G = VBA.Int((AH) * 24) Else G = VBA.Hour(AH)
   If AI > 1 Then H = VBA.Int((AI) * 24) Else H = VBA.Hour(AI)

Case VBA.Minute(AG) = 0 And VBA.Minute(AH) <= 30 And VBA.Minute(AI) = 0
   Application.EnableEvents = False
   If AG > 1 Then F = VBA.Int((AG) * 24) Else F = VBA.Hour(AG)
   If AH > 1 Then G = VBA.Int((AH) * 24) Else G = VBA.Hour(AH)
   If AI > 1 Then H = VBA.Int((AI) * 24) Else H = VBA.Hour(AI)

Case VBA.Minute(AG) = 0 And VBA.Minute(AH) = 0 And VBA.Minute(AI) <= 30
   Application.EnableEvents = False
   If AG > 1 Then F = VBA.Int((AG) * 24) Else F = VBA.Hour(AG)
   If AH > 1 Then G = VBA.Int((AH) * 24) Else G = VBA.Hour(AH)
   If AI > 1 Then H = VBA.Int((AI) * 24) Else H = VBA.Hour(AI)
'--------------------------------------------------------------------------------------
'3° CASO AGGIUNTO
'2 CELLE SU 3 MINORI O UGUALI A 30 (l'altra uguale a 0)
Case VBA.Minute(AG) <= 30 And VBA.Minute(AH) <= 30 And VBA.Minute(AI) = 0
   Application.EnableEvents = False
   If AG > 1 Then F = VBA.Int((AG) * 24) Else F = VBA.Hour(AG)
   If AH > 1 Then G = VBA.Int((AH) * 24) Else G = VBA.Hour(AH)
   If AI > 1 Then H = VBA.Int((AI) * 24) Else H = VBA.Hour(AI)

Case VBA.Minute(AG) <= 30 And VBA.Minute(AH) = 0 And VBA.Minute(AI) <= 30
   Application.EnableEvents = False
   If AG > 1 Then F = VBA.Int((AG) * 24) Else F = VBA.Hour(AG)
   If AH > 1 Then G = VBA.Int((AH) * 24) Else G = VBA.Hour(AH)
   If AI > 1 Then H = VBA.Int((AI) * 24) Else H = VBA.Hour(AI)

Case VBA.Minute(AG) = 0 And VBA.Minute(AH) <= 30 And VBA.Minute(AI) <= 30
   Application.EnableEvents = False
   If AG > 1 Then F = VBA.Int((AG) * 24) Else F = VBA.Hour(AG)
   If AH > 1 Then G = VBA.Int((AH) * 24) Else G = VBA.Hour(AH)
   If AI > 1 Then H = VBA.Int((AI) * 24) Else H = VBA.Hour(AI)
'------------------------------------------------------------------------------------------

'PRIMO CASO
Case VBA.Minute(AG) > 30 And VBA.Minute(AH) = 0 And VBA.Minute(AI) = 0
   Application.EnableEvents = False
   If AG > 1 Then F = VBA.Int((AG) * 24) + 1 Else F = VBA.Hour(AG) + 1
   If AH > 1 Then G = VBA.Int((AH) * 24) Else G = VBA.Hour(AH)
   If AI > 1 Then H = VBA.Int((AI) * 24) Else H = VBA.Hour(AI)

Case VBA.Minute(AG) = 0 And VBA.Minute(AH) > 30 And VBA.Minute(AI) = 0
   Application.EnableEvents = False
   If AG > 1 Then F = VBA.Int((AG) * 24) Else F = VBA.Hour(AG)
   If AH > 1 Then G = VBA.Int((AH) * 24) + 1 Else G = VBA.Hour(AH) + 1
   If AI > 1 Then H = VBA.Int((AI) * 24) Else H = VBA.Hour(AI)

Case VBA.Minute(AG) = 0 And VBA.Minute(AH) = 0 And VBA.Minute(AI) > 30
   Application.EnableEvents = False
   If AG > 1 Then F = VBA.Int((AG) * 24) Else F = VBA.Hour(AG)
   If AH > 1 Then G = VBA.Int((AH) * 24) Else G = VBA.Hour(AH)
   If AI > 1 Then H = VBA.Int((AI) * 24) + 1 Else H = VBA.Hour(AI) + 1
'---------------------------------------------------------------------------------

'SECONDO CASO
Case VBA.Minute(AG) > 0 And VBA.Minute(AH) > 0 And VBA.Minute(AI) = 0 _
   And VBA.Minute(AG) + VBA.Minute(AH) > 30 And VBA.Minute(AG) _
   + VBA.Minute(AH) <= 60
   Application.EnableEvents = False
   If AG > 1 Then F = VBA.Int((AG) * 24) + 1 Else F = VBA.Hour(AG) + 1
   If AH > 1 Then G = VBA.Int((AH) * 24) Else G = VBA.Hour(AH)
   If AI > 1 Then H = VBA.Int((AI) * 24) Else H = VBA.Hour(AI)
   
Case VBA.Minute(AG) > 0 And VBA.Minute(AH) > 0 And VBA.Minute(AI) = 0 _
   And VBA.Minute(AG) + VBA.Minute(AH) > 60
   Application.EnableEvents = False
   If AG > 1 Then F = VBA.Int((AG) * 24) Else F = VBA.Hour(AG)
   If AH > 1 Then G = VBA.Int((AH) * 24) + 1 Else G = VBA.Hour(AH) + 1
   If AI > 1 Then H = VBA.Int((AI) * 24) Else H = VBA.Hour(AI)
'----------------------------------------------------------------------------------

'TERZO CASO
Case VBA.Minute(AG) > 0 And VBA.Minute(AH) = 0 And VBA.Minute(AI) > 0 _
   And VBA.Minute(AG) + VBA.Minute(AI) > 30 And VBA.Minute(AG) _
   + VBA.Minute(AI) <= 60
   Application.EnableEvents = False
   If AG > 1 Then F = VBA.Int((AG) * 24) Else F = VBA.Hour(AG)
   If AH > 1 Then G = VBA.Int((AH) * 24) + 1 Else G = VBA.Hour(AH) + 1
   If AI > 1 Then H = VBA.Int((AI) * 24) Else H = VBA.Hour(AI)

Case VBA.Minute(AG) > 0 And VBA.Minute(AH) = 0 And VBA.Minute(AI) > 0 _
   And VBA.Minute(AG) + VBA.Minute(AI) > 60
   Application.EnableEvents = False
   If AG > 1 Then F = VBA.Int((AG) * 24) Else F = VBA.Hour(AG)
   If AH > 1 Then G = VBA.Int((AH) * 24) Else G = VBA.Hour(AH)
   If AI > 1 Then H = VBA.Int((AI) * 24) + 1 Else H = VBA.Hour(AI) + 1
'-------------------------------------------------------------------------------------

'QUARTO CASO
Case VBA.Minute(AG) = 0 And VBA.Minute(AH) > 0 And VBA.Minute(AI) > 0 _
   And VBA.Minute(AH) + VBA.Minute(AI) > 30 And VBA.Minute(AH) _
   + VBA.Minute(AI) <= 60
   Application.EnableEvents = False
   If AG > 1 Then F = VBA.Int((AG) * 24) Else F = VBA.Hour(AG)
   If AH > 1 Then G = VBA.Int((AH) * 24) + 1 Else G = VBA.Hour(AH) + 1
   If AI > 1 Then H = VBA.Int((AI) * 24) Else H = VBA.Hour(AI)

Case VBA.Minute(AG) = 0 And VBA.Minute(AH) > 0 And VBA.Minute(AI) > 0 _
   And VBA.Minute(AH) + VBA.Minute(AI) > 60
   Application.EnableEvents = False
   If AG > 1 Then F = VBA.Int((AG) * 24) Else F = VBA.Hour(AG)
   If AH > 1 Then G = VBA.Int((AH) * 24) Else G = VBA.Hour(AH)
   If AI > 1 Then H = VBA.Int((AI) * 24) + 1 Else H = VBA.Hour(AI) + 1
'-----------------------------------------------------------------------------------------

'OTTAVO CASO
Case VBA.Minute(AG) > 0 And VBA.Minute(AH) > 0 And VBA.Minute(AI) > 0 _
   And VBA.Minute(AG) + VBA.Minute(AH) + VBA.Minute(AI) > 150
   Application.EnableEvents = False
   If AG > 1 Then F = VBA.Int((AG) * 24) Else F = VBA.Hour(AG)
   If AH > 1 Then G = VBA.Int((AH) * 24) + 1 Else G = VBA.Hour(AH) + 1
   If AI > 1 Then H = VBA.Int((AI) * 24) + 2 Else H = VBA.Hour(AI) + 2
'------------------------------------------------------------------------------------------

'SETTIMO CASO
Case VBA.Minute(AG) > 0 And VBA.Minute(AH) > 0 And VBA.Minute(AI) > 0 _
   And VBA.Minute(AG) + VBA.Minute(AH) + VBA.Minute(AI) > 120 _
   And VBA.Minute(AG) + VBA.Minute(AH) + VBA.Minute(AI) <= 150
   Application.EnableEvents = False
   If AG > 1 Then F = VBA.Int((AG) * 24) Else F = VBA.Hour(AG)
   If AH > 1 Then G = VBA.Int((AH) * 24) Else G = VBA.Hour(AH)
   If AI > 1 Then H = VBA.Int((AI) * 24) + 2 Else H = VBA.Hour(AI) + 2
'--------------------------------------------------------------------------------------------

'SESTO CASO
Case VBA.Minute(AG) > 0 And VBA.Minute(AH) > 0 And VBA.Minute(AI) > 0 _
   And VBA.Minute(AG) + VBA.Minute(AH) + VBA.Minute(AI) > 60 _
   And VBA.Minute(AG) + VBA.Minute(AH) + VBA.Minute(AI) <= 90
   Application.EnableEvents = False
   If AG > 1 Then F = VBA.Int((AG) * 24) Else F = VBA.Hour(AG)
   If AH > 1 Then G = VBA.Int((AH) * 24) Else G = VBA.Hour(AH)
   If AI > 1 Then H = VBA.Int((AI) * 24) + 1 Else H = VBA.Hour(AI) + 1

Case VBA.Minute(AG) > 0 And VBA.Minute(AH) > 0 And VBA.Minute(AI) > 0 _
   And VBA.Minute(AG) + VBA.Minute(AH) + VBA.Minute(AI) > 90 _
   And VBA.Minute(AG) + VBA.Minute(AH) + VBA.Minute(AI) <= 120
   Application.EnableEvents = False
   If AG > 1 Then F = VBA.Int((AG) * 24) Else F = VBA.Hour(AG)
   If AH > 1 Then G = VBA.Int((AH) * 24) + 1 Else G = VBA.Hour(AH) + 1
   If AI > 1 Then H = VBA.Int((AI) * 24) + 1 Else H = VBA.Hour(AI) + 1
'-----------------------------------------------------------------------------------------

'QUINTO CASO
Case VBA.Minute(AG) > 0 And VBA.Minute(AH) > 0 And VBA.Minute(AI) > 0 _
   And VBA.Minute(AG) + VBA.Minute(AH) + VBA.Minute(AI) > 30 _
   And VBA.Minute(AG) + VBA.Minute(AH) + VBA.Minute(AI) <= 60
   Application.EnableEvents = False
   If AG > 1 Then F = VBA.Int((AG) * 24) Else F = VBA.Hour(AG)
   If AH > 1 Then G = VBA.Int((AH) * 24) + 1 Else G = VBA.Hour(AH) + 1
   If AI > 1 Then H = VBA.Int((AI) * 24) Else H = VBA.Hour(AI)

Case VBA.Minute(AG) > 0 And VBA.Minute(AH) > 0 And VBA.Minute(AI) > 0 _
   And VBA.Minute(AG) + VBA.Minute(AH) + VBA.Minute(AI) > 60
   Application.EnableEvents = False
   If AG > 1 Then F = VBA.Int((AG) * 24) Else F = VBA.Hour(AG)
   If AH > 1 Then G = VBA.Int((AH) * 24) Else G = VBA.Hour(AH)
   If AI > 1 Then H = VBA.Int((AI) * 24) + 1 Else H = VBA.Hour(AI) + 1
'--------------------------------------------------------------------------------------------


'---------------------------------------------------------------------------------------------
End Select
End If
Set AG = Nothing
Set AH = Nothing
Set AI = Nothing
Set F = Nothing
Set G = Nothing
Set H = Nothing
Application.EnableEvents = True
End Sub
trittico69
Utente Senior
 
Post: 487
Iscritto il: 16/08/09 18:41

Sponsor
 

Re: Trasformare u codice vba in formula excel 2003

Postdi Anthony47 » 16/05/11 23:29

In F10:
Codice: Seleziona tutto
=SE(E(MINUTO(AG31)<=30;MINUTO(AH31)<=30;MINUTO(AI31)<=30);SE(AG31>1;INT(AG31*24);ORA(AG31));0) + stessa formula relativa a secondo caso + stessa formula relativa a terzo caso +. . . + stessa formula relativa a ventiduesimo caso

In G10 e H10, formule analoghe.

Una qualche semplificazione ulteriore la potresti avere lavorando con una tabella di stati, come suggerito qui: viewtopic.php?f=26&t=91536&p=522186#p522186

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: 13899
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Trasformare u codice vba in formula excel 2003

Postdi trittico69 » 17/05/11 14:52

Antony ma va fatto cosi

Pimo caso
Codice: Seleziona tutto
=SE(E(MINUTO(AG31)<=30;MINUTO(AH31)<=30;MINUTO(AI31)<=30);SE(AG31>1;INT(AG31*24);ORA(AG31));0) +
 
Secondo caso
Codice: Seleziona tutto
SE(E(MINUTO(AG31)<=30;MINUTO(AH31)=0;MINUTO(AI31)=0);SE(AG31>1;INT(AG31*24);ORA(AG31));0)……
oppure

primo caso

Codice: Seleziona tutto
=SE(E(MINUTO(AG31)<=30;MINUTO(AH31)<=30;MINUTO(AI31)<=30);SE(AG31>1;INT(AG31*24);ORA(AG31));0) +
SE(E(MINUTO(AG31)<=30;MINUTO(AH31)<=30;MINUTO(AI31)<=30);SE(AG31>1;INT(AH31*24);ORA(AH31));0) +
SE(E(MINUTO(AG31)<=30;MINUTO(AH31)<=30;MINUTO(AI31)<=30);SE(AG31>1;INT(AI31*24);ORA(AI31));0) +
Secondo caso

Codice: Seleziona tutto
SE(E(MINUTO(AG31)<=30;MINUTO(AH31)=0;MINUTO(AI31)=0);SE(AG31>1;INT(AG31*24);ORA(AG31));0)+
SE(E(MINUTO(AG31)<=30;MINUTO(AH31)=0;MINUTO(AI31)=0);SE(AG31>1;INT(AH31*24);ORA(AH31));0)+
SE(E(MINUTO(AG31)<=30;MINUTO(AH31)=0;MINUTO(AI31)=0);SE(AG31>1;INT(AI31*24);ORA(AI31));0)………………..
trittico69
Utente Senior
 
Post: 487
Iscritto il: 16/08/09 18:41

Re: Trasformare u codice vba in formula excel 2003

Postdi Anthony47 » 18/05/11 14:32

La seconda, inserendo 22 spezzoni in ognuno delle tre formule che vanno in F10, G10, H10.

Ovviamente secondo me e' meglio che ti tieni la macro...

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: 13899
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Trasformare u codice vba in formula excel 2003

Postdi trittico69 » 18/05/11 21:45

cosa intendi per spezzoni?
se intendi fino al punto e virgola c'è ne sono 6 per rigo.....
e mi trasformi anche questo codice in formula?
Codice: Seleziona tutto
Case VBA.Minute(AG) > 0 And VBA.Minute(AH) > 0 And VBA.Minute(AI) > 0 _
   And VBA.Minute(AG) + VBA.Minute(AH) + VBA.Minute(AI) > 90 _
   And VBA.Minute(AG) + VBA.Minute(AH) + VBA.Minute(AI) <= 120
   Application.EnableEvents = False
   If AG > 1 Then F = VBA.Int((AG) * 24) Else F = VBA.Hour(AG)
   If AH > 1 Then G = VBA.Int((AH) * 24) + 1 Else G = VBA.Hour(AH) + 1
   If AI > 1 Then H = VBA.Int((AI) * 24) + 1 Else H = VBA.Hour(AI) + 1

grazie..
trittico69
Utente Senior
 
Post: 487
Iscritto il: 16/08/09 18:41

Re: Trasformare u codice vba in formula excel 2003

Postdi Anthony47 » 19/05/11 14:39

cosa intendi per spezzoni?

Ad esempio questa ha 3 spezzoni
Codice: Seleziona tutto
=SE(E(MINUTO(AG31)<=30;MINUTO(AH31)<=30;MINUTO(AI31)<=30);SE(AG31>1;INT(AG31*24);ORA(AG31));0) +
SE(E(MINUTO(AG31)<=30;MINUTO(AH31)<=30;MINUTO(AI31)<=30);SE(AG31>1;INT(AH31*24);ORA(AH31));0) +
SE(E(MINUTO(AG31)<=30;MINUTO(AH31)<=30;MINUTO(AI31)<=30);SE(AG31>1;INT(AI31*24);ORA(AI31));0) +


Poiche' la tua Select Case comprende 22 casi, dovrai inserire in ogni formula 22 spezzoni simili ai 3 dell' esempio.

e mi trasformi anche questo codice in formula?

Codice: Seleziona tutto
=Se(e(Minuto(AG31)>0;Minuto(AH1)>0;Minuto(AI1)>0;(Minuto(AG31)+ Minuto(AH31)+ Minuto(AI31))>90; (Minuto(AG31)+ Minuto(AH31)+ Minuto(AI31))<=120); SE(AG31>1;INT(AG31*24);ORA(AG31));0)
Questa e' per F10; formule analoghe in G10 e H10

Pero' ti ho detto che secondo me dovresti tenerti la macro, perche' e' improbabile riuscire a mantenere 3 formule con 22 spezzoni ciascuna, quindi se vuoi procedere ad eliminare la macro devi continuare da solo; d' altra parte e' solo un gioco di tempo e di pazienza.

Ti ricordo che per questo problema io ti avevo suggerito di creare una tabella di stati
(Vedi viewtopic.php?f=26&t=91536&p=522186#p522186), forse dovresti riesaminare il suggerimento.

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: 13899
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Trasformare un codice vba in formula excel 2003

Postdi trittico69 » 19/05/11 21:07

ok grazie
trittico69
Utente Senior
 
Post: 487
Iscritto il: 16/08/09 18:41


Torna a Applicazioni Office Windows


Topic correlati a "Trasformare un codice vba in formula excel 2003":


Chi c’è in linea

Visitano il forum: Nessuno e 11 ospiti