Novità

Function che functiona ma non si può guardare

i legend

Premium Member
Buona serata, sto facendo una funzione da utilizzare in spaziometria x una ricerca,
la funzione cosi com'è funziona ma credo si possa scrivere in modo più elegante e magari che sia anche più veloce.
Posto il codice:
Codice:
Function SequenzaPD(sEstrazione)

' dichiaro tutte le variabili che uso
Dim p1,p2,p3,p4,p5,pd1,pd2,pd3,pd4,pd5

' sEstrazione nella sub è  "= stringaEstratti(es,ru)"
' estraggo il valore numerico dei singoli estratti dalla stringa estrazione
p1 = CInt(Mid(sEstrazione,1,2))
p2 = CInt(Mid(sEstrazione,4,2))
p3 = CInt(Mid(sEstrazione,7,2))
p4 = CInt(Mid(sEstrazione,10,2))
p5 = CInt(Mid(sEstrazione,13,2))


' valuto la sequenza pari dispari
If pari(p1) = True Then : pd1 = "P" : Else pd1 = "D"
If pari(p2) = True Then : pd2 = "P" : Else pd2 = "D"
If pari(p3) = True Then : pd3 = "P" : Else pd3 = "D"
If pari(p4) = True Then : pd4 = "P" : Else pd4 = "D"
If pari(p5) = True Then : pd5 = "P" : Else pd5 = "D"



' costruisco la sequenza pari dispari
SequenzaPD = pd1 & pd2 & pd3 & pd4 & pd5




End Function

Fatemi sapere che ne pensate.....
Nella sub ho impostato in un input box la sequenza che voglio estrapolare dalle estrazioni che confronto con il risultato passato dalla function.
Problema: nell'inputBox la sequenza e case sensitive.
si può risolvere?
Ciao e grazie
 
Ciao ...

l'ottimizzazione presume una buona conoscenza del linguaggio e dei trucchi che s'aquisiscono con l'esperienza.

Ti propongo questa Main ... per pilotare la tua function e risolvere il problema (se ho capito bene).

Codice:
Sub Main
	Dim CFR,Es,SEstrazione,R
	CFR = UCase(InputBox("","SEQUENZA","ppppD"))
	For Es = EstrazioneFin - 100 To EstrazioneFin
		For R = 1 To 10
			SEstrazione = StringaEstratti(Es,R)
			If SequenzaPD(SEstrazione) = CFR Then
				Scrivi DataEstrazione(Es) & " " & SiglaRuota(R) & " " & SEstrazione 
				Scrivi
			End If
		Next
	Next
End Sub
Function SequenzaPD(sEstrazione)
	' dichiaro tutte le variabili che uso
	Dim p1,p2,p3,p4,p5,pd1,pd2,pd3,pd4,pd5
	' sEstrazione nella sub è  "= stringaEstratti(es,ru)"
	' estraggo il valore numerico dei singoli estratti dalla stringa estrazione
	p1 = CInt(Mid(sEstrazione,1,2))
	p2 = CInt(Mid(sEstrazione,4,2))
	p3 = CInt(Mid(sEstrazione,7,2))
	p4 = CInt(Mid(sEstrazione,10,2))
	p5 = CInt(Mid(sEstrazione,13,2))
	' valuto la sequenza pari dispari
	If pari(p1) = True Then : pd1 = "P" : Else pd1 = "D"
	If pari(p2) = True Then : pd2 = "P" : Else pd2 = "D"
	If pari(p3) = True Then : pd3 = "P" : Else pd3 = "D"
	If pari(p4) = True Then : pd4 = "P" : Else pd4 = "D"
	If pari(p5) = True Then : pd5 = "P" : Else pd5 = "D"
	' costruisco la sequenza pari dispari
	SequenzaPD = pd1 & pd2 & pd3 & pd4 & pd5
End Function

:) Cordiali saluti a tutte/i.
 
Buona giornata Joe,visto l'ora in cui scrivo :-)
Per l'ottimizzazione mi riferivo alla funzione che ho scritto, se poteva essere scritta meglio...........
E' si ! Risolto il problema case Sensitive, uCase trasforma tutto in maiuscolo come il risultato della mia function.....
Buona conoscenza del linguaggio!!!Hai ragione .... ora sto studiando su un libro vb2010, e, grazie al vostro aiuto spero di fare qualcosina di buono :-)
Grazie mille, come sempre,e, spero di poter essere d'aiuto anche io un giorno
Ciao
 
Ultima modifica:
Bhe ...

Il tomo che ti s'ha ad apprendere ... t'orienta ad un linguaggio di compatibilità con i classici del software.

Quanto hai scritto pare molto simile ad una macro di excel o alla sua istruzione, per scomporre una stringa.

Mentre ... i numeri erano già "separati" (o meglio, indirizzabili direttamente).

La Function utilizzza una istruzione "pesante" e/o di livello maggiore ... per unire i numeri (in StringaEstratti)

PIU' una "routine" altrettanto pesante per ritornare al livello ... di numeri separati.

Per immaginazione è come scavare una buca, per avere la terra, con cui riempirla.

E' un lavoro tanto "pesante" quanto ... apparentemente inutile.

Ma questo "errore" (che errore non è) dipende dalla mancanza di esperienza.

Quindi ... per me si, c'è spazio per ottimizzare.

Tuttavia per quanto vedo, sei molto bravo, ed una spugna nell' imparare,

dunque, quel tempo di cui scrivi ... è breve.

:) Cordiali saluti

Codice:
Sub Main
T = Timer
	Dim CFR,Es,sEstrazione,R
	CFR = UCase(InputBox("P = pari / D = dispari ","SEQUENZA","PpppD"))
	For Es = EstrazioneFin - 1000 To EstrazioneFin
		For R = 1 To 10
			If PD(Es,R) = CFR Then
				sEstrazione = StringaEstratti(Es,R)
				Scrivi DataEstrazione(Es) & " " & SiglaRuota(R) & " " & sEstrazione
			End If
		Next
	Next
	Scrivi Timer -T
End Sub

Function PD(Es,R)
 Dim Ris, P 
	For P = 1 To 5
		If pari(Estratto(Es,R,P)) Then  Ris = Ris + "P" Else Ris = Ris + "D"
	Next
	PD = Ris
End Function

:) Buona Giornata a tutte/i.
 
Ultima modifica:
ciao joe , hai ragione, devo allontanarmi da excel,poi, ti dico che sei troppo buono, e aggiungo, che la tua funzione sta alla mia , come Merylin sta alla befana.
Ho moltissimo da imparare ,e, quindi da studiare
Grazie mille per il tuo prezioso aiuto :-)
 

Ultima estrazione Lotto

  • Estrazione del lotto
    martedì 27 maggio 2025
    Bari
    15
    61
    19
    34
    80
    Cagliari
    69
    10
    33
    22
    25
    Firenze
    18
    55
    30
    29
    78
    Genova
    64
    18
    35
    56
    57
    Milano
    41
    86
    61
    17
    89
    Napoli
    87
    31
    27
    57
    16
    Palermo
    31
    69
    53
    64
    14
    Roma
    14
    24
    02
    08
    29
    Torino
    83
    04
    79
    49
    27
    Venezia
    19
    57
    53
    10
    33
    Nazionale
    14
    68
    86
    56
    58
    Estrazione Simbolotto
    Milano
    42
    04
    44
    34
    07
Indietro
Alto