Newsgroup: it.comp.lang.visual-basic
Titolo: Arrotondamento a Numero in Tabella!

Salve..
Avrei bisogno di arrotondare un numero al numero + vicino tra quelli
presenti in una tabella!
Mi spiego meglio...ho una tabella e una formula, devo far si che il
risultato della formula venga arrotondato ad uno dei numeri presenti in
tabella!
C'è modo per fare ciò?
Grazie

medioma...@hotmail.com
 ha scritto:

Dacci indicazioni sulla tipologia di ciò che stai trattando....!
Di che precisione stiamo parlando....?
Interi o con virgola, se sono Interi ti basterebbe usare
Int(TuoRisultato) sempre che l'arrotondamento sia da valutare per
difetto, oppure è per eccesso...., oppure ....
Insomma devi darci il modo di capire l'ambito nel quale ti devi
muovere.
@Alex

 difetto, oppure è per eccesso...., oppure ....
Mi sa che lui non vuole arrotondare, ma vuole un algoritmo che gli dica 
a quale numero di una lista preimpostata è più vicino un altro numero 
dato. Insomma, quale numero della lista dà la differenza inferiore con 
quello da valutare.
-- 
news:it-alt.comp.software.openoffice : Il newsgroup dedicato a
OpenOffice.org, la suite open source di applicazioni per ufficio.
Saluti, VITRIOL

...secondo me la via più breve è questa:
1) leggi con una query i valori della tabella, e costruisci una matrice
delle stesse dimensioni della tabella e con valori i  valori della
tabella sottratti del numero in questione: ovvero ogni elemento della
matrice varrà: M(i,j)=(elemento tabella -numero in questione)
( esempio: 3 Colonne e x righe:
while rs.EoF = False:
i=0
v(i,0) = (rs("ColonnaA"-Numero in questione),rs("colonnaB"-Numero in
questione),rs("colonnaC")-Numero in questione)
I=i+1
rs.MoveNext
Wend
-------ovviamente ne prendi i valori assoluti--------
2) con un ciclo simile (due for Next incrociati) trasformi la matrice
in un vettore riga...
3) Estrai il minimo valore dal vettore (in rete ne è pieno di funzioni
che lo fanno)
4) MAGIA!! al minimo valore trovato ci risommi il numero in
questione... e quello è il valore da affibbiargli!!!!

Si VITRIOL ha centrato il problema!
Ho una tabella in Excel e devo approssimare il risultato di un
algoritmo di calcolo al numero + vicino presente in tabella!
Ora provo il codice che mi avete scritto..anche se non capisco dove
imposta la tabella! Ricordo che io ho già la tabella fatta in excel
(che poi è un vettore riga)..

pietro Ballini ha scritto:

Minchia mi vedo male!!


Non potevi aspettare ancora un pò a cambiare nik?
-- 
Greg 

greg ha scritto:

A Cambiare nik?? Io non ho cambiato proprio niente! Quando ho fatto
l'iscrizione ho scritto nella casella "Nome visualizzato" (o qualcosa
del genere) Dario84..non so perchè nel primo mess non è uscito!

 questione... e quello è il valore da affibbiargli!!!!
Non fa prima a fare una cosa del genere?
Select first 1 1,valore from tabella where valore<=§risultato formula§
order by valore desc
UNION
Select first 1 2,valore  from tabella where valore>=§risultato formula§
order by valore asc
A questo punto gli ritorna un rec.set di max 2 record, e fare un
confronto tra due è banale.
O ancora meglio se il dbms supporta l'abs:
select first 1 valore from tabella order by abs (valore-§risultato
formula§) asc
Sempre se ho capito il problema...
-- 
Freccia@Bulldozer63 :D

Vi faccio vedere che ho fatto fino ad ora:
Dim I, L As Integer
Dim VB, VG, ValB, ValG As Variant
Dim AB(8), AG(8) As Double
Dim MinB, MinG As Double
VB = Range("B19")
For I = 0 To 7
AB(I) = Abs(Cells(4, 4 + I) - VB)
Next
VG = Range("B20")
For I = 0 To 7
AG(I) = Abs(Cells(5 + I, 4) - VG)
Next
MinB = AB(0)                     'Questo ciclo trova il minimo
dell'array delle Beta e lo salva in MinB
For L = 1 To 7
If AB(L) < MinB Then MinB = AB(L)
Next
ValB = (MinB + VB)
MinG = AG(0)                     'Questo ciclo trova il minimo
dell'array delle Gamma e lo salva in MinG
For L = 1 To 7
If AG(L) < MinG Then MinG = AG(L)
Next
ValG = (MinG + VG)
MsgBox ValB & " e " & ValG
Il problem è che quando vado a fare la somma mi trovo che MIN è in
valore assoluto, quindi non mi da il numero presente in tabella!

Azz vero...infatti il valore assoluto non ci vuole.... così torna
tutto....basta solo togliere quello...

 Saluti, VITRIOL
Ma tu hai la sfera di cristallo.....!!
;-)
Beh direi che essendo così hai già fornito tu in modo esplicito la
soluzione più semplice...!
@Alex

 tutto....basta solo togliere quello...
Ma se tolgo il valore assoluto poi come valore + basso trova quelli
negativi..e non va bene!!
Per esempio:
Se nella tabella c'è:   1    2    3    4    5    6
E il numero da approssimare è 2,3
Il mio array senza valori assoluti sarà:   -1,3   -0,3   1,3   2,3
3,3   4,3 
Il minore di questi numeri è -1,3...e quindi non mi trovo!!

Trovato!!!
Dim I, L As Integer
Dim VB, VG, ValB, ValG As Variant
Dim AB(8), AG(8) As Double
Dim MinB, MinB2, MinG, MinG2 As Double
VB = Range("B19")
For I = 0 To 7
AB(I) = (Cells(4, 4 + I) - VB)
Next
VG = Range("B20")
For I = 0 To 7
AG(I) = (Cells(5 + I, 4) - VG)
Next
MinB = AB(0)
MinB2 = Abs(MinB)
For L = 1 To 7
If Abs(AB(L)) < MinB2 Then MinB = AB(L)
MinB2 = Abs(MinB)
Next
ValB = (MinB + VB)
MinG = AG(0)
MinG2 = Abs(MinG)
For L = 1 To 7
If Abs(AG(L)) < MinG2 Then MinG = AG(L)
MinG2 = Abs(MinG)
Next
ValG = (MinG + VG)
Ok..sapete qual è il bello? Che io so scrivere solo il codice, ma ora
non so dove ca$$o devo metterlo sto codice!! LOOOOOL

dici?...mmmm  ma se ci sommi di nuovo 2,3...... -1,3+2,3= 1.. NO? :)))

Azzz o che ho scritto? hahahaha scusa!!!!

 Azzz o che ho scritto? hahahaha scusa!!!!
Ti senti bene?? Tutto ok? Chiamo un medico?? :D :D