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ì 29 aprile 2025
    Bari
    03
    07
    32
    05
    33
    Cagliari
    66
    62
    27
    39
    26
    Firenze
    07
    41
    70
    75
    53
    Genova
    10
    26
    64
    44
    74
    Milano
    30
    76
    66
    51
    65
    Napoli
    56
    80
    34
    11
    29
    Palermo
    74
    37
    48
    13
    38
    Roma
    02
    21
    18
    51
    68
    Torino
    64
    06
    32
    88
    54
    Venezia
    66
    01
    11
    74
    54
    Nazionale
    65
    63
    50
    55
    33
    Estrazione Simbolotto
    Genova
    45
    10
    12
    24
    40

Ultimi Messaggi

Indietro
Alto