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ì 17 febbraio 2026
    Bari
    40
    72
    47
    39
    63
    Cagliari
    03
    66
    47
    27
    35
    Firenze
    14
    62
    53
    08
    51
    Genova
    55
    12
    81
    52
    04
    Milano
    41
    31
    55
    23
    59
    Napoli
    30
    09
    38
    14
    50
    Palermo
    19
    86
    40
    32
    07
    Roma
    65
    88
    51
    42
    41
    Torino
    10
    06
    34
    84
    81
    Venezia
    06
    25
    82
    24
    52
    Nazionale
    10
    74
    04
    29
    88
    Estrazione Simbolotto
    Cagliari
    01
    41
    21
    44
    28
Indietro
Alto