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ì 04 agosto 2026
    Bari
    40
    77
    49
    65
    43
    Cagliari
    75
    06
    03
    62
    15
    Firenze
    42
    04
    69
    27
    43
    Genova
    05
    47
    57
    50
    89
    Milano
    37
    88
    01
    85
    42
    Napoli
    33
    28
    45
    18
    23
    Palermo
    04
    70
    38
    58
    85
    Roma
    62
    18
    28
    59
    43
    Torino
    86
    24
    40
    34
    61
    Venezia
    25
    12
    78
    53
    39
    Nazionale
    49
    07
    65
    62
    70
    Estrazione Simbolotto
    Nazionale
    35
    24
    36
    05
    12

Ultimi Messaggi

Indietro
Alto