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ì 21 gennaio 2025
    Bari
    78
    09
    70
    03
    23
    Cagliari
    32
    88
    30
    13
    45
    Firenze
    87
    23
    15
    39
    86
    Genova
    71
    48
    67
    59
    23
    Milano
    58
    50
    80
    85
    29
    Napoli
    90
    81
    79
    82
    62
    Palermo
    70
    33
    90
    05
    10
    Roma
    15
    71
    55
    85
    76
    Torino
    89
    09
    18
    33
    69
    Venezia
    44
    80
    82
    73
    58
    Nazionale
    80
    25
    13
    63
    17
    Estrazione Simbolotto
    Bari
    39
    36
    34
    14
    31
Indietro
Alto